summaryrefslogtreecommitdiff
path: root/1Tdata/xbase/xbase64-4.1.4
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 /1Tdata/xbase/xbase64-4.1.4
parentdd70ff8bf32c2d7ed365004b1770058265db1978 (diff)
New upstream version 4.1.4
Diffstat (limited to '1Tdata/xbase/xbase64-4.1.4')
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/AUTHORS42
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/COPYING688
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/INSTALL6
-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.bat9
-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.bat18
-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.bat20
-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.bat18
-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/Doxyfile2694
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/doxyout.txt438
-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.pngbin0 -> 676 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bdwn.pngbin0 -> 147 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/checkndx_8cpp.html117
-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.pngbin0 -> 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.pngbin0 -> 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.pngbin0 -> 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.pngbin0 -> 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.pngbin0 -> 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.pngbin0 -> 637 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/closed.pngbin0 -> 132 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dbfxtrct_8cpp.html136
-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.pngbin0 -> 746 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.css1841
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.svg26
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dynsections.js121
-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.pngbin0 -> 616 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderopen.pngbin0 -> 597 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions.html82
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_b.html79
-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.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func.html82
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_b.html79
-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.html80
-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.html77
-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.html78
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_l.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_m.html79
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_n.html77
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_o.html93
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_p.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_r.html85
-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.html79
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_u.html78
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_v.html79
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_w.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_x.html103
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_y.html77
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_z.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_~.html82
-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.html77
-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.html78
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_l.html81
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_m.html79
-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.html94
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_p.html94
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_r.html87
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_rela.html77
-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.html79
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_u.html82
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_v.html79
-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.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_x.html106
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_y.html77
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_z.html80
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_~.html82
-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.html77
-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.html75
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/jquery.js35
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menu.js127
-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.html83
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_func.html75
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_type.html78
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_vars.html78
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespaces.html89
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacexb.html290
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_f.pngbin0 -> 153 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_g.pngbin0 -> 95 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_h.pngbin0 -> 98 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/open.pngbin0 -> 123 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/reindex_8cpp.html117
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.js6
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.js11
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.js9
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.js9
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.html37
-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.html37
-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.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.js6
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.js12
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.html37
-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.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.js21
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.js14
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.html37
-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.js12
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/close.svg31
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.js100
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.js6
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.js9
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.js5
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.js6
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.js9
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.html37
-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.html37
-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.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.js5
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.js8
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.js21
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.js12
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/mag_sel.svg74
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/nomatches.html13
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.js5
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.css263
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.js794
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_l.pngbin0 -> 567 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_m.pngbin0 -> 158 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_r.pngbin0 -> 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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.js7
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.js5
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.html37
-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.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.js8
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.js5
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.js6
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.js4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.html37
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.js7
-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.js8
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/splitbar.pngbin0 -> 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.pngbin0 -> 853 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_on.pngbin0 -> 845 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_a.pngbin0 -> 142 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_b.pngbin0 -> 169 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_h.pngbin0 -> 177 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_s.pngbin0 -> 184 bytes
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tabs.css1
-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.html117
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpix_8cpp.html117
-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.html147
-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.html118
-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.html117
-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/Makefile23
-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.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.eps197
-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.eps203
-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.eps203
-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.eps219
-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.eps203
-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.eps203
-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.tex25
-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.sty601
-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.sty448
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespaces.tex4
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespacexb.tex126
-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.tex17
-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.sty2557
-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.tex17
-rw-r--r--1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpix_8cpp.tex17
-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.tex42
-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.tex18
-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.tex17
-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.txt11
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/AddNewMemoFileType.txt9
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/GettingStarted.txt86
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/Hacking.txt28
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/Locking.txt53
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/howto/mac_cmake_compile.txt1
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagram.jpgbin0 -> 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.txt674
-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.html69
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbac.html107
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/html/xbad.html27
-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.jpgbin0 -> 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.txt674
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/license/preamble.txt11
-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.txt54
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/DirectoryStructure.txt32
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/ExpressionNotes.odsbin0 -> 20662 bytes
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/Expressions.txt13
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/FileTypeByte.txt53
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/IndexNotes.odsbin0 -> 23172 bytes
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/RealDelete.txt88
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/Release.txt34
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/Versions.txt30
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/docs/misc/xbTmpFiles.txt12
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/droptbl.sql9
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/jointest.sql43
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/oneNdxTag.sql18
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testc.sql13
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testd.sql12
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testdd.sql14
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testflg.sql12
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testmdx.sql12
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/testmdx2.sql12
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/sql/twotags.sql10
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/core/xbbcd.cpp301
-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.cpp111
-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.h100
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h93
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h70
-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.h78
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h613
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h.nope605
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h257
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h367
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h94
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xblog.h67
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h224
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbretcod.h98
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h161
-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.h74
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h63
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h55
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h52
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/include/xbxbase.h235
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbalttbl.cpp120
-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.cpp155
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrptbl.cpp129
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbinsert.cpp190
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbselect.cpp97
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbset.cpp90
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbsql.cpp176
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/sql/xbstmt.cpp679
-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.cpp127
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_blockread.cpp168
-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.cpp327
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_memos.cpp357
-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.cpp123
-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.cpp193
-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.cpp342
-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.cpp97
-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.cpp100
-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.cpp85
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumpdbt.cpp109
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumprecs.cpp98
-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.cpp84
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_tblinfo.cpp104
-rwxr-xr-x1Tdata/xbase/xbase64-4.1.4/src/utils/xb_undelall.cpp82
804 files changed, 152501 insertions, 0 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/1Tdata/xbase/xbase64-4.1.4/COPYING b/1Tdata/xbase/xbase64-4.1.4/COPYING
new file mode 100755
index 0000000..01ac73a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/COPYING
@@ -0,0 +1,688 @@
+
+The XBase library itself is released under the GNU Lesser General Public
+License, see the text of the GNU LGPL below.
+
+The executable programs in the bin, examples, and libtest directories
+are release under the GNU General Public License, see the text of the
+GNU GPL below.
+
+Any licensing questions should be directed to XDB-devel@lists.sourceforge.net
+
+
+-------------------------------------------------------------------------
+
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/1Tdata/xbase/xbase64-4.1.4/INSTALL b/1Tdata/xbase/xbase64-4.1.4/INSTALL
new file mode 100755
index 0000000..20ced28
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/INSTALL
@@ -0,0 +1,6 @@
+Basic Installation
+==================
+
+See Chapter 1 in the manual on getting started.
+
+docs/html/xbc1.html
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/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/BuildBorland.bat b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/BuildBorland.bat
new file mode 100755
index 0000000..a61eb62
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/BuildBorland.bat
@@ -0,0 +1,9 @@
+rem Build Make files for Borland free compiler 5.5
+
+rem - This does not work if both BC45 and bcc55 are on the same drive
+
+rem set CXX=C:\bcc55\bin\
+
+cmake -G "Borland Makefiles" >> build.txt
+
+make \ No newline at end of file
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/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CleanBorland.bat b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CleanBorland.bat
new file mode 100755
index 0000000..eed30b7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/borland5.5/CleanBorland.bat
@@ -0,0 +1,18 @@
+
+rem Use this batch file to completely clean the Borland directory tree for a clean build from scratch
+
+rd /S /Q bin
+rd /S /Q CMakeFiles
+rd /S /Q include
+rd /S /Q lib
+rd /S /Q testing
+del *.cmake
+del CmakeCache.txt
+del Makefile
+del *.h
+del *.exp
+del *.lib
+del *.filters
+del *.vcxproj
+del *.sln
+del build.txt \ No newline at end of file
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/1Tdata/xbase/xbase64-4.1.4/build/win32vs/CleanWin.bat b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/CleanWin.bat
new file mode 100755
index 0000000..ad5da5b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win32vs/CleanWin.bat
@@ -0,0 +1,20 @@
+
+rem Use this batch file to completely clean the Windows 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 Win32VS
+rd /S /Q bin
+del *.cmake
+del CmakeCache.txt
+del Makefile
+del *.h
+del *.exp
+del *.lib
+del *.filters
+del *.vcxproj
+del *.sln
+
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/1Tdata/xbase/xbase64-4.1.4/build/win64vs/CleanWin.bat b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/CleanWin.bat
new file mode 100755
index 0000000..8de16ef
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/build/win64vs/CleanWin.bat
@@ -0,0 +1,18 @@
+
+rem Use this batch file to completely clean the Windows 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 \ No newline at end of file
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/Doxyfile b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/Doxyfile
new file mode 100644
index 0000000..4101206
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/Doxyfile
@@ -0,0 +1,2694 @@
+# Doxyfile 1.9.3
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the configuration
+# file that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = "Xbase64"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER = 4.0.1
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF = "C++ Library for handling Xbase (DBF) format type files"
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = ../
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+#INLINE_INHERITED_MEMB = NO
+INLINE_INHERITED_MEMB = YES
+
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
+# such as
+# /***************
+# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
+# Javadoc-style will behave just like regular comments and it will not be
+# interpreted by doxygen.
+# The default value is: NO.
+
+JAVADOC_BANNER = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# By default Python docstrings are displayed as preformatted text and doxygen's
+# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
+# doxygen's special commands can be used and the contents of the docstring
+# documentation blocks is shown as doxygen documentation.
+# The default value is: YES.
+
+PYTHON_DOCSTRING = YES
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:^^"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". Note that you cannot put \n's in the value part of an alias
+# to insert newlines (in the resulting output). You can put ^^ in the value part
+# of an alias to insert a newline as if a physical newline was in the original
+# file. When you need a literal { or } or , in the value part of an alias you
+# have to escape them by means of a backslash (\), this can lead to conflicts
+# with the commands \{ and \} for these it is advised to use the version @{ and
+# @} or use a double escape (\\{ and \\})
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
+# sources only. Doxygen will then generate output that is more tailored for that
+# language. For instance, namespaces will be presented as modules, types will be
+# separated into more groups, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_SLICE = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
+# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
+# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
+# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
+# tries to guess whether the code is fixed or free formatted code, this is the
+# default for Fortran type files). For instance to make doxygen treat .inc files
+# as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen. When specifying no_extension you should add
+# * to the FILE_PATTERNS.
+#
+# Note see also the list of default file extension mappings.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See https://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 5.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS = 5
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use
+# during processing. When set to 0 doxygen will based this on the number of
+# cores available in the system. You can set it explicitly to a value larger
+# than 0 to get more control over the balance between CPU load and processing
+# speed. At this moment only the input processing can be done using multiple
+# threads. Since this is still an experimental feature the default is set to 1,
+# which effectively disables parallel processing. Please report any issues you
+# encounter. Generating dot graphs in parallel is controlled by the
+# DOT_NUM_THREADS setting.
+# Minimum value: 0, maximum value: 32, default value: 1.
+
+NUM_PROC_THREADS = 1
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
+# methods of a class will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIV_VIRTUAL = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If this flag is set to YES, the name of an unnamed parameter in a declaration
+# will be determined by the corresponding definition. By default unnamed
+# parameters remain unnamed in the output.
+# The default value is: YES.
+
+RESOLVE_UNNAMED_PARAMS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# declarations. If set to NO, these declarations will be included in the
+# documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
+# able to match the capabilities of the underlying filesystem. In case the
+# filesystem is case sensitive (i.e. it supports files in the same directory
+# whose names only differ in casing), the option must be set to YES to properly
+# deal with such files in case they appear in the input. For filesystems that
+# are not case sensitive the option should be be set to NO to properly deal with
+# output files written for symbols that only differ in casing, such as for two
+# classes, one named CLASS and the other named Class, and to also support
+# references to files without having to specify the exact matching casing. On
+# Windows (including Cygwin) and MacOS, users should typically set this option
+# to NO, whereas on Linux or other Unix flavors it should typically be set to
+# YES.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
+# will show which file needs to be included to use the class.
+# The default value is: YES.
+
+SHOW_HEADERFILE = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file. See also section "Changing the
+# layout of pages" for information.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as documenting some parameters in
+# a documented function twice, or documenting parameters that don't exist or
+# using markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete
+# function parameter documentation. If set to NO, doxygen will accept that some
+# parameters have no documentation without warning.
+# The default value is: YES.
+
+WARN_IF_INCOMPLETE_DOC = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong parameter
+# documentation, but not about the absence of documentation. If EXTRACT_ALL is
+# set to YES then this flag will automatically be disabled. See also
+# WARN_IF_INCOMPLETE_DOC
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
+# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
+# at the end of the doxygen process doxygen will return with a non-zero status.
+# Possible values are: NO, YES and FAIL_ON_WARNINGS.
+# The default value is: NO.
+
+WARN_AS_ERROR = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr). In case the file specified cannot be opened for writing the
+# warning and error messages are written to standard error. When as file - is
+# specified the warning and error messages are written to standard output
+# (stdout).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT = ../../../src
+#INPUT = /mnt/1Tdata/xbase/xbase64-4.0.1/src/core
+
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see:
+# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# Note the list of default checked file patterns might differ from the list of
+# default file extension mappings.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml,
+# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C
+# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
+# *.vhdl, *.ucf, *.qsf and *.ice.
+
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cxx \
+ *.cpp \
+ *.c++ \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.idl \
+ *.ddl \
+ *.odl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.l \
+ *.cs \
+ *.d \
+ *.php \
+ *.php4 \
+ *.php5 \
+ *.phtml \
+ *.inc \
+ *.m \
+ *.markdown \
+ *.md \
+ *.mm \
+ *.dox \
+ *.py \
+ *.pyw \
+ *.f90 \
+ *.f95 \
+ *.f03 \
+ *.f08 \
+ *.f18 \
+ *.f \
+ *.for \
+ *.vhd \
+ *.vhdl \
+ *.ucf \
+ *.qsf \
+ *.ice
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# ANamespace::AClass, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# entity all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see https://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX = YES
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a color-wheel, see
+# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use gray-scales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = NO
+
+# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
+# documentation will contain a main index with vertical navigation menus that
+# are dynamically created via JavaScript. If disabled, the navigation index will
+# consists of multiple levels of tabs that are statically embedded in every HTML
+# page. Disable this option to support browsers that do not have JavaScript,
+# like the Qt help browser.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_MENUS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see:
+# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
+# create a documentation set, doxygen will generate a Makefile in the HTML
+# output directory. Running make will produce the docset in that directory and
+# running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
+# genXcode/_index.html for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag determines the URL of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDURL =
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# on Windows. In the beginning of 2021 Microsoft took the original page, with
+# a.o. the download links, offline the HTML help workshop was already many years
+# in maintenance mode). You can download the HTML help workshop from the web
+# archives at Installation executable (see:
+# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo
+# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the main .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location (absolute path
+# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
+# run qhelpgenerator on the generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine tune the look of the index (see "Fine-tuning the output"). As an
+# example, the default style sheet generated by doxygen has an example that
+# shows how to put an image at the root of the tree instead of the PROJECT_NAME.
+# Since the tree basically has the same information as the tab index, you could
+# consider setting DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW = NO
+
+# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
+# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
+# area (value NO) or if it should extend to the full height of the window (value
+# YES). Setting this to YES gives a layout similar to
+# https://docs.readthedocs.io with more room for contents, but less room for the
+# project logo, title, and description. If either GENERATE_TREEVIEW or
+# DISABLE_INDEX is set to NO, this option has no effect.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FULL_SIDEBAR = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email
+# addresses.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+OBFUSCATE_EMAILS = YES
+
+# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
+# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
+# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
+# the HTML output. These images will generally look nicer at scaled resolutions.
+# Possible values are: png (the default) and svg (looks nicer but requires the
+# pdf2svg or inkscape tool).
+# The default value is: png.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FORMULA_FORMAT = png
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
+# to create new LaTeX commands to be used in formulas as building blocks. See
+# the section "Including formulas" for details.
+
+FORMULA_MACROFILE =
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# https://www.mathjax.org) which uses client side JavaScript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
+# Note that the different versions of MathJax have different requirements with
+# regards to the different settings, so it is possible that also other MathJax
+# settings have to be changed when switching between the different MathJax
+# versions.
+# Possible values are: MathJax_2 and MathJax_3.
+# The default value is: MathJax_2.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_VERSION = MathJax_2
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. For more details about the output format see MathJax
+# version 2 (see:
+# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3
+# (see:
+# http://docs.mathjax.org/en/latest/web/components/output.html).
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility. This is the name for Mathjax version 2, for MathJax version 3
+# this will be translated into chtml), NativeMML (i.e. MathML. Only supported
+# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This
+# is the name for Mathjax version 3, for MathJax version 2 this will be
+# translated into HTML-CSS) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from https://www.mathjax.org before deployment. The default value is:
+# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
+# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH =
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# for MathJax version 2 (see
+# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# For example for MathJax version 3 (see
+# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
+# MATHJAX_EXTENSIONS = ams
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see:
+# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using JavaScript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see:
+# https://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see:
+# https://xapian.org/). See the section "External Indexing and Searching" for
+# details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when not enabling USE_PDFLATEX the default is latex when enabling
+# USE_PDFLATEX the default is pdflatex and when in the later case latex is
+# chosen this is overwritten by pdflatex. For specific output languages the
+# default can have been set differently, this depends on the implementation of
+# the output language.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME =
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# Note: This tag is used in the Makefile / make.bat.
+# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
+# (.tex).
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
+# generate index for LaTeX. In case there is no backslash (\) as first character
+# it will be automatically added in the LaTeX code.
+# Note: This tag is used in the generated output file (.tex).
+# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
+# The default value is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_MAKEINDEX_CMD = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
+# the generated LaTeX document. The header should contain everything until the
+# first chapter. If it is left blank doxygen will generate a standard header. It
+# is highly recommended to start with a default header using
+# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
+# and then modify the file new_header.tex. See also section "Doxygen usage" for
+# information on how to generate the default header that doxygen normally uses.
+#
+# Note: Only use a user-defined header if you know what you are doing!
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. The following
+# commands have a special meaning inside the header (and footer): For a
+# description of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for
+# the generated LaTeX document. The footer should contain everything after the
+# last chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer. See also section "Doxygen
+# usage" for information on how to generate the default footer that doxygen
+# normally uses. Note: Only use a user-defined footer if you know what you are
+# doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
+# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
+# files. Set this option to YES, to get a higher quality PDF documentation.
+#
+# See also section LATEX_CMD_NAME for selecting the engine.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE = plain
+
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP = NO
+
+# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
+# path from which the emoji images will be read. If a relative path is entered,
+# it will be relative to the LATEX_OUTPUT directory. If left blank the
+# LATEX_OUTPUT directory will be used.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EMOJI_DIRECTORY =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# configuration file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's configuration file. A template extensions file can be
+# generated using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING = YES
+
+# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
+# namespace members in file scope as well, matching the HTML output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_NS_MEMB_FILE_SCOPE = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT = docbook
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
+# the structure of the code including all documentation. Note that this feature
+# is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to Sqlite3 output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3
+# database with symbols found by doxygen stored in tables.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse_sqlite3=ON option for CMake.
+# The default value is: NO.
+
+GENERATE_SQLITE3 = NO
+
+# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be
+# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put
+# in front of it.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse_sqlite3=ON option for CMake.
+# The default directory is: sqlite3.
+# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
+
+SQLITE3_OUTPUT = sqlite3
+
+# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db
+# database file will be recreated with each doxygen run. If set to NO, doxygen
+# will warn if an a database file is already found and not modify it.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse_sqlite3=ON option for CMake.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
+
+SQLITE3_RECREATE_DB = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a
+# graph for each documented class showing the direct and indirect inheritance
+# relations. In case HAVE_DOT is set as well dot will be used to draw the graph,
+# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set
+# to TEXT the direct and indirect inheritance relations will be shown as texts /
+# links.
+# Possible values are: NO, YES, TEXT and GRAPH.
+# The default value is: YES.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag UML_LOOK is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
+# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
+# tag is set to YES, doxygen will add type and arguments for attributes and
+# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
+# will not generate fields with class member information in the UML graphs. The
+# class diagrams will look similar to the default class diagrams but using UML
+# notation for the relationships.
+# Possible values are: NO, YES and NONE.
+# The default value is: NO.
+# This tag requires that the tag UML_LOOK is set to YES.
+
+DOT_UML_DETAILS = NO
+
+# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
+# to display on a single line. If the actual line length exceeds this threshold
+# significantly it will wrapped across multiple lines. Some heuristics are apply
+# to avoid ugly line breaks.
+# Minimum value: 0, maximum value: 1000, default value: 17.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_WRAP_THRESHOLD = 17
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH = YES
+
+# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels
+# of child directories generated in directory dependency graphs by dot.
+# Minimum value: 1, maximum value: 25, default value: 1.
+# This tag requires that the tag DIRECTORY_GRAPH is set to YES.
+
+DIR_GRAPH_MAX_DEPTH = 1
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file or to the filename of jar file
+# to be used. If left blank, it is assumed PlantUML is not used or called during
+# a preprocessing step. Doxygen will generate a warning when it encounters a
+# \startuml command in this case and will not generate output for the diagram.
+
+PLANTUML_JAR_PATH =
+
+# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
+# configuration file for plantuml.
+
+PLANTUML_CFG_FILE =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal
+# graphical representation for inheritance and collaboration diagrams is used.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
+# files that are used to generate the various graphs.
+#
+# Note: This setting is not only used for dot files but also for msc temporary
+# files.
+# The default value is: YES.
+
+DOT_CLEANUP = YES
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/doxyout.txt b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/doxyout.txt
new file mode 100644
index 0000000..3551bf8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/config/doxyout.txt
@@ -0,0 +1,438 @@
+Doxygen version used: 1.9.3
+Searching for include files...
+Searching for example files...
+Searching for images...
+Searching for dot files...
+Searching for msc files...
+Searching for dia files...
+Searching for files to exclude
+Searching INPUT for files to process...
+Searching for files in directory /mnt/1Tdata/xbase/xbase64-4.0.2/src
+Searching for files in directory /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples
+Searching for files in directory /mnt/1Tdata/xbase/xbase64-4.0.2/src/include
+Searching for files in directory /mnt/1Tdata/xbase/xbase64-4.0.2/src/core
+Searching for files in directory /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils
+Searching for files in directory /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql
+Searching for files in directory /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests
+Reading and parsing tag files
+Parsing files
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbbcd.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbbcd.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdate.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdate.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdbf.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdbf.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdbf3.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdbf3.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdbf4.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdbf4.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbexp.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbexp.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbexpnode.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbexpnode.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfields.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfields.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfile.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfile.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfilter.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfilter.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfuncs.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfuncs.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbixbase.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbixbase.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbixmdx.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbixmdx.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbixndx.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbixndx.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xblog.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xblog.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbmemo.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbmemo.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbmemo3.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbmemo3.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbmemo4.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbmemo4.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbssv.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbssv.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbstring.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbstring.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbtag.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbtag.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbtblmgr.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbtblmgr.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbuda.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbuda.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbxbase.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbxbase.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_date.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_date.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_sql.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_sql.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_string.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_string.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v3_create_dbf.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v3_create_dbf.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v3_upd_dbf.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v3_upd_dbf.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v4_create_dbf.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v4_create_dbf.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v4_upd_dbf.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v4_upd_dbf.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbase.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbase.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbbcd.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbbcd.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbdate.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbdate.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbdbf.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbdbf.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbexp.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbexp.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbexpnode.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbexpnode.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbfile.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbfile.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbfilter.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbfilter.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbindex.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbindex.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnklst.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnklst.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnklstord.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnklstord.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnknod.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnknod.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblog.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblog.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbmemo.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbmemo.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbretcod.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbretcod.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbsql.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbsql.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbssv.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbssv.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbstring.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbstring.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtag.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtag.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtblmgr.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtblmgr.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtypes.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtypes.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbuda.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbuda.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbxbase.h...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbxbase.h...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbcrix.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbcrix.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbcrtbl.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbcrtbl.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbdrpix.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbdrpix.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbdrptbl.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbdrptbl.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbinsert.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbinsert.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbset.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbset.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbsql.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbsql.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/tstfuncs.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/tstfuncs.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_bcd.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_bcd.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_date.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_date.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v3_memos.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v3_memos.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v3_nomemos.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v3_nomemos.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v4_memos.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v4_memos.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v4_nomemos.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v4_nomemos.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_expnode.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_expnode.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_expression.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_expression.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_file.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_file.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_filter.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_filter.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_funcs.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_funcs.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_linklist.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_linklist.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_lock.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_lock.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_lock2.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_lock2.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_log.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_log.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_mdx.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_mdx.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_ndx.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_ndx.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_ndx2.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_ndx2.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_sql.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_sql.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_string.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_string.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_tblmgr.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_tblmgr.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_uda.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_uda.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_xbase.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_xbase.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/checkndx.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/checkndx.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/dbfxtrct.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/dbfxtrct.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/reindex.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/reindex.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_cfg_check.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_cfg_check.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_copydbf.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_copydbf.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dbfutil.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dbfutil.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_deletall.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_deletall.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumpdbt.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumpdbt.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumphdr.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumphdr.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumpix.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumpix.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumprecs.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumprecs.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_execsql.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_execsql.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_pack.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_pack.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_tblinfo.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_tblinfo.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_undelall.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_undelall.cpp...
+Preprocessing /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_zap.cpp...
+Parsing file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_zap.cpp...
+Building macro definition list...
+Building group list...
+Building directory list...
+Building namespace list...
+Building file list...
+Building class list...
+Building concept list...
+Computing nesting relations for classes...
+Associating documentation with classes...
+Associating documentation with concepts...
+Building example list...
+Searching for enumerations...
+Searching for documented typedefs...
+Searching for members imported via using declarations...
+Searching for included using directives...
+Searching for documented variables...
+Building interface member list...
+Building member list...
+Searching for friends...
+Searching for documented defines...
+Computing class inheritance relations...
+Computing class usage relations...
+Flushing cached template relations that have become invalid...
+Computing class relations...
+Add enum values to enums...
+Searching for member function documentation...
+Creating members for template instances...
+Building page list...
+Search for main page...
+Computing page relations...
+Determining the scope of groups...
+Sorting lists...
+Determining which enums are documented
+Computing member relations...
+Building full member lists recursively...
+Adding members to member groups.
+Computing member references...
+Inheriting documentation...
+Generating disk names...
+Adding source references...
+Adding xrefitems...
+Sorting member lists...
+Setting anonymous enum type...
+Computing dependencies between directories...
+Generating citations page...
+Counting members...
+Counting data structures...
+Resolving user defined references...
+Finding anchors and sections in the documentation...
+Transferring function references...
+Combining using relations...
+Adding members to index pages...
+Correcting members for VHDL...
+Computing tooltip texts...
+Generating style sheet...
+Generating search indices...
+Generating example documentation...
+Generating file sources...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbase.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbbcd.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbdate.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbdbf.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbexp.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbexpnode.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbfile.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbfilter.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbindex.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnklst.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnklstord.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnknod.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblog.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbmemo.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbretcod.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbsql.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbssv.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbstring.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtag.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtblmgr.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtypes.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbuda.h...
+Generating code for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbxbase.h...
+Generating file documentation...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbbcd.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdate.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdbf.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdbf3.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbdbf4.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbexp.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbexpnode.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfields.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfile.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfilter.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbfuncs.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbixbase.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbixmdx.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbixndx.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xblog.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbmemo.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbmemo3.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbmemo4.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbssv.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbstring.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbtag.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbtblmgr.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbuda.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/core/xbxbase.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_date.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_sql.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_string.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v3_create_dbf.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v3_upd_dbf.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v4_create_dbf.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/examples/xb_ex_v4_upd_dbf.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbase.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbbcd.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbdate.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbdbf.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbexp.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbexpnode.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbfile.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbfilter.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbindex.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnklst.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnklstord.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblnknod.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xblog.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbmemo.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbretcod.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbsql.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbssv.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbstring.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtag.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtblmgr.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbtypes.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbuda.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/include/xbxbase.h...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbcrix.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbcrtbl.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbdrpix.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbdrptbl.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbinsert.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbset.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/sql/xbsql.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/tstfuncs.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_bcd.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_date.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v3_memos.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v3_nomemos.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v4_memos.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_dbf_v4_nomemos.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_expnode.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_expression.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_file.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_filter.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_funcs.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_linklist.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_lock.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_lock2.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_log.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_mdx.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_ndx.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_ndx2.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_sql.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_string.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_tblmgr.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_uda.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/tests/xb_test_xbase.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/checkndx.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/dbfxtrct.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/reindex.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_cfg_check.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_copydbf.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dbfutil.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_deletall.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumpdbt.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumphdr.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumpix.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_dumprecs.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_execsql.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_pack.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_tblinfo.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_undelall.cpp...
+Generating docs for file /mnt/1Tdata/xbase/xbase64-4.0.2/src/utils/xb_zap.cpp...
+Generating page documentation...
+Generating group documentation...
+Generating class documentation...
+Generating concept documentation...
+Generating namespace index...
+Generating docs for namespace xb
+Generating docs for compound xb::xbDate...
+Generating docs for compound xb::xbDbf...
+Generating docs for compound xb::xbFile...
+Generating docs for compound xb::xbSchema...
+Generating docs for compound xb::xbSsv...
+Generating docs for compound xb::xbString...
+Generating docs for compound xb::xbTblList...
+Generating docs for compound xb::xbTblMgr...
+Generating docs for compound xb::xbXBase...
+Generating graph info page...
+Generating directory documentation...
+Generating index page...
+Generating page index...
+Generating module index...
+Generating namespace index...
+Generating namespace member index...
+Generating concept index...
+Generating annotated compound index...
+Generating alphabetical compound index...
+Generating hierarchical class index...
+Generating member index...
+Generating file index...
+Generating file member index...
+Generating example index...
+finalizing index lists...
+writing tag file...
+Running plantuml with JAVA...
+lookup cache used 1038/65536 hits=6034 misses=1083
+finished...
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bc_s.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bc_s.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bdwn.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/bdwn.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/checkndx_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/checkndx_8cpp.html
new file mode 100644
index 0000000..e24b4ce
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/checkndx_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.0.2/src/utils/checkndx.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">checkndx.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;xbase64/xbase64.h&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:a0c99d968a34e803d378692bde2e3f18f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="checkndx_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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDate.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDate.png
new file mode 100644
index 0000000..350c1be
--- /dev/null
+++ 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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDbf.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbDbf.png
new file mode 100644
index 0000000..d7b0ae3
--- /dev/null
+++ 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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbFile.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbFile.png
new file mode 100644
index 0000000..cb7b45f
--- /dev/null
+++ 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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbSsv.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbSsv.png
new file mode 100644
index 0000000..bdbc1de
--- /dev/null
+++ 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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbTblMgr.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbTblMgr.png
new file mode 100644
index 0000000..2e50067
--- /dev/null
+++ 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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.png
new file mode 100644
index 0000000..4b4ae14
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/classxb_1_1xbXBase.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/closed.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/closed.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dbfxtrct_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dbfxtrct_8cpp.html
new file mode 100644
index 0000000..7e00be1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dbfxtrct_8cpp.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.0.2/src/utils/dbfxtrct.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">dbfxtrct.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;xbase64/xbase64.h&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:a5ae07f63d6b390e42068d941038dadf2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dbfxtrct_8cpp.html#a5ae07f63d6b390e42068d941038dadf2">Usage</a> ()</td></tr>
+<tr class="separator:a5ae07f63d6b390e42068d941038dadf2"><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="dbfxtrct_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>
+<a id="a5ae07f63d6b390e42068d941038dadf2" name="a5ae07f63d6b390e42068d941038dadf2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ae07f63d6b390e42068d941038dadf2">&#9670;&nbsp;</a></span>Usage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Usage </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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doc.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doc.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.css b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.css
new file mode 100644
index 0000000..9036737
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.css
@@ -0,0 +1,1841 @@
+/* The standard CSS for doxygen 1.9.3 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+ul.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+ column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+th p.starttd, th p.intertd, th p.endtd {
+ font-size: 100%;
+ font-weight: 700;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.navtab {
+ border-right: 1px solid #A3B4D7;
+ padding-right: 15px;
+ text-align: right;
+ line-height: 110%;
+}
+
+div.navtab table {
+ border-spacing: 0;
+}
+
+td.navtab {
+ padding-right: 6px;
+ padding-left: 6px;
+}
+td.navtabHL {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ padding-right: 6px;
+ padding-left: 6px;
+}
+
+td.navtabHL a, td.navtabHL a:visited {
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+a.navtab {
+ font-weight: bold;
+}
+
+div.qindex{
+ text-align: center;
+ width: 100%;
+ line-height: 140%;
+ font-size: 130%;
+ color: #A0A0A0;
+}
+
+dt.alphachar{
+ font-size: 180%;
+ font-weight: bold;
+}
+
+.alphachar a{
+ color: black;
+}
+
+.alphachar a:hover, .alphachar a:visited{
+ text-decoration: none;
+}
+
+.classindex dl {
+ padding: 25px;
+ column-count:1
+}
+
+.classindex dd {
+ display:inline-block;
+ margin-left: 50px;
+ width: 90%;
+ line-height: 1.15em;
+}
+
+.classindex dl.odd {
+ background-color: #F8F9FC;
+}
+
+@media(min-width: 1120px) {
+ .classindex dl {
+ column-count:2
+ }
+}
+
+@media(min-width: 1320px) {
+ .classindex dl {
+ column-count:3
+ }
+}
+
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+.contents a.qindexHL:visited {
+ color: #FFFFFF;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+a.code.hl_class { /* style for links to class names in code snippets */ }
+a.code.hl_struct { /* style for links to struct names in code snippets */ }
+a.code.hl_union { /* style for links to union names in code snippets */ }
+a.code.hl_interface { /* style for links to interface names in code snippets */ }
+a.code.hl_protocol { /* style for links to protocol names in code snippets */ }
+a.code.hl_category { /* style for links to category names in code snippets */ }
+a.code.hl_exception { /* style for links to exception names in code snippets */ }
+a.code.hl_service { /* style for links to service names in code snippets */ }
+a.code.hl_singleton { /* style for links to singleton names in code snippets */ }
+a.code.hl_concept { /* style for links to concept names in code snippets */ }
+a.code.hl_namespace { /* style for links to namespace names in code snippets */ }
+a.code.hl_package { /* style for links to package names in code snippets */ }
+a.code.hl_define { /* style for links to macro names in code snippets */ }
+a.code.hl_function { /* style for links to function names in code snippets */ }
+a.code.hl_variable { /* style for links to variable names in code snippets */ }
+a.code.hl_typedef { /* style for links to typedef names in code snippets */ }
+a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ }
+a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ }
+a.code.hl_signal { /* style for links to Qt signal names in code snippets */ }
+a.code.hl_slot { /* style for links to Qt slot names in code snippets */ }
+a.code.hl_friend { /* style for links to friend names in code snippets */ }
+a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ }
+a.code.hl_property { /* style for links to property names in code snippets */ }
+a.code.hl_event { /* style for links to event names in code snippets */ }
+a.code.hl_sequence { /* style for links to sequence names in code snippets */ }
+a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ }
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+ul {
+ overflow: visible;
+}
+
+#side-nav ul {
+ overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+ overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+ text-align: left;
+ direction: ltr;
+ overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
+ overflow-y: hidden;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line:after {
+ content:"\000A";
+ white-space: pre;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ margin-right: 9px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+.lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+div.ah, span.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #FFFFFF;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+ list-style: none;
+ padding-left: 0;
+}
+
+div.classindex span.ai {
+ display: inline-block;
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl, img.inline {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+.compoundTemplParams {
+ color: #4665A2;
+ font-size: 80%;
+ line-height: 120%;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+blockquote.DocNodeRTL {
+ border-left: 0;
+ border-right: 2px solid #9CAFD4;
+ margin: 0 4px 0 24px;
+ padding: 0 16px 0 12px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight, .memTemplItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+ padding: 8px;
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ margin-bottom: -1px;
+ background-image: url('nav_f.png');
+ background-repeat: repeat-x;
+ background-color: #E2E8F2;
+ line-height: 1.25;
+ font-weight: 300;
+ float:left;
+}
+
+.permalink
+{
+ font-size: 65%;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: 400;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-color: #DFE5F1;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+ font-family: "courier new",courier,monospace;
+ font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype, .tparams .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir, .tparams .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #9CAFD4;
+ border-bottom: 1px solid #9CAFD4;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+.arrow {
+ color: #9CAFD4;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ font-size: 80%;
+ display: inline-block;
+ width: 16px;
+ height: 22px;
+}
+
+.icon {
+ font-family: Arial, Helvetica;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ width: 16px;
+ display: inline-block;
+ background-color: #728DC1;
+ color: white;
+ text-align: center;
+ border-radius: 4px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.icona {
+ width: 24px;
+ height: 22px;
+ display: inline-block;
+}
+
+.iconfopen {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderopen.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.iconfclosed {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderclosed.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.icondoc {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('doc.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+table.directory {
+ font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable caption {
+ caption-side: top;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ font-weight: 400;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+table.classindex
+{
+ margin: 10px;
+ white-space: nowrap;
+ margin-left: 3%;
+ margin-right: 3%;
+ width: 94%;
+ border: 0;
+ border-spacing: 0;
+ padding: 0;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+.PageDocRTL-title div.headertitle {
+ text-align: right;
+ direction: rtl;
+}
+
+dl {
+ padding: 0 0 0 0;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
+dl.section {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.section.DocNodeRTL {
+ margin-right: 0px;
+ padding-right: 0px;
+}
+
+dl.note {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.note.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00D000;
+}
+
+dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #505050;
+}
+
+dl.deprecated.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #505050;
+}
+
+dl.todo {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.todo.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.test.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #C08050;
+}
+
+dl.bug.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectrow
+{
+ height: 56px;
+}
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectalign
+{
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+
+#projectname
+{
+ font: 200% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 90% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.plantumlgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+ text-align:right;
+ width:52px;
+}
+
+dl.citelist dd {
+ margin:2px 0 2px 72px;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 8px 10px 10px;
+ width: 200px;
+}
+
+.PageDocRTL-title div.toc {
+ float: left !important;
+ text-align: right;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+.PageDocRTL-title div.toc li {
+ background-position-x: right !important;
+ padding-left: 0 !important;
+ padding-right: 10px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+span.emoji {
+ /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html
+ * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;
+ */
+}
+
+span.obfuscator {
+ display: none;
+}
+
+.PageDocRTL-title div.toc li.level1 {
+ margin-left: 0 !important;
+ margin-right: 0;
+}
+
+.PageDocRTL-title div.toc li.level2 {
+ margin-left: 0 !important;
+ margin-right: 15px;
+}
+
+.PageDocRTL-title div.toc li.level3 {
+ margin-left: 0 !important;
+ margin-right: 30px;
+}
+
+.PageDocRTL-title div.toc li.level4 {
+ margin-left: 0 !important;
+ margin-right: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ /*white-space: nowrap;*/
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
+/* @group Markdown */
+
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+ text-align: center
+}
+
+.DocNodeRTL {
+ text-align: right;
+ direction: rtl;
+}
+
+.DocNodeLTR {
+ text-align: left;
+ direction: ltr;
+}
+
+table.DocNodeRTL {
+ width: auto;
+ margin-right: 0;
+ margin-left: auto;
+}
+
+table.DocNodeLTR {
+ width: auto;
+ margin-right: auto;
+ margin-left: 0;
+}
+
+code.JavaDocCode
+ direction:ltr;
+}
+
+tt, code, kbd, samp
+{
+ display: inline-block;
+ direction:ltr;
+}
+/* @end */
+
+u {
+ text-decoration: underline;
+}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.svg b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.svg
new file mode 100644
index 0000000..d42dad5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/doxygen.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="a">
+ <stop stop-color="#5373B4" offset="0"/>
+ <stop stop-color="#7C95C6" offset="1"/>
+ </linearGradient>
+ <linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse">
+ <stop stop-color="#C0CCE3" offset="0"/>
+ <stop stop-color="#EEF1F7" offset="1"/>
+ </linearGradient>
+ <filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB">
+ <feGaussianBlur stdDeviation="0.45293203"/>
+ </filter>
+ </defs>
+ <g>
+ <path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696" xlink:href="#path141"/>
+ <path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/>
+ <path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/>
+ <path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/>
+ <path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/>
+ </g>
+</svg>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dynsections.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dynsections.js
new file mode 100644
index 0000000..3174bd7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/dynsections.js
@@ -0,0 +1,121 @@
+/*
+ @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
+ */
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+ a.html('&#9660;');
+ $(this).show();
+ } else if (l==level+1) {
+ i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+ a.html('&#9658;');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+
+function toggleFolder(id)
+{
+ // the clicked row
+ var currentRow = $('#row_'+id);
+
+ // all rows after the clicked row
+ var rows = currentRow.nextAll("tr");
+
+ var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+ // only match elements AFTER this one (can't hide elements before)
+ var childRows = rows.filter(function() { return this.id.match(re); });
+
+ // first row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ // replace down arrow by right arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ currentRowSpans.filter(".arrow").html('&#9658;');
+ rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+ } else { // we are SHOWING
+ // replace right arrow by down arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+ currentRowSpans.filter(".arrow").html('&#9660;');
+ // replace down arrows by right arrows for child rows
+ var childRowsSpans = childRows.find("span");
+ childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ childRowsSpans.filter(".arrow").html('&#9658;');
+ childRows.show(); //show all children
+ }
+ updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+/* @license-end */
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderclosed.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderclosed.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderopen.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/folderopen.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions.html
new file mode 100644
index 0000000..6e4da8b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_a" name="index_a"></a>- a -</h3><ul>
+<li>Abort()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f">xb::xbDbf</a></li>
+<li>AddBackSlash()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62">xb::xbString</a></li>
+<li>AddTblToTblList()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a">xb::xbTblMgr</a></li>
+<li>Append()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815">xb::xbString</a></li>
+<li>AppendRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b">xb::xbDbf</a></li>
+<li>Assign()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96">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_b.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_b.html
new file mode 100644
index 0000000..d9dfa32
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_b.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_b" name="index_b"></a>- b -</h3><ul>
+<li>BitDump()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">xb::xbSsv</a></li>
+<li>BitSet()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">xb::xbSsv</a></li>
+<li>BlankRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6">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_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_f.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_f.html
new file mode 100644
index 0000000..152931e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_f.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</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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_f" name="index_f"></a>- f -</h3><ul>
+<li>FileExists()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">xb::xbFile</a></li>
+<li>FileIsOpen()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">xb::xbFile</a></li>
+<li>FlushLog()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a5a5ecaed9777978344902446c9ae3b8e">xb::xbXBase</a></li>
+<li>FormatDate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a01de44dc869f7db99f33046fc91f2c6a">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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func.html
new file mode 100644
index 0000000..47e8f65
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_a" name="index_a"></a>- a -</h3><ul>
+<li>Abort()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f">xb::xbDbf</a></li>
+<li>AddBackSlash()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62">xb::xbString</a></li>
+<li>AddTblToTblList()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a">xb::xbTblMgr</a></li>
+<li>Append()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815">xb::xbString</a></li>
+<li>AppendRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b">xb::xbDbf</a></li>
+<li>Assign()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96">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_b.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_b.html
new file mode 100644
index 0000000..82917cf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_b.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_b" name="index_b"></a>- b -</h3><ul>
+<li>BitDump()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae">xb::xbSsv</a></li>
+<li>BitSet()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">xb::xbSsv</a></li>
+<li>BlankRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6">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_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_f.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_f.html
new file mode 100644
index 0000000..dfdd58b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_f.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_f" name="index_f"></a>- f -</h3><ul>
+<li>FileExists()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">xb::xbFile</a></li>
+<li>FileIsOpen()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">xb::xbFile</a></li>
+<li>FlushLog()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a5a5ecaed9777978344902446c9ae3b8e">xb::xbXBase</a></li>
+<li>FormatDate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a01de44dc869f7db99f33046fc91f2c6a">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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_h.html
new file mode 100644
index 0000000..16e9fbf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_h.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_h" name="index_h"></a>- h -</h3><ul>
+<li>HasAlphaChars()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aa13f6b72e5a529eab04545892bbc98b4">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_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_j.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_j.html
new file mode 100644
index 0000000..8624d83
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_j.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 - 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_j" name="index_j"></a>- j -</h3><ul>
+<li>JulianDays()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7">xb::xbDate</a></li>
+<li>JulToDate8()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9d28b2a46d8aaa284b92f44eeb96b2ff">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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_l.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_l.html
new file mode 100644
index 0000000..3e81352
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_l.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: 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_l" name="index_l"></a>- l -</h3><ul>
+<li>LastDayOfMonth()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a15847866bb7642aa42bc254e0cf2038a">xb::xbDate</a></li>
+<li>Left()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#acdc3a6d6955b99f0a6b1d181fb3098b9">xb::xbString</a></li>
+<li>Len()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a998b240eedac311aea5843047f55649b">xb::xbString</a></li>
+<li>Ltrim()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a90e0d0be4fd0d82dd2ebbe689adf18ee">xb::xbString</a></li>
+<li>Ltrunc()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a656f5854f74064b7257ff96d96dfb68b">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_m.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_m.html
new file mode 100644
index 0000000..cf56d43
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_m.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_m" name="index_m"></a>- m -</h3><ul>
+<li>MemoFieldsExist()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950">xb::xbDbf</a></li>
+<li>Mid()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7">xb::xbString</a></li>
+<li>MonthOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e">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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_n.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_n.html
new file mode 100644
index 0000000..d46a5b1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_n.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_o.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_o.html
new file mode 100644
index 0000000..09eacbf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_o.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_o" name="index_o"></a>- o -</h3><ul>
+<li>Open()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ae388c5e02adc86e6e9988e697e061610">xb::xbDbf</a>, <a class="el" href="classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a">xb::xbXBase</a></li>
+<li>OpenHighestVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">xb::xbXBase</a></li>
+<li>operator const char *()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a545df0ae9590f0ea5844a165e38a6388">xb::xbString</a></li>
+<li>operator!=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ac3aaf8997fc0c36676085e7741f33a8a">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#acf89691607050b0505dc6af28d059c38">xb::xbString</a></li>
+<li>operator+()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ad09609bf78cf038886a4f9cd19423f9c">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#aab556e8c3cb478dd95643327d72a48bd">xb::xbString</a></li>
+<li>operator++()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a1c7d9e3718c43df18b21646072c8605e">xb::xbDate</a></li>
+<li>operator+=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a947ba156d04fe063aaa4c9964ae5d163">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a76a47af239797a266ada6141c150001c">xb::xbString</a></li>
+<li>operator-()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a3f3a8802c96098c85aa8d0e19717a979">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a06abec236b95f6933ba17bf67089f7cf">xb::xbString</a></li>
+<li>operator--()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ae2b33dfee60d324916d833b2098b5a6b">xb::xbDate</a></li>
+<li>operator-=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a4a8f207d759540114373f5e9d6d375f7">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#aa7f4db1b4eae9dfad46346db6e17ea15">xb::xbString</a></li>
+<li>operator&lt;()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a11f09d97ed527e7ef00ba6f17b9fb02c">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a71c7aafa0d523c72cbe58c474be2270a">xb::xbString</a></li>
+<li>operator&lt;=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a6d8fa4df4664f3fd8d4cc15e77f6d046">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a461f245e60cddfdf5f78a972a46e5880">xb::xbString</a></li>
+<li>operator=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a2e33ad9415c32e820e08fd8084198690">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a4f69d11cbd43edf71725a606d0ca8f40">xb::xbString</a></li>
+<li>operator==()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#aaaf98c1a672066021895f0953b6e94d0">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a2df3ed2fc9456214f5fd2fcf77b69bc1">xb::xbString</a></li>
+<li>operator&gt;()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a744031c4031d6ec4595d34acbd1c5860">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#ae46f6a45da5686b607a4edf2786a2fff">xb::xbString</a></li>
+<li>operator&gt;=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a1d81959ea55440588068ea7f82617c99">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a8f16643cb7ba3ee9cf685422c9ea0e67">xb::xbString</a></li>
+<li>operator[]()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#abe45e463226ac8e18550ced18c5a9df3">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_p.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_p.html
new file mode 100644
index 0000000..3985e96
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_p.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_p" name="index_p"></a>- p -</h3><ul>
+<li>Pack()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a">xb::xbDbf</a></li>
+<li>PadLeft()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b">xb::xbString</a></li>
+<li>PadRight()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284">xb::xbString</a></li>
+<li>Pos()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581">xb::xbString</a></li>
+<li>PutAt()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39">xb::xbString</a></li>
+<li>PutDateField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5">xb::xbDbf</a></li>
+<li>PutDoubleField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5">xb::xbDbf</a></li>
+<li>PutField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5">xb::xbDbf</a></li>
+<li>PutFloatField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8">xb::xbDbf</a></li>
+<li>PutLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0">xb::xbDbf</a></li>
+<li>PutLongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47">xb::xbDbf</a></li>
+<li>PutRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d">xb::xbDbf</a></li>
+<li>PutULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2">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_r.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_r.html
new file mode 100644
index 0000000..87f9921
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_r.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_r" name="index_r"></a>- r -</h3><ul>
+<li>ReadBlock()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">xb::xbFile</a></li>
+<li>ReadHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">xb::xbDbf</a></li>
+<li>RecordDeleted()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6">xb::xbDbf</a></li>
+<li>Remove()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#afaac65eaa6d9ef1596d6a0e7b91ed0f2">xb::xbString</a></li>
+<li>RemoveTblFromTblList()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ac8eaef41acf08911b90f900aac8e70af">xb::xbTblMgr</a></li>
+<li>Rename()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708">xb::xbDbf</a></li>
+<li>Replace()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac721d643c60b5c5acf60c2bce99596fa">xb::xbString</a></li>
+<li>Resize()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e">xb::xbString</a></li>
+<li>Rtrim()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077">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_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_t.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_t.html
new file mode 100644
index 0000000..f711fd7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_t.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_t" name="index_t"></a>- t -</h3><ul>
+<li>ToLowerCase()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a602cac1a6ef3f6b52f587ac4c0ef4fb2">xb::xbString</a></li>
+<li>ToUpperCase()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a68001d0a44e6b4fe61e29a4e41ded9d4">xb::xbString</a></li>
+<li>Trim()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#abc9bd33687d4e03ca52d77885721d626">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_u.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_u.html
new file mode 100644
index 0000000..d607254
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_u.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 - 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_u" name="index_u"></a>- u -</h3><ul>
+<li>UndeleteAllRecords()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ae94cb1bf9f75184f39d9e1a80ab49d4a">xb::xbDbf</a></li>
+<li>UndeleteRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0">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_v.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_v.html
new file mode 100644
index 0000000..5be4554
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_v.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_v" name="index_v"></a>- v -</h3><ul>
+<li>ValidateSchema()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d">xb::xbDbf</a></li>
+<li>ValidLogicalValue()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a72b16c15fd8822efaa5f158c34df7b1e">xb::xbString</a></li>
+<li>ValidNumericValue()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aeed920d2a25111f776ddde2d530eb81b">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_w.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_w.html
new file mode 100644
index 0000000..05f56b1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_w.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_w" name="index_w"></a>- w -</h3><ul>
+<li>WriteBlock()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">xb::xbFile</a></li>
+<li>WriteHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a44e1410109ef7b3d11a6af4b704b62b2">xb::xbDbf</a></li>
+<li>WriteLogBytes()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a0dff00b9ee3c288841e137ca01168116">xb::xbXBase</a></li>
+<li>WriteLogMessage()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a9ca5be73abffd0fdd18bdc799877272a">xb::xbXBase</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_x.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_x.html
new file mode 100644
index 0000000..b5fe61e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_x.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: 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_x" name="index_x"></a>- x -</h3><ul>
+<li>xbDate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719">xb::xbDate</a></li>
+<li>xbDbf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204">xb::xbDbf</a></li>
+<li>xbFclose()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">xb::xbFile</a></li>
+<li>xbFeof()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">xb::xbFile</a></li>
+<li>xbFflush()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">xb::xbFile</a></li>
+<li>xbFgetc()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4">xb::xbFile</a></li>
+<li>xbFgets()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xb::xbFile</a></li>
+<li>xbFile()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176">xb::xbFile</a></li>
+<li>xbFopen()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xb::xbFile</a></li>
+<li>xbFputc()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">xb::xbFile</a></li>
+<li>xbFputs()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">xb::xbFile</a></li>
+<li>xbFread()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">xb::xbFile</a></li>
+<li>xbFseek()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">xb::xbFile</a></li>
+<li>xbFtell()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xb::xbFile</a></li>
+<li>xbFTurnOffFileBuffering()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">xb::xbFile</a></li>
+<li>xbFwrite()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xb::xbFile</a></li>
+<li>xbMemcmp()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66">xb::xbXBase</a></li>
+<li>xbReadUntil()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">xb::xbFile</a></li>
+<li>xbRemove()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">xb::xbFile</a></li>
+<li>xbRename()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">xb::xbFile</a></li>
+<li>xbRewind()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">xb::xbFile</a></li>
+<li>xbSleep()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf">xb::xbXBase</a></li>
+<li>xbSsv()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b">xb::xbSsv</a></li>
+<li>xbString()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1">xb::xbString</a></li>
+<li>xbTblMgr()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c">xb::xbTblMgr</a></li>
+<li>xbTruncate()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">xb::xbFile</a></li>
+<li>xbXBase()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224">xb::xbXBase</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_y.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_y.html
new file mode 100644
index 0000000..7da0e45
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_y.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_y" name="index_y"></a>- y -</h3><ul>
+<li>YearOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a31057dfaa36389a16e40e3db82c46262">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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_z.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_z.html
new file mode 100644
index 0000000..93817cc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_z.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_z" name="index_z"></a>- z -</h3><ul>
+<li>Zap()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8ed0693b10b95aaa4e46037758d160ed">xb::xbDbf</a></li>
+<li>ZapChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a2fd30956a26a260d1ef6fdbe73dd93f9">xb::xbString</a></li>
+<li>ZapLeadingChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#addc3a470f6cd85d4c21bf9da38cf5ac9">xb::xbString</a></li>
+<li>ZapTrailingChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#afe3415bfa2e1089b792aeda0462fb99e">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_~.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_~.html
new file mode 100644
index 0000000..27db43a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_func_~.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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__7E" name="index__7E"></a>- ~ -</h3><ul>
+<li>~xbDate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37">xb::xbDate</a></li>
+<li>~xbDbf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7eb87521fba8a939c613056d9918d880">xb::xbDbf</a></li>
+<li>~xbFile()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90">xb::xbFile</a></li>
+<li>~xbString()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a10a6549efab02bc76ab33b15916b1eb1">xb::xbString</a></li>
+<li>~xbTblMgr()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#aad6be32d7b3378c71d47fa27ebfe6cbf">xb::xbTblMgr</a></li>
+<li>~xbXBase()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a204f8634894ac2066d3209117803306d">xb::xbXBase</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_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_h.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_h.html
new file mode 100644
index 0000000..f8c6626
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_h.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_h" name="index_h"></a>- h -</h3><ul>
+<li>HasAlphaChars()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aa13f6b72e5a529eab04545892bbc98b4">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_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_j.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_j.html
new file mode 100644
index 0000000..7c9cd00
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_j.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_j" name="index_j"></a>- j -</h3><ul>
+<li>JulianDays()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7">xb::xbDate</a></li>
+<li>JulToDate8()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9d28b2a46d8aaa284b92f44eeb96b2ff">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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_l.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_l.html
new file mode 100644
index 0000000..778f618
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_l.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: 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_l" name="index_l"></a>- l -</h3><ul>
+<li>LastDayOfMonth()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a15847866bb7642aa42bc254e0cf2038a">xb::xbDate</a></li>
+<li>Left()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#acdc3a6d6955b99f0a6b1d181fb3098b9">xb::xbString</a></li>
+<li>Len()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a998b240eedac311aea5843047f55649b">xb::xbString</a></li>
+<li>Ltrim()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a90e0d0be4fd0d82dd2ebbe689adf18ee">xb::xbString</a></li>
+<li>Ltrunc()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a656f5854f74064b7257ff96d96dfb68b">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_m.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_m.html
new file mode 100644
index 0000000..c4bd343
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_m.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_m" name="index_m"></a>- m -</h3><ul>
+<li>MemoFieldsExist()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950">xb::xbDbf</a></li>
+<li>Mid()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7">xb::xbString</a></li>
+<li>MonthOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e">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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_o.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_o.html
new file mode 100644
index 0000000..95321c1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_o.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</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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_o" name="index_o"></a>- o -</h3><ul>
+<li>Open()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ae388c5e02adc86e6e9988e697e061610">xb::xbDbf</a>, <a class="el" href="classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a">xb::xbXBase</a></li>
+<li>OpenHighestVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">xb::xbXBase</a></li>
+<li>operator const char *()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a545df0ae9590f0ea5844a165e38a6388">xb::xbString</a></li>
+<li>operator!=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ac3aaf8997fc0c36676085e7741f33a8a">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#acf89691607050b0505dc6af28d059c38">xb::xbString</a></li>
+<li>operator+()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ad09609bf78cf038886a4f9cd19423f9c">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#aab556e8c3cb478dd95643327d72a48bd">xb::xbString</a></li>
+<li>operator++()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a1c7d9e3718c43df18b21646072c8605e">xb::xbDate</a></li>
+<li>operator+=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a947ba156d04fe063aaa4c9964ae5d163">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a76a47af239797a266ada6141c150001c">xb::xbString</a></li>
+<li>operator-()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a3f3a8802c96098c85aa8d0e19717a979">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a06abec236b95f6933ba17bf67089f7cf">xb::xbString</a></li>
+<li>operator--()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ae2b33dfee60d324916d833b2098b5a6b">xb::xbDate</a></li>
+<li>operator-=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a4a8f207d759540114373f5e9d6d375f7">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#aa7f4db1b4eae9dfad46346db6e17ea15">xb::xbString</a></li>
+<li>operator&lt;()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a11f09d97ed527e7ef00ba6f17b9fb02c">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a71c7aafa0d523c72cbe58c474be2270a">xb::xbString</a></li>
+<li>operator&lt;&lt;&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3fa915061156521e9dd772a8d7e5f8fb">xb::xbString</a></li>
+<li>operator&lt;=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a6d8fa4df4664f3fd8d4cc15e77f6d046">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a461f245e60cddfdf5f78a972a46e5880">xb::xbString</a></li>
+<li>operator=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a2e33ad9415c32e820e08fd8084198690">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a4f69d11cbd43edf71725a606d0ca8f40">xb::xbString</a></li>
+<li>operator==()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#aaaf98c1a672066021895f0953b6e94d0">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a2df3ed2fc9456214f5fd2fcf77b69bc1">xb::xbString</a></li>
+<li>operator&gt;()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a744031c4031d6ec4595d34acbd1c5860">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#ae46f6a45da5686b607a4edf2786a2fff">xb::xbString</a></li>
+<li>operator&gt;=()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a1d81959ea55440588068ea7f82617c99">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a8f16643cb7ba3ee9cf685422c9ea0e67">xb::xbString</a></li>
+<li>operator[]()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#abe45e463226ac8e18550ced18c5a9df3">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_p.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_p.html
new file mode 100644
index 0000000..a2d9678
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_p.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</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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_p" name="index_p"></a>- p -</h3><ul>
+<li>Pack()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a">xb::xbDbf</a></li>
+<li>PadLeft()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b">xb::xbString</a></li>
+<li>PadRight()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284">xb::xbString</a></li>
+<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>Pos()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581">xb::xbString</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>
+<li>PutAt()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39">xb::xbString</a></li>
+<li>PutDateField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5">xb::xbDbf</a></li>
+<li>PutDoubleField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5">xb::xbDbf</a></li>
+<li>PutField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0">xb::xbDbf</a></li>
+<li>PutFloatField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8">xb::xbDbf</a></li>
+<li>PutLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0">xb::xbDbf</a></li>
+<li>PutLongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47">xb::xbDbf</a></li>
+<li>PutRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d">xb::xbDbf</a></li>
+<li>PutULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2">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_r.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_r.html
new file mode 100644
index 0000000..f3d770b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_r.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_r" name="index_r"></a>- r -</h3><ul>
+<li>ReadBlock()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">xb::xbFile</a></li>
+<li>ReadHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">xb::xbDbf</a></li>
+<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>
+<li>RecordDeleted()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6">xb::xbDbf</a></li>
+<li>Remove()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#afaac65eaa6d9ef1596d6a0e7b91ed0f2">xb::xbString</a></li>
+<li>RemoveTblFromTblList()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ac8eaef41acf08911b90f900aac8e70af">xb::xbTblMgr</a></li>
+<li>Rename()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708">xb::xbDbf</a></li>
+<li>Replace()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac721d643c60b5c5acf60c2bce99596fa">xb::xbString</a></li>
+<li>Resize()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e">xb::xbString</a></li>
+<li>Rtrim()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077">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_rela.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_rela.html
new file mode 100644
index 0000000..332a716
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_rela.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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 - Related 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;<ul>
+<li>operator&lt;&lt;&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3fa915061156521e9dd772a8d7e5f8fb">xb::xbString</a></li>
+<li>xbBcd&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add">xb::xbXBase</a></li>
+<li>xbExp&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc">xb::xbXBase</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_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_t.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_t.html
new file mode 100644
index 0000000..a88f838
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_t.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_t" name="index_t"></a>- t -</h3><ul>
+<li>ToLowerCase()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a602cac1a6ef3f6b52f587ac4c0ef4fb2">xb::xbString</a></li>
+<li>ToUpperCase()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a68001d0a44e6b4fe61e29a4e41ded9d4">xb::xbString</a></li>
+<li>Trim()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#abc9bd33687d4e03ca52d77885721d626">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_u.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_u.html
new file mode 100644
index 0000000..90e93a2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_u.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_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>
+<li>UndeleteAllRecords()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ae94cb1bf9f75184f39d9e1a80ab49d4a">xb::xbDbf</a></li>
+<li>UndeleteRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0">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_v.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_v.html
new file mode 100644
index 0000000..969ce10
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_v.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_v" name="index_v"></a>- v -</h3><ul>
+<li>ValidateSchema()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d">xb::xbDbf</a></li>
+<li>ValidLogicalValue()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a72b16c15fd8822efaa5f158c34df7b1e">xb::xbString</a></li>
+<li>ValidNumericValue()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#aeed920d2a25111f776ddde2d530eb81b">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_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_w.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_w.html
new file mode 100644
index 0000000..3d42dbb
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_w.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</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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_w" name="index_w"></a>- w -</h3><ul>
+<li>WriteBlock()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">xb::xbFile</a></li>
+<li>WriteHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a44e1410109ef7b3d11a6af4b704b62b2">xb::xbDbf</a></li>
+<li>WriteLogBytes()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a0dff00b9ee3c288841e137ca01168116">xb::xbXBase</a></li>
+<li>WriteLogMessage()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a9ca5be73abffd0fdd18bdc799877272a">xb::xbXBase</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_x.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_x.html
new file mode 100644
index 0000000..d7e5863
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_x.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: 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_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>
+<li>xbBcd&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add">xb::xbXBase</a></li>
+<li>xbDate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719">xb::xbDate</a></li>
+<li>xbDbf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204">xb::xbDbf</a></li>
+<li>xbExp&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc">xb::xbXBase</a></li>
+<li>xbFclose()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">xb::xbFile</a></li>
+<li>xbFeof()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170">xb::xbFile</a></li>
+<li>xbFflush()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009">xb::xbFile</a></li>
+<li>xbFgetc()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">xb::xbFile</a></li>
+<li>xbFgets()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xb::xbFile</a></li>
+<li>xbFile()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176">xb::xbFile</a></li>
+<li>xbFopen()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xb::xbFile</a></li>
+<li>xbFputc()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896">xb::xbFile</a></li>
+<li>xbFputs()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573">xb::xbFile</a></li>
+<li>xbFread()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">xb::xbFile</a></li>
+<li>xbFseek()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">xb::xbFile</a></li>
+<li>xbFtell()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xb::xbFile</a></li>
+<li>xbFTurnOffFileBuffering()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">xb::xbFile</a></li>
+<li>xbFwrite()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xb::xbFile</a></li>
+<li>xbMemcmp()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66">xb::xbXBase</a></li>
+<li>xbReadUntil()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">xb::xbFile</a></li>
+<li>xbRemove()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07">xb::xbFile</a></li>
+<li>xbRename()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012">xb::xbFile</a></li>
+<li>xbRewind()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">xb::xbFile</a></li>
+<li>xbSleep()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf">xb::xbXBase</a></li>
+<li>xbSsv()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b">xb::xbSsv</a></li>
+<li>xbString()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1">xb::xbString</a></li>
+<li>xbTblMgr()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c">xb::xbTblMgr</a></li>
+<li>xbTruncate()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">xb::xbFile</a></li>
+<li>xbXBase()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224">xb::xbXBase</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_y.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_y.html
new file mode 100644
index 0000000..0b6c266
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_y.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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_y" name="index_y"></a>- y -</h3><ul>
+<li>YearOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a31057dfaa36389a16e40e3db82c46262">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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_z.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_z.html
new file mode 100644
index 0000000..8ef0a42
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_z.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</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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_z" name="index_z"></a>- z -</h3><ul>
+<li>Zap()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8ed0693b10b95aaa4e46037758d160ed">xb::xbDbf</a></li>
+<li>ZapChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a2fd30956a26a260d1ef6fdbe73dd93f9">xb::xbString</a></li>
+<li>ZapLeadingChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#addc3a470f6cd85d4c21bf9da38cf5ac9">xb::xbString</a></li>
+<li>ZapTrailingChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#afe3415bfa2e1089b792aeda0462fb99e">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_~.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_~.html
new file mode 100644
index 0000000..45300d3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/functions_~.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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__7E" name="index__7E"></a>- ~ -</h3><ul>
+<li>~xbDate()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37">xb::xbDate</a></li>
+<li>~xbDbf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7eb87521fba8a939c613056d9918d880">xb::xbDbf</a></li>
+<li>~xbFile()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90">xb::xbFile</a></li>
+<li>~xbString()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a10a6549efab02bc76ab33b15916b1eb1">xb::xbString</a></li>
+<li>~xbTblMgr()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#aad6be32d7b3378c71d47fa27ebfe6cbf">xb::xbTblMgr</a></li>
+<li>~xbXBase()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a204f8634894ac2066d3209117803306d">xb::xbXBase</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.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_vars.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_vars.html
new file mode 100644
index 0000000..ae4118a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/globals_vars.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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;<ul>
+<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>
+<li>timer&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#ae2281da6157495d69406c35f69a61f9f">tstfuncs.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/index.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/index.html
new file mode 100644
index 0000000..8fd29ce
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/index.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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">Xbase64 Documentation</div></div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.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/jquery.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/jquery.js
new file mode 100644
index 0000000..c9ed3d9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/jquery.js
@@ -0,0 +1,35 @@
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
+/*! jQuery UI - v1.12.1 - 2019-01-27
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}t.ui=t.ui||{},t.ui.version="1.12.1";var i=0,s=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,o=s.call(arguments,1),a=0,r=o.length;r>a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,m,g,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),x={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,m=_.offset,g=t.extend({},m),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),x[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?g.left+=p:"center"===n.at[0]&&(g.left+=p/2),"bottom"===n.at[1]?g.top+=f:"center"===n.at[1]&&(g.top+=f/2),u=e(x.at,p,f),g.left+=u[0],g.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),k=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},g),T=e(x.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:k,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=m.left-D.left,i=e+p-l,s=m.top-D.top,r=s+f-c,u={target:{element:v,left:m.left,top:m.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element
+},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/**
+ * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler
+ * Licensed under MIT
+ * @author Ariel Flesler
+ * @version 2.1.2
+ */
+;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
+/*!
+ PowerTip v1.3.1 (2018-04-15)
+ https://stevenbenner.github.io/jquery-powertip/
+ Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ */
+!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
+ * http://www.smartmenus.org/
+ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menu.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menu.js
new file mode 100644
index 0000000..54e81cf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/menu.js
@@ -0,0 +1,127 @@
+/*
+ @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
+ */
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+ function makeTree(data,relPath) {
+ var result='';
+ if ('children' in data) {
+ result+='<ul>';
+ for (var i in data.children) {
+ result+='<li><a href="'+relPath+data.children[i].url+'">'+
+ data.children[i].text+'</a>'+
+ makeTree(data.children[i],relPath)+'</li>';
+ }
+ result+='</ul>';
+ }
+ return result;
+ }
+ var searchBox;
+ if (searchEnabled) {
+ if (serverSide) {
+ searchBox='<div id="MSearchBox" class="MSearchBoxInactive">'+
+ '<div class="left">'+
+ '<form id="FSearchBox" action="'+relPath+searchPage+
+ '" method="get"><img id="MSearchSelect" src="'+
+ relPath+'search/mag.svg" alt=""/>'+
+ '<input type="text" id="MSearchField" name="query" value="'+search+
+ '" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
+ ' onblur="searchBox.OnSearchFieldFocus(false)">'+
+ '</form>'+
+ '</div>'+
+ '<div class="right"></div>'+
+ '</div>';
+ } else {
+ searchBox='<div id="MSearchBox" class="MSearchBoxInactive">'+
+ '<span class="left">'+
+ '<img id="MSearchSelect" src="'+relPath+
+ 'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()"'+
+ ' onmouseout="return searchBox.OnSearchSelectHide()" alt=""/>'+
+ '<input type="text" id="MSearchField" value="'+search+
+ '" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+
+ 'onblur="searchBox.OnSearchFieldFocus(false)" '+
+ 'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+
+ '</span>'+
+ '<span class="right"><a id="MSearchClose" '+
+ 'href="javascript:searchBox.CloseResultsWindow()">'+
+ '<img id="MSearchCloseImg" border="0" src="'+relPath+
+ 'search/close.svg" alt=""/></a>'
+ '</span>'
+ '</div>';
+ }
+ }
+
+ $('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
+ '<label class="main-menu-btn" for="main-menu-state">'+
+ '<span class="main-menu-btn-icon"></span> '+
+ 'Toggle main menu visibility</label>'+
+ '<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
+ '</div>');
+ $('#main-nav').append(makeTree(menudata,relPath));
+ $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+ if (searchBox) {
+ $('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
+ }
+ var $mainMenuState = $('#main-menu-state');
+ var prevWidth = 0;
+ if ($mainMenuState.length) {
+ function initResizableIfExists() {
+ if (typeof initResizable==='function') initResizable();
+ }
+ // animate mobile menu
+ $mainMenuState.change(function(e) {
+ var $menu = $('#main-menu');
+ var options = { duration: 250, step: initResizableIfExists };
+ if (this.checked) {
+ options['complete'] = function() { $menu.css('display', 'block') };
+ $menu.hide().slideDown(options);
+ } else {
+ options['complete'] = function() { $menu.css('display', 'none') };
+ $menu.show().slideUp(options);
+ }
+ });
+ // set default menu visibility
+ function resetState() {
+ var $menu = $('#main-menu');
+ var $mainMenuState = $('#main-menu-state');
+ var newWidth = $(window).outerWidth();
+ if (newWidth!=prevWidth) {
+ if ($(window).outerWidth()<768) {
+ $mainMenuState.prop('checked',false); $menu.hide();
+ $('#searchBoxPos1').html(searchBox);
+ $('#searchBoxPos2').hide();
+ } else {
+ $menu.show();
+ $('#searchBoxPos1').empty();
+ $('#searchBoxPos2').html(searchBox);
+ $('#searchBoxPos2').show();
+ }
+ prevWidth = newWidth;
+ }
+ }
+ $(window).ready(function() { resetState(); initResizableIfExists(); });
+ $(window).resize(resetState);
+ }
+ $('#main-menu').smartmenus();
+}
+/* @license-end */
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers.html
new file mode 100644
index 0000000..31f72b3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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 namespace members with links to the namespace documentation for each member:</div><ul>
+<li>operator&lt;&lt;()&#160;:&#160;<a class="el" href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">xb</a></li>
+<li>xbBool&#160;:&#160;<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb</a></li>
+<li>xbDbf&#160;:&#160;<a class="el" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb</a></li>
+<li>xbDouble&#160;:&#160;<a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb</a></li>
+<li>xbErrorMessages&#160;:&#160;<a class="el" href="namespacexb.html#a04be228a037d220dd5564f5ef618adcc">xb</a></li>
+<li>xbFloat&#160;:&#160;<a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xb</a></li>
+<li>xbLog&#160;:&#160;<a class="el" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb</a></li>
+<li>xbOffT&#160;:&#160;<a class="el" href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793">xb</a></li>
+<li>xbXBase&#160;:&#160;<a class="el" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb</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/namespacemembers_func.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_func.html
new file mode 100644
index 0000000..90acc35
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_func.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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;<ul>
+<li>operator&lt;&lt;()&#160;:&#160;<a class="el" href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">xb</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/namespacemembers_type.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_type.html
new file mode 100644
index 0000000..edd39cf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_type.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: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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;<ul>
+<li>xbBool&#160;:&#160;<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb</a></li>
+<li>xbDouble&#160;:&#160;<a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb</a></li>
+<li>xbFloat&#160;:&#160;<a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xb</a></li>
+<li>xbOffT&#160;:&#160;<a class="el" href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793">xb</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/namespacemembers_vars.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_vars.html
new file mode 100644
index 0000000..caa02e5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacemembers_vars.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: Namespace Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;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;<ul>
+<li>xbDbf&#160;:&#160;<a class="el" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xb</a></li>
+<li>xbErrorMessages&#160;:&#160;<a class="el" href="namespacexb.html#a04be228a037d220dd5564f5ef618adcc">xb</a></li>
+<li>xbLog&#160;:&#160;<a class="el" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb</a></li>
+<li>xbXBase&#160;:&#160;<a class="el" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb</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/namespaces.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespaces.html
new file mode 100644
index 0000000..c77f658
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespaces.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: Namespace 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">Namespace List</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all namespaces 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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacexb.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacexb.html
new file mode 100644
index 0000000..38d1e7c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/namespacexb.html
@@ -0,0 +1,290 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-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 Namespace 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="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle"><div class="title">xb Namespace Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<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">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>
+<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">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>
+<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">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>
+<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">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_1xbSsv.html">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>
+<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">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>
+<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">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">xbTblMgr</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_1xbXBase.html">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="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">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">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">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">xbOffT</a></td></tr>
+<tr class="separator:ac963d9fde6debb416303cfbed35fb793"><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">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: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><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">xbErrorMessages</a> []</td></tr>
+<tr class="separator:a04be228a037d220dd5564f5ef618adcc"><td class="memSeparator" colspan="2">&#160;</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">xbXBase</a></td></tr>
+<tr class="separator:a97858ddeb1c4b0100f3edc1a46d3a8b0"><td class="memSeparator" colspan="2">&#160;</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">xbDbf</a></td></tr>
+<tr class="separator:ab2eae4b4732466698a7fdd89d77ba53b"><td class="memSeparator" colspan="2">&#160;</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">xbLog</a></td></tr>
+<tr class="separator:a4a31fbe9110c9e55495ce71e642d785c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ab1a750481dd487f0d384aa1d200dff0f" name="ab1a750481dd487f0d384aa1d200dff0f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab1a750481dd487f0d384aa1d200dff0f">&#9670;&nbsp;</a></span>xbBool</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef short int <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a25f47b226ce924a5c78f97989b0744a2" name="a25f47b226ce924a5c78f97989b0744a2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a25f47b226ce924a5c78f97989b0744a2">&#9670;&nbsp;</a></span>xbDouble</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef double <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a83aa6a550398db55973aa9fb4257e66e" name="a83aa6a550398db55973aa9fb4257e66e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a83aa6a550398db55973aa9fb4257e66e">&#9670;&nbsp;</a></span>xbFloat</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef float <a class="el" href="namespacexb.html#a83aa6a550398db55973aa9fb4257e66e">xb::xbFloat</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac963d9fde6debb416303cfbed35fb793" name="ac963d9fde6debb416303cfbed35fb793"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac963d9fde6debb416303cfbed35fb793">&#9670;&nbsp;</a></span>xbOffT</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef xbUInt64 <a class="el" href="namespacexb.html#ac963d9fde6debb416303cfbed35fb793">xb::xbOffT</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ad27f348219e895c44f74addba8e1889a" name="ad27f348219e895c44f74addba8e1889a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad27f348219e895c44f74addba8e1889a">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; xb::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>
+</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>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="ab2eae4b4732466698a7fdd89d77ba53b" name="ab2eae4b4732466698a7fdd89d77ba53b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab2eae4b4732466698a7fdd89d77ba53b">&#9670;&nbsp;</a></span>xbDbf</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">class XBDLLEXPORT <a class="el" href="classxb_1_1xbDbf.html">xb::xbDbf</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a04be228a037d220dd5564f5ef618adcc" name="a04be228a037d220dd5564f5ef618adcc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a04be228a037d220dd5564f5ef618adcc">&#9670;&nbsp;</a></span>xbErrorMessages</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const xbErrorMessage xb::xbErrorMessages[]</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4a31fbe9110c9e55495ce71e642d785c" name="a4a31fbe9110c9e55495ce71e642d785c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a31fbe9110c9e55495ce71e642d785c">&#9670;&nbsp;</a></span>xbLog</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">class XBDLLEXPORT xb::xbLog</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a97858ddeb1c4b0100f3edc1a46d3a8b0" name="a97858ddeb1c4b0100f3edc1a46d3a8b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97858ddeb1c4b0100f3edc1a46d3a8b0">&#9670;&nbsp;</a></span>xbXBase</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">class XBDLLEXPORT <a class="el" href="classxb_1_1xbXBase.html">xb::xbXBase</a></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/nav_f.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_f.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_g.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_g.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_h.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/nav_h.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/open.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/open.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/reindex_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/reindex_8cpp.html
new file mode 100644
index 0000000..8560b2a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/reindex_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.0.2/src/utils/reindex.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">reindex.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;xbase64/xbase64.h&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:a0c99d968a34e803d378692bde2e3f18f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="reindex_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.html
new file mode 100644
index 0000000..c36c9af
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_0.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="all_0.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.html
new file mode 100644
index 0000000..91cfe8a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_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="all_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.js
new file mode 100644
index 0000000..a3b8ce1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['bitdump_0',['BitDump',['../classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae',1,'xb::xbSsv::BitDump(unsigned char c) const'],['../classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190',1,'xb::xbSsv::BitDump(char c) const']]],
+ ['bitset_1',['BitSet',['../classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72',1,'xb::xbSsv']]],
+ ['blankrecord_2',['BlankRecord',['../classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6',1,'xb::xbDbf']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.html
new file mode 100644
index 0000000..765f584
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_10.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="all_10.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.html
new file mode 100644
index 0000000..e2183ee
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.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="all_11.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.js
new file mode 100644
index 0000000..06b6b3d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_11.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['testmethod_0',['TestMethod',['../xb__test__expression_8cpp.html#aa385c5f9fa8b4cfd63763b4a28852b64',1,'TestMethod(xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char *title, const xbString &amp;sExpression, xbBool bExpectedResult):&#160;xb_test_expression.cpp'],['../tstfuncs_8cpp.html#a265547b80a3aef5836952bede5288e2c',1,'TestMethod(xbInt16 PrintOption, const char *title, const xbString &amp;result, const char *expectedResult, size_t expectedLen):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#a9c27703ef863c9d29680844fc5124953',1,'TestMethod(xbInt16 PrintOption, const char *title, char result, char expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#ae6536e920580382389126d5f66655f90',1,'TestMethod(xbInt16 PrintOption, const char *title, xbInt32 result, xbInt32 expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#a000fca67bc0fffea3d3da7a5317a06e4',1,'TestMethod(xbInt16 PrintOption, const char *title, xbUInt64 result, xbUInt64 expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#a663f3dd7bd8574a35c1b1b9a22081c6d',1,'TestMethod(xbInt16 PrintOption, const char *title, xbFloat result, xbFloat expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#af1c78fb72bcd39eb86f11aa2887fe62c',1,'TestMethod(xbInt16 PrintOption, const char *title, xbDouble result, xbDouble expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#ac64a0bed74ba10b638456709f128f893',1,'TestMethod(xbInt16 PrintOption, const char *title, xbDouble result, xbDouble expectedResult, xbDouble dEpsilon):&#160;tstfuncs.cpp'],['../xb__test__expression_8cpp.html#ad52c27685018dda7c5c4b26fb445860e',1,'TestMethod(xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char *title, const xbString &amp;sExpression, const char *sExpectedResult, xbInt16 iExpectedResultLen):&#160;xb_test_expression.cpp'],['../xb__test__expression_8cpp.html#a7030149316fe8d8195ffbb18132e0cf9',1,'TestMethod(xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char *title, const xbString &amp;sExpression, xbDouble dExpectedResult):&#160;xb_test_expression.cpp'],['../xb__test__expression_8cpp.html#a10e637a203841bd2b6a92e6217509e23',1,'TestMethod(xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char *title, const xbString &amp;sExpression, xbDate dtExpectedResult):&#160;xb_test_expression.cpp']]],
+ ['testtokenmethod_1',['TestTokenMethod',['../xb__test__expression_8cpp.html#a440d64b55abaa9e14e73ecc132d1084d',1,'xb_test_expression.cpp']]],
+ ['testweight_2',['TestWeight',['../xb__test__expression_8cpp.html#af56b6dbc38e0d23caaf6531526315379',1,'xb_test_expression.cpp']]],
+ ['timer_3',['timer',['../tstfuncs_8cpp.html#ae2281da6157495d69406c35f69a61f9f',1,'tstfuncs.cpp']]],
+ ['tolowercase_4',['ToLowerCase',['../classxb_1_1xbString.html#a602cac1a6ef3f6b52f587ac4c0ef4fb2',1,'xb::xbString']]],
+ ['touppercase_5',['ToUpperCase',['../classxb_1_1xbString.html#a68001d0a44e6b4fe61e29a4e41ded9d4',1,'xb::xbString']]],
+ ['trim_6',['Trim',['../classxb_1_1xbString.html#abc9bd33687d4e03ca52d77885721d626',1,'xb::xbString']]],
+ ['tstfuncs_2ecpp_7',['tstfuncs.cpp',['../tstfuncs_8cpp.html',1,'']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.html
new file mode 100644
index 0000000..9b9621c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.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="all_12.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.js
new file mode 100644
index 0000000..56d429c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_12.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['uiheaderlen_0',['uiHeaderLen',['../classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918',1,'xb::xbDbf']]],
+ ['uirecordlen_1',['uiRecordLen',['../classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91',1,'xb::xbDbf']]],
+ ['ulcurrec_2',['ulCurRec',['../classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8',1,'xb::xbDbf']]],
+ ['ulnoofrecs_3',['ulNoOfRecs',['../classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87',1,'xb::xbDbf']]],
+ ['undeleteallrecords_4',['UndeleteAllRecords',['../classxb_1_1xbDbf.html#ae94cb1bf9f75184f39d9e1a80ab49d4a',1,'xb::xbDbf']]],
+ ['undeleterecord_5',['UndeleteRecord',['../classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0',1,'xb::xbDbf']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.html
new file mode 100644
index 0000000..4acb7f9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.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="all_13.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.js
new file mode 100644
index 0000000..4ebd614
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_13.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['validateschema_0',['ValidateSchema',['../classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d',1,'xb::xbDbf']]],
+ ['validlogicalvalue_1',['ValidLogicalValue',['../classxb_1_1xbString.html#a72b16c15fd8822efaa5f158c34df7b1e',1,'xb::xbString']]],
+ ['validnumericvalue_2',['ValidNumericValue',['../classxb_1_1xbString.html#aeed920d2a25111f776ddde2d530eb81b',1,'xb::xbString']]],
+ ['verbose_3',['VERBOSE',['../xb__test__string_8cpp.html#a42f8c497a1968074f38bf5055c650dca',1,'xb_test_string.cpp']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.html
new file mode 100644
index 0000000..abb790c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.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="all_14.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.js
new file mode 100644
index 0000000..c9794d0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_14.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['writeblock_0',['WriteBlock',['../classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c',1,'xb::xbFile']]],
+ ['writeheader_1',['WriteHeader',['../classxb_1_1xbDbf.html#a44e1410109ef7b3d11a6af4b704b62b2',1,'xb::xbDbf']]],
+ ['writelogbytes_2',['WriteLogBytes',['../classxb_1_1xbXBase.html#a0dff00b9ee3c288841e137ca01168116',1,'xb::xbXBase']]],
+ ['writelogmessage_3',['WriteLogMessage',['../classxb_1_1xbXBase.html#a9ca5be73abffd0fdd18bdc799877272a',1,'xb::xbXBase']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.html
new file mode 100644
index 0000000..33e250b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_15.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="all_15.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.html
new file mode 100644
index 0000000..de305d9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.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="all_16.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.js
new file mode 100644
index 0000000..5979b24
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_16.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['yearof_0',['YearOf',['../classxb_1_1xbDate.html#a31057dfaa36389a16e40e3db82c46262',1,'xb::xbDate']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.html
new file mode 100644
index 0000000..48229a0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.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="all_17.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.js
new file mode 100644
index 0000000..7108002
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_17.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['zap_0',['Zap',['../classxb_1_1xbDbf.html#a8ed0693b10b95aaa4e46037758d160ed',1,'xb::xbDbf']]],
+ ['zapchar_1',['ZapChar',['../classxb_1_1xbString.html#a2fd30956a26a260d1ef6fdbe73dd93f9',1,'xb::xbString']]],
+ ['zapleadingchar_2',['ZapLeadingChar',['../classxb_1_1xbString.html#addc3a470f6cd85d4c21bf9da38cf5ac9',1,'xb::xbString']]],
+ ['zaptrailingchar_3',['ZapTrailingChar',['../classxb_1_1xbString.html#afe3415bfa2e1089b792aeda0462fb99e',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.html
new file mode 100644
index 0000000..c153550
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.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="all_18.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.js
new file mode 100644
index 0000000..d44ee63
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_18.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['_7exbdate_0',['~xbDate',['../classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37',1,'xb::xbDate']]],
+ ['_7exbdbf_1',['~xbDbf',['../classxb_1_1xbDbf.html#a7eb87521fba8a939c613056d9918d880',1,'xb::xbDbf']]],
+ ['_7exbfile_2',['~xbFile',['../classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90',1,'xb::xbFile']]],
+ ['_7exbstring_3',['~xbString',['../classxb_1_1xbString.html#a10a6549efab02bc76ab33b15916b1eb1',1,'xb::xbString']]],
+ ['_7exbtblmgr_4',['~xbTblMgr',['../classxb_1_1xbTblMgr.html#aad6be32d7b3378c71d47fa27ebfe6cbf',1,'xb::xbTblMgr']]],
+ ['_7exbxbase_5',['~xbXBase',['../classxb_1_1xbXBase.html#a204f8634894ac2066d3209117803306d',1,'xb::xbXBase']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.html
new file mode 100644
index 0000000..259dde4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_2.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="all_2.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.html
new file mode 100644
index 0000000..1e60c94
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_3.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="all_3.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.html
new file mode 100644
index 0000000..08f1aed
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_4.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="all_4.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.html
new file mode 100644
index 0000000..0d85fcc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.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="all_5.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.js
new file mode 100644
index 0000000..d143ad3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_5.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['fileexists_0',['FileExists',['../classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006',1,'xb::xbFile::FileExists() const'],['../classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd',1,'xb::xbFile::FileExists(xbInt16 iOption) const'],['../classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94',1,'xb::xbFile::FileExists(const xbString &amp;sFileName) const'],['../classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148',1,'xb::xbFile::FileExists(const xbString &amp;sFileName, xbInt16 iOption) const']]],
+ ['fileisopen_1',['FileIsOpen',['../classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59',1,'xb::xbFile']]],
+ ['flushlog_2',['FlushLog',['../classxb_1_1xbXBase.html#a5a5ecaed9777978344902446c9ae3b8e',1,'xb::xbXBase']]],
+ ['formatdate_3',['FormatDate',['../classxb_1_1xbDate.html#a01de44dc869f7db99f33046fc91f2c6a',1,'xb::xbDate']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.html
new file mode 100644
index 0000000..7e088b8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_6.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="all_6.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.html
new file mode 100644
index 0000000..d2b1825
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.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="all_7.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.js
new file mode 100644
index 0000000..6a2cc28
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['hasalphachars_0',['HasAlphaChars',['../classxb_1_1xbString.html#aa13f6b72e5a529eab04545892bbc98b4',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.html
new file mode 100644
index 0000000..f4e3a2a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_8.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="all_8.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.html
new file mode 100644
index 0000000..89177a8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.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="all_9.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.js
new file mode 100644
index 0000000..9143c4b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_9.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['jul_5foffset_0',['JUL_OFFSET',['../xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f',1,'xbdate.h']]],
+ ['juliandays_1',['JulianDays',['../classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7',1,'xb::xbDate']]],
+ ['jultodate8_2',['JulToDate8',['../classxb_1_1xbDate.html#a9d28b2a46d8aaa284b92f44eeb96b2ff',1,'xb::xbDate']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.html
new file mode 100644
index 0000000..1f90b7a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_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="all_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.js
new file mode 100644
index 0000000..ad825ae
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_a.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+ ['lastdayofmonth_0',['LastDayOfMonth',['../classxb_1_1xbDate.html#a15847866bb7642aa42bc254e0cf2038a',1,'xb::xbDate']]],
+ ['left_1',['Left',['../classxb_1_1xbString.html#acdc3a6d6955b99f0a6b1d181fb3098b9',1,'xb::xbString']]],
+ ['len_2',['Len',['../classxb_1_1xbString.html#a998b240eedac311aea5843047f55649b',1,'xb::xbString']]],
+ ['lk_5fclipper_3',['LK_CLIPPER',['../xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41',1,'xbdbf.h']]],
+ ['lk_5fdbase_4',['LK_DBASE',['../xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106',1,'xbdbf.h']]],
+ ['lk_5ffox_5',['LK_FOX',['../xbdbf_8h.html#a65e29186276222f460a7171803e07adf',1,'xbdbf.h']]],
+ ['lk_5fxbase64_6',['LK_XBASE64',['../xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4',1,'xbdbf.h']]],
+ ['ltrim_7',['Ltrim',['../classxb_1_1xbString.html#a90e0d0be4fd0d82dd2ebbe689adf18ee',1,'xb::xbString']]],
+ ['ltrunc_8',['Ltrunc',['../classxb_1_1xbString.html#a656f5854f74064b7257ff96d96dfb68b',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.html
new file mode 100644
index 0000000..b7ad6e6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_b.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="all_b.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.html
new file mode 100644
index 0000000..829c917
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_c.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="all_c.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.html
new file mode 100644
index 0000000..d32b28e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.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="all_d.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.js
new file mode 100644
index 0000000..bdfe8c7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_d.js
@@ -0,0 +1,21 @@
+var searchData=
+[
+ ['open_0',['Open',['../classxb_1_1xbDbf.html#ae388c5e02adc86e6e9988e697e061610',1,'xb::xbDbf::Open(const xbString &amp;sTableName, const xbString &amp;sAlias)'],['../classxb_1_1xbDbf.html#a69824d7bafc3f5a15bf7d09f2f511768',1,'xb::xbDbf::Open(const xbString &amp;sTableName)'],['../classxb_1_1xbXBase.html#ab35cec5ac8f0fa95f10653ca7ac817f6',1,'xb::xbXBase::Open()'],['../classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf',1,'xb::xbDbf::Open()'],['../classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a',1,'xb::xbXBase::Open(const xbString &amp;sTableName, xbInt16 &amp;iRc)']]],
+ ['openhighestversion_1',['OpenHighestVersion',['../classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b',1,'xb::xbXBase::OpenHighestVersion(const xbString &amp;sTableName, const xbString &amp;sAlias, xbDbf &amp;dbf, int dummy)'],['../classxb_1_1xbXBase.html#afa7bbac08a4601f49cd53b457196ee0e',1,'xb::xbXBase::OpenHighestVersion(const xbString &amp;sTableName, const xbString &amp;sAlias, xbDbf **dbf)']]],
+ ['operator_20const_20char_20_2a_2',['operator const char *',['../classxb_1_1xbString.html#a545df0ae9590f0ea5844a165e38a6388',1,'xb::xbString']]],
+ ['operator_21_3d_3',['operator!=',['../classxb_1_1xbDate.html#ac3aaf8997fc0c36676085e7741f33a8a',1,'xb::xbDate::operator!=()'],['../classxb_1_1xbString.html#acf89691607050b0505dc6af28d059c38',1,'xb::xbString::operator!=(const xbString &amp;) const'],['../classxb_1_1xbString.html#a822448f2a0ce653473d4c1de5763a3a6',1,'xb::xbString::operator!=(const char *) const']]],
+ ['operator_2b_4',['operator+',['../classxb_1_1xbString.html#a1f289d577ba90c500bc1be3ec7bb0206',1,'xb::xbString::operator+(const xbString &amp;s)'],['../classxb_1_1xbString.html#af559654baba81c3c0c19823c0b7a69d3',1,'xb::xbString::operator+(const char c)'],['../classxb_1_1xbString.html#aab556e8c3cb478dd95643327d72a48bd',1,'xb::xbString::operator+(const char *s)'],['../classxb_1_1xbDate.html#ad09609bf78cf038886a4f9cd19423f9c',1,'xb::xbDate::operator+(xbInt32 i)']]],
+ ['operator_2b_2b_5',['operator++',['../classxb_1_1xbDate.html#a1c7d9e3718c43df18b21646072c8605e',1,'xb::xbDate']]],
+ ['operator_2b_3d_6',['operator+=',['../classxb_1_1xbDate.html#a947ba156d04fe063aaa4c9964ae5d163',1,'xb::xbDate::operator+=()'],['../classxb_1_1xbString.html#a76a47af239797a266ada6141c150001c',1,'xb::xbString::operator+=(const xbString &amp;s)'],['../classxb_1_1xbString.html#ab319120dbad9107e1e7090139c956100',1,'xb::xbString::operator+=(const char *s)'],['../classxb_1_1xbString.html#ae12f45b8be84e438e032c0b860f985c6',1,'xb::xbString::operator+=(char c)']]],
+ ['operator_2d_7',['operator-',['../classxb_1_1xbDate.html#a3f3a8802c96098c85aa8d0e19717a979',1,'xb::xbDate::operator-(const xbDate &amp;) const'],['../classxb_1_1xbDate.html#a73ff5c037046ac0a0bb7d73f74e25cbb',1,'xb::xbDate::operator-(xbInt32 i)'],['../classxb_1_1xbString.html#a06abec236b95f6933ba17bf67089f7cf',1,'xb::xbString::operator-()']]],
+ ['operator_2d_2d_8',['operator--',['../classxb_1_1xbDate.html#ae2b33dfee60d324916d833b2098b5a6b',1,'xb::xbDate']]],
+ ['operator_2d_3d_9',['operator-=',['../classxb_1_1xbString.html#aa7f4db1b4eae9dfad46346db6e17ea15',1,'xb::xbString::operator-=(const xbString &amp;s)'],['../classxb_1_1xbString.html#aaae97e6eda3d18c9f463993ade985bf4',1,'xb::xbString::operator-=(const char *s)'],['../classxb_1_1xbString.html#adcafd019df23bb5724c46e34f3f31194',1,'xb::xbString::operator-=(char c)'],['../classxb_1_1xbDate.html#a4a8f207d759540114373f5e9d6d375f7',1,'xb::xbDate::operator-=(xbInt32 i)']]],
+ ['operator_3c_10',['operator&lt;',['../classxb_1_1xbDate.html#a11f09d97ed527e7ef00ba6f17b9fb02c',1,'xb::xbDate::operator&lt;()'],['../classxb_1_1xbString.html#a71c7aafa0d523c72cbe58c474be2270a',1,'xb::xbString::operator&lt;()']]],
+ ['operator_3c_3c_11',['operator&lt;&lt;',['../namespacexb.html#ad27f348219e895c44f74addba8e1889a',1,'xb::operator&lt;&lt;()'],['../classxb_1_1xbString.html#a3fa915061156521e9dd772a8d7e5f8fb',1,'xb::xbString::operator&lt;&lt;()']]],
+ ['operator_3c_3d_12',['operator&lt;=',['../classxb_1_1xbDate.html#a6d8fa4df4664f3fd8d4cc15e77f6d046',1,'xb::xbDate::operator&lt;=()'],['../classxb_1_1xbString.html#a461f245e60cddfdf5f78a972a46e5880',1,'xb::xbString::operator&lt;=()']]],
+ ['operator_3d_13',['operator=',['../classxb_1_1xbDate.html#a2e33ad9415c32e820e08fd8084198690',1,'xb::xbDate::operator=()'],['../classxb_1_1xbString.html#a4f69d11cbd43edf71725a606d0ca8f40',1,'xb::xbString::operator=(const xbString &amp;s)'],['../classxb_1_1xbString.html#a84ae7d16c5d73c5aa2270aa9895a7f7c',1,'xb::xbString::operator=(const char *s)']]],
+ ['operator_3d_3d_14',['operator==',['../classxb_1_1xbDate.html#aaaf98c1a672066021895f0953b6e94d0',1,'xb::xbDate::operator==()'],['../classxb_1_1xbString.html#a2df3ed2fc9456214f5fd2fcf77b69bc1',1,'xb::xbString::operator==(const xbString &amp;) const'],['../classxb_1_1xbString.html#a94031269af3c433393d4cf0ff9b4be38',1,'xb::xbString::operator==(const char *) const']]],
+ ['operator_3e_15',['operator&gt;',['../classxb_1_1xbDate.html#a744031c4031d6ec4595d34acbd1c5860',1,'xb::xbDate::operator&gt;()'],['../classxb_1_1xbString.html#ae46f6a45da5686b607a4edf2786a2fff',1,'xb::xbString::operator&gt;()']]],
+ ['operator_3e_3d_16',['operator&gt;=',['../classxb_1_1xbDate.html#a1d81959ea55440588068ea7f82617c99',1,'xb::xbDate::operator&gt;=()'],['../classxb_1_1xbString.html#a8f16643cb7ba3ee9cf685422c9ea0e67',1,'xb::xbString::operator&gt;=(const xbString &amp;) const']]],
+ ['operator_5b_5d_17',['operator[]',['../classxb_1_1xbString.html#abe45e463226ac8e18550ced18c5a9df3',1,'xb::xbString::operator[](xbUInt32 n) const'],['../classxb_1_1xbString.html#a4deaa68d9571753349c29baacb5613e8',1,'xb::xbString::operator[](xbInt32 n) const']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.html
new file mode 100644
index 0000000..ce450a2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_e.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="all_e.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.html
new file mode 100644
index 0000000..59cfe49
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.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="all_f.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.js
new file mode 100644
index 0000000..9b07813
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/all_f.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+ ['readblock_0',['ReadBlock',['../classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825',1,'xb::xbFile::ReadBlock(xbUInt32 ulBlockNo, size_t readSize, void *buf)'],['../classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485',1,'xb::xbFile::ReadBlock(xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf)']]],
+ ['readheader_1',['ReadHeader',['../classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9',1,'xb::xbDbf']]],
+ ['recbuf_2',['RecBuf',['../classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd',1,'xb::xbDbf']]],
+ ['recbuf2_3',['RecBuf2',['../classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606',1,'xb::xbDbf']]],
+ ['recorddeleted_4',['RecordDeleted',['../classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6',1,'xb::xbDbf']]],
+ ['remove_5',['Remove',['../classxb_1_1xbString.html#afaac65eaa6d9ef1596d6a0e7b91ed0f2',1,'xb::xbString']]],
+ ['removetblfromtbllist_6',['RemoveTblFromTblList',['../classxb_1_1xbTblMgr.html#ac8eaef41acf08911b90f900aac8e70af',1,'xb::xbTblMgr::RemoveTblFromTblList(const xbString &amp;sTblAlias)'],['../classxb_1_1xbTblMgr.html#a3d82b6e73d5c0bc8cac22b9a260389c1',1,'xb::xbTblMgr::RemoveTblFromTblList(xbDbf *d)']]],
+ ['rename_7',['Rename',['../classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708',1,'xb::xbDbf']]],
+ ['replace_8',['Replace',['../classxb_1_1xbString.html#ac721d643c60b5c5acf60c2bce99596fa',1,'xb::xbString']]],
+ ['resize_9',['Resize',['../classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e',1,'xb::xbString']]],
+ ['rtrim_10',['Rtrim',['../classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.html
new file mode 100644
index 0000000..8361bcd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_0.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_0.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.js
new file mode 100644
index 0000000..b0f0a44
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/classes_1.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+ ['xbdate_0',['xbDate',['../classxb_1_1xbDate.html',1,'xb']]],
+ ['xbdbf_1',['xbDbf',['../classxb_1_1xbDbf.html',1,'xb']]],
+ ['xbfile_2',['xbFile',['../classxb_1_1xbFile.html',1,'xb']]],
+ ['xbschema_3',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
+ ['xbssv_4',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb']]],
+ ['xbstring_5',['xbString',['../classxb_1_1xbString.html',1,'xb']]],
+ ['xbtbllist_6',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
+ ['xbtblmgr_7',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb']]],
+ ['xbxbase_8',['xbXBase',['../classxb_1_1xbXBase.html',1,'xb']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/close.svg b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/close.svg
new file mode 100644
index 0000000..a933eea
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/close.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 11 11"
+ height="11"
+ width="11"
+ id="svg2"
+ version="1.1">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <path
+ id="path12"
+ d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
+ style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
+</svg>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.html
new file mode 100644
index 0000000..fd147db
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.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="defines_0.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.js
new file mode 100644
index 0000000..7e77a63
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['jul_5foffset_0',['JUL_OFFSET',['../xbdate_8h.html#a119f32fda399e2ebc2d734012a130e8f',1,'xbdate.h']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.html
new file mode 100644
index 0000000..517e9fc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_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="defines_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.js
new file mode 100644
index 0000000..7d95fad
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_1.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['lk_5fclipper_0',['LK_CLIPPER',['../xbdbf_8h.html#a01d6d7910b0da2170eb904a97d864a41',1,'xbdbf.h']]],
+ ['lk_5fdbase_1',['LK_DBASE',['../xbdbf_8h.html#a4c08d01bd69e295b001bd00a228d8106',1,'xbdbf.h']]],
+ ['lk_5ffox_2',['LK_FOX',['../xbdbf_8h.html#a65e29186276222f460a7171803e07adf',1,'xbdbf.h']]],
+ ['lk_5fxbase64_3',['LK_XBASE64',['../xbdbf_8h.html#a42aea0ccd94f7422c8e0d7422dce85a4',1,'xbdbf.h']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.html
new file mode 100644
index 0000000..a4cbbba
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.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="defines_2.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.js
new file mode 100644
index 0000000..cbf9570
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['verbose_0',['VERBOSE',['../xb__test__string_8cpp.html#a42f8c497a1968074f38bf5055c650dca',1,'xb_test_string.cpp']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.html
new file mode 100644
index 0000000..df9e6c2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/defines_3.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="defines_3.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.html
new file mode 100644
index 0000000..da83704
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.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="files_0.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.js
new file mode 100644
index 0000000..f577bf3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['tstfuncs_2ecpp_0',['tstfuncs.cpp',['../tstfuncs_8cpp.html',1,'']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_1.html
new file mode 100644
index 0000000..f7e1582
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_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="files_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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.html
new file mode 100644
index 0000000..99aca62
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.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="files_2.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.js
new file mode 100644
index 0000000..c416fdd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['reindex_2ecpp_0',['reindex.cpp',['../reindex_8cpp.html',1,'']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.html
new file mode 100644
index 0000000..25e128c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.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="files_3.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.js
new file mode 100644
index 0000000..f577bf3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['tstfuncs_2ecpp_0',['tstfuncs.cpp',['../tstfuncs_8cpp.html',1,'']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.html
new file mode 100644
index 0000000..3c8ba6e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.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="files_4.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.js
new file mode 100644
index 0000000..e99e9ec
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/files_4.js
@@ -0,0 +1,100 @@
+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_5fdumphdr_2ecpp_5',['xb_dumphdr.cpp',['../xb__dumphdr_8cpp.html',1,'']]],
+ ['xb_5fdumpix_2ecpp_6',['xb_dumpix.cpp',['../xb__dumpix_8cpp.html',1,'']]],
+ ['xb_5fdumprecs_2ecpp_7',['xb_dumprecs.cpp',['../xb__dumprecs_8cpp.html',1,'']]],
+ ['xb_5fex_5fdate_2ecpp_8',['xb_ex_date.cpp',['../xb__ex__date_8cpp.html',1,'']]],
+ ['xb_5fex_5fsql_2ecpp_9',['xb_ex_sql.cpp',['../xb__ex__sql_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_5fdate_2ecpp_19',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_20',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_21',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_22',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_23',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpnode_2ecpp_24',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpression_2ecpp_25',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffile_2ecpp_26',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffilter_2ecpp_27',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffuncs_2ecpp_28',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
+ ['xb_5ftest_5flinklist_2ecpp_29',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock_2ecpp_30',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock2_2ecpp_31',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
+ ['xb_5ftest_5flog_2ecpp_32',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
+ ['xb_5ftest_5fmdx_2ecpp_33',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fndx_2ecpp_34',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fndx2_2ecpp_35',['xb_test_ndx2.cpp',['../xb__test__ndx2_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,'']]],
+ ['xb_5fzap_2ecpp_42',['xb_zap.cpp',['../xb__zap_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,'']]],
+ ['xbcrix_2ecpp_46',['xbcrix.cpp',['../xbcrix_8cpp.html',1,'']]],
+ ['xbcrtbl_2ecpp_47',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
+ ['xbdate_2ecpp_48',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
+ ['xbdate_2eh_49',['xbdate.h',['../xbdate_8h.html',1,'']]],
+ ['xbdbf_2ecpp_50',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
+ ['xbdbf_2eh_51',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
+ ['xbdbf3_2ecpp_52',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
+ ['xbdbf4_2ecpp_53',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
+ ['xbdrpix_2ecpp_54',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
+ ['xbdrptbl_2ecpp_55',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
+ ['xbexp_2ecpp_56',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
+ ['xbexp_2eh_57',['xbexp.h',['../xbexp_8h.html',1,'']]],
+ ['xbexpnode_2ecpp_58',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
+ ['xbexpnode_2eh_59',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
+ ['xbfields_2ecpp_60',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
+ ['xbfile_2ecpp_61',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
+ ['xbfile_2eh_62',['xbfile.h',['../xbfile_8h.html',1,'']]],
+ ['xbfilter_2ecpp_63',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
+ ['xbfilter_2eh_64',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
+ ['xbfuncs_2ecpp_65',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
+ ['xbindex_2eh_66',['xbindex.h',['../xbindex_8h.html',1,'']]],
+ ['xbinsert_2ecpp_67',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
+ ['xbixbase_2ecpp_68',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
+ ['xbixmdx_2ecpp_69',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
+ ['xbixndx_2ecpp_70',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
+ ['xblnklst_2eh_71',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
+ ['xblnklstord_2eh_72',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
+ ['xblnknod_2eh_73',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
+ ['xblog_2ecpp_74',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
+ ['xblog_2eh_75',['xblog.h',['../xblog_8h.html',1,'']]],
+ ['xbmemo_2ecpp_76',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
+ ['xbmemo_2eh_77',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
+ ['xbmemo3_2ecpp_78',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
+ ['xbmemo4_2ecpp_79',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
+ ['xbretcod_2eh_80',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
+ ['xbset_2ecpp_81',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
+ ['xbsql_2ecpp_82',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
+ ['xbsql_2eh_83',['xbsql.h',['../xbsql_8h.html',1,'']]],
+ ['xbssv_2ecpp_84',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
+ ['xbssv_2eh_85',['xbssv.h',['../xbssv_8h.html',1,'']]],
+ ['xbstring_2ecpp_86',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
+ ['xbstring_2eh_87',['xbstring.h',['../xbstring_8h.html',1,'']]],
+ ['xbtag_2ecpp_88',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
+ ['xbtag_2eh_89',['xbtag.h',['../xbtag_8h.html',1,'']]],
+ ['xbtblmgr_2ecpp_90',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
+ ['xbtblmgr_2eh_91',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
+ ['xbtypes_2eh_92',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
+ ['xbuda_2ecpp_93',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
+ ['xbuda_2eh_94',['xbuda.h',['../xbuda_8h.html',1,'']]],
+ ['xbxbase_2ecpp_95',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
+ ['xbxbase_2eh_96',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.html
new file mode 100644
index 0000000..2d2d950
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_0.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="functions_0.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.html
new file mode 100644
index 0000000..3b96b90
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_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="functions_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.js
new file mode 100644
index 0000000..a3b8ce1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['bitdump_0',['BitDump',['../classxb_1_1xbSsv.html#a8551b15a3ce4fa2a40d698db01f4a9ae',1,'xb::xbSsv::BitDump(unsigned char c) const'],['../classxb_1_1xbSsv.html#aba1395b8e4c7f28c3614061de6e49190',1,'xb::xbSsv::BitDump(char c) const']]],
+ ['bitset_1',['BitSet',['../classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72',1,'xb::xbSsv']]],
+ ['blankrecord_2',['BlankRecord',['../classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6',1,'xb::xbDbf']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.html
new file mode 100644
index 0000000..f0fe489
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_10.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="functions_10.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.html
new file mode 100644
index 0000000..fb95b05
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.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="functions_11.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.js
new file mode 100644
index 0000000..02f57b9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_11.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['testmethod_0',['TestMethod',['../tstfuncs_8cpp.html#a265547b80a3aef5836952bede5288e2c',1,'TestMethod(xbInt16 PrintOption, const char *title, const xbString &amp;result, const char *expectedResult, size_t expectedLen):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#a9c27703ef863c9d29680844fc5124953',1,'TestMethod(xbInt16 PrintOption, const char *title, char result, char expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#ae6536e920580382389126d5f66655f90',1,'TestMethod(xbInt16 PrintOption, const char *title, xbInt32 result, xbInt32 expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#a000fca67bc0fffea3d3da7a5317a06e4',1,'TestMethod(xbInt16 PrintOption, const char *title, xbUInt64 result, xbUInt64 expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#a663f3dd7bd8574a35c1b1b9a22081c6d',1,'TestMethod(xbInt16 PrintOption, const char *title, xbFloat result, xbFloat expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#af1c78fb72bcd39eb86f11aa2887fe62c',1,'TestMethod(xbInt16 PrintOption, const char *title, xbDouble result, xbDouble expectedResult):&#160;tstfuncs.cpp'],['../tstfuncs_8cpp.html#ac64a0bed74ba10b638456709f128f893',1,'TestMethod(xbInt16 PrintOption, const char *title, xbDouble result, xbDouble expectedResult, xbDouble dEpsilon):&#160;tstfuncs.cpp'],['../xb__test__expression_8cpp.html#ad52c27685018dda7c5c4b26fb445860e',1,'TestMethod(xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char *title, const xbString &amp;sExpression, const char *sExpectedResult, xbInt16 iExpectedResultLen):&#160;xb_test_expression.cpp'],['../xb__test__expression_8cpp.html#a7030149316fe8d8195ffbb18132e0cf9',1,'TestMethod(xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char *title, const xbString &amp;sExpression, xbDouble dExpectedResult):&#160;xb_test_expression.cpp'],['../xb__test__expression_8cpp.html#a10e637a203841bd2b6a92e6217509e23',1,'TestMethod(xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char *title, const xbString &amp;sExpression, xbDate dtExpectedResult):&#160;xb_test_expression.cpp'],['../xb__test__expression_8cpp.html#aa385c5f9fa8b4cfd63763b4a28852b64',1,'TestMethod(xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char *title, const xbString &amp;sExpression, xbBool bExpectedResult):&#160;xb_test_expression.cpp']]],
+ ['testtokenmethod_1',['TestTokenMethod',['../xb__test__expression_8cpp.html#a440d64b55abaa9e14e73ecc132d1084d',1,'xb_test_expression.cpp']]],
+ ['testweight_2',['TestWeight',['../xb__test__expression_8cpp.html#af56b6dbc38e0d23caaf6531526315379',1,'xb_test_expression.cpp']]],
+ ['tolowercase_3',['ToLowerCase',['../classxb_1_1xbString.html#a602cac1a6ef3f6b52f587ac4c0ef4fb2',1,'xb::xbString']]],
+ ['touppercase_4',['ToUpperCase',['../classxb_1_1xbString.html#a68001d0a44e6b4fe61e29a4e41ded9d4',1,'xb::xbString']]],
+ ['trim_5',['Trim',['../classxb_1_1xbString.html#abc9bd33687d4e03ca52d77885721d626',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.html
new file mode 100644
index 0000000..292fd4a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.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="functions_12.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.js
new file mode 100644
index 0000000..80ff6f4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_12.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['undeleteallrecords_0',['UndeleteAllRecords',['../classxb_1_1xbDbf.html#ae94cb1bf9f75184f39d9e1a80ab49d4a',1,'xb::xbDbf']]],
+ ['undeleterecord_1',['UndeleteRecord',['../classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0',1,'xb::xbDbf']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.html
new file mode 100644
index 0000000..5fcdf9c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.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="functions_13.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.js
new file mode 100644
index 0000000..9ea4de7
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_13.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['validateschema_0',['ValidateSchema',['../classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d',1,'xb::xbDbf']]],
+ ['validlogicalvalue_1',['ValidLogicalValue',['../classxb_1_1xbString.html#a72b16c15fd8822efaa5f158c34df7b1e',1,'xb::xbString']]],
+ ['validnumericvalue_2',['ValidNumericValue',['../classxb_1_1xbString.html#aeed920d2a25111f776ddde2d530eb81b',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.html
new file mode 100644
index 0000000..82c70b0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.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="functions_14.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.js
new file mode 100644
index 0000000..c9794d0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_14.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['writeblock_0',['WriteBlock',['../classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c',1,'xb::xbFile']]],
+ ['writeheader_1',['WriteHeader',['../classxb_1_1xbDbf.html#a44e1410109ef7b3d11a6af4b704b62b2',1,'xb::xbDbf']]],
+ ['writelogbytes_2',['WriteLogBytes',['../classxb_1_1xbXBase.html#a0dff00b9ee3c288841e137ca01168116',1,'xb::xbXBase']]],
+ ['writelogmessage_3',['WriteLogMessage',['../classxb_1_1xbXBase.html#a9ca5be73abffd0fdd18bdc799877272a',1,'xb::xbXBase']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.html
new file mode 100644
index 0000000..050aa25
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_15.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="functions_15.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.html
new file mode 100644
index 0000000..1d75c78
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.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="functions_16.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.js
new file mode 100644
index 0000000..5979b24
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_16.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['yearof_0',['YearOf',['../classxb_1_1xbDate.html#a31057dfaa36389a16e40e3db82c46262',1,'xb::xbDate']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.html
new file mode 100644
index 0000000..c099015
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.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="functions_17.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.js
new file mode 100644
index 0000000..7108002
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_17.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['zap_0',['Zap',['../classxb_1_1xbDbf.html#a8ed0693b10b95aaa4e46037758d160ed',1,'xb::xbDbf']]],
+ ['zapchar_1',['ZapChar',['../classxb_1_1xbString.html#a2fd30956a26a260d1ef6fdbe73dd93f9',1,'xb::xbString']]],
+ ['zapleadingchar_2',['ZapLeadingChar',['../classxb_1_1xbString.html#addc3a470f6cd85d4c21bf9da38cf5ac9',1,'xb::xbString']]],
+ ['zaptrailingchar_3',['ZapTrailingChar',['../classxb_1_1xbString.html#afe3415bfa2e1089b792aeda0462fb99e',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.html
new file mode 100644
index 0000000..bc92634
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.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="functions_18.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.js
new file mode 100644
index 0000000..d44ee63
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_18.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['_7exbdate_0',['~xbDate',['../classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37',1,'xb::xbDate']]],
+ ['_7exbdbf_1',['~xbDbf',['../classxb_1_1xbDbf.html#a7eb87521fba8a939c613056d9918d880',1,'xb::xbDbf']]],
+ ['_7exbfile_2',['~xbFile',['../classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90',1,'xb::xbFile']]],
+ ['_7exbstring_3',['~xbString',['../classxb_1_1xbString.html#a10a6549efab02bc76ab33b15916b1eb1',1,'xb::xbString']]],
+ ['_7exbtblmgr_4',['~xbTblMgr',['../classxb_1_1xbTblMgr.html#aad6be32d7b3378c71d47fa27ebfe6cbf',1,'xb::xbTblMgr']]],
+ ['_7exbxbase_5',['~xbXBase',['../classxb_1_1xbXBase.html#a204f8634894ac2066d3209117803306d',1,'xb::xbXBase']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.html
new file mode 100644
index 0000000..1f16d2a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_2.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="functions_2.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.html
new file mode 100644
index 0000000..0b37ee2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_3.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="functions_3.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.html
new file mode 100644
index 0000000..0eaf2b4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_4.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="functions_4.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.html
new file mode 100644
index 0000000..eaa2769
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.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="functions_5.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.js
new file mode 100644
index 0000000..d143ad3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_5.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['fileexists_0',['FileExists',['../classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006',1,'xb::xbFile::FileExists() const'],['../classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd',1,'xb::xbFile::FileExists(xbInt16 iOption) const'],['../classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94',1,'xb::xbFile::FileExists(const xbString &amp;sFileName) const'],['../classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148',1,'xb::xbFile::FileExists(const xbString &amp;sFileName, xbInt16 iOption) const']]],
+ ['fileisopen_1',['FileIsOpen',['../classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59',1,'xb::xbFile']]],
+ ['flushlog_2',['FlushLog',['../classxb_1_1xbXBase.html#a5a5ecaed9777978344902446c9ae3b8e',1,'xb::xbXBase']]],
+ ['formatdate_3',['FormatDate',['../classxb_1_1xbDate.html#a01de44dc869f7db99f33046fc91f2c6a',1,'xb::xbDate']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.html
new file mode 100644
index 0000000..25d1cc8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_6.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="functions_6.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.html
new file mode 100644
index 0000000..b6392ea
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.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="functions_7.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.js
new file mode 100644
index 0000000..6a2cc28
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['hasalphachars_0',['HasAlphaChars',['../classxb_1_1xbString.html#aa13f6b72e5a529eab04545892bbc98b4',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.html
new file mode 100644
index 0000000..ecf6a89
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_8.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="functions_8.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.html
new file mode 100644
index 0000000..cd70e2b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.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="functions_9.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.js
new file mode 100644
index 0000000..bd77163
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_9.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['juliandays_0',['JulianDays',['../classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7',1,'xb::xbDate']]],
+ ['jultodate8_1',['JulToDate8',['../classxb_1_1xbDate.html#a9d28b2a46d8aaa284b92f44eeb96b2ff',1,'xb::xbDate']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.html
new file mode 100644
index 0000000..d2a3de9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_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="functions_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.js
new file mode 100644
index 0000000..2d4005e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_a.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['lastdayofmonth_0',['LastDayOfMonth',['../classxb_1_1xbDate.html#a15847866bb7642aa42bc254e0cf2038a',1,'xb::xbDate']]],
+ ['left_1',['Left',['../classxb_1_1xbString.html#acdc3a6d6955b99f0a6b1d181fb3098b9',1,'xb::xbString']]],
+ ['len_2',['Len',['../classxb_1_1xbString.html#a998b240eedac311aea5843047f55649b',1,'xb::xbString']]],
+ ['ltrim_3',['Ltrim',['../classxb_1_1xbString.html#a90e0d0be4fd0d82dd2ebbe689adf18ee',1,'xb::xbString']]],
+ ['ltrunc_4',['Ltrunc',['../classxb_1_1xbString.html#a656f5854f74064b7257ff96d96dfb68b',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.html
new file mode 100644
index 0000000..e6f34bb
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_b.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="functions_b.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.html
new file mode 100644
index 0000000..87b4ce2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.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="functions_c.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.js
new file mode 100644
index 0000000..973aa37
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['namesuffixmissing_0',['NameSuffixMissing',['../classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e',1,'xb::xbFile']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.html
new file mode 100644
index 0000000..ada2b81
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.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="functions_d.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.js
new file mode 100644
index 0000000..a292a5b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_d.js
@@ -0,0 +1,21 @@
+var searchData=
+[
+ ['open_0',['Open',['../classxb_1_1xbDbf.html#ae388c5e02adc86e6e9988e697e061610',1,'xb::xbDbf::Open(const xbString &amp;sTableName, const xbString &amp;sAlias)'],['../classxb_1_1xbDbf.html#a69824d7bafc3f5a15bf7d09f2f511768',1,'xb::xbDbf::Open(const xbString &amp;sTableName)'],['../classxb_1_1xbXBase.html#ab35cec5ac8f0fa95f10653ca7ac817f6',1,'xb::xbXBase::Open()'],['../classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf',1,'xb::xbDbf::Open()'],['../classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a',1,'xb::xbXBase::Open(const xbString &amp;sTableName, xbInt16 &amp;iRc)']]],
+ ['openhighestversion_1',['OpenHighestVersion',['../classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b',1,'xb::xbXBase::OpenHighestVersion(const xbString &amp;sTableName, const xbString &amp;sAlias, xbDbf &amp;dbf, int dummy)'],['../classxb_1_1xbXBase.html#afa7bbac08a4601f49cd53b457196ee0e',1,'xb::xbXBase::OpenHighestVersion(const xbString &amp;sTableName, const xbString &amp;sAlias, xbDbf **dbf)']]],
+ ['operator_20const_20char_20_2a_2',['operator const char *',['../classxb_1_1xbString.html#a545df0ae9590f0ea5844a165e38a6388',1,'xb::xbString']]],
+ ['operator_21_3d_3',['operator!=',['../classxb_1_1xbDate.html#ac3aaf8997fc0c36676085e7741f33a8a',1,'xb::xbDate::operator!=()'],['../classxb_1_1xbString.html#acf89691607050b0505dc6af28d059c38',1,'xb::xbString::operator!=(const xbString &amp;) const'],['../classxb_1_1xbString.html#a822448f2a0ce653473d4c1de5763a3a6',1,'xb::xbString::operator!=(const char *) const']]],
+ ['operator_2b_4',['operator+',['../classxb_1_1xbString.html#aab556e8c3cb478dd95643327d72a48bd',1,'xb::xbString::operator+(const char *s)'],['../classxb_1_1xbString.html#af559654baba81c3c0c19823c0b7a69d3',1,'xb::xbString::operator+(const char c)'],['../classxb_1_1xbString.html#a1f289d577ba90c500bc1be3ec7bb0206',1,'xb::xbString::operator+(const xbString &amp;s)'],['../classxb_1_1xbDate.html#ad09609bf78cf038886a4f9cd19423f9c',1,'xb::xbDate::operator+(xbInt32 i)']]],
+ ['operator_2b_2b_5',['operator++',['../classxb_1_1xbDate.html#a1c7d9e3718c43df18b21646072c8605e',1,'xb::xbDate']]],
+ ['operator_2b_3d_6',['operator+=',['../classxb_1_1xbDate.html#a947ba156d04fe063aaa4c9964ae5d163',1,'xb::xbDate::operator+=()'],['../classxb_1_1xbString.html#a76a47af239797a266ada6141c150001c',1,'xb::xbString::operator+=(const xbString &amp;s)'],['../classxb_1_1xbString.html#ab319120dbad9107e1e7090139c956100',1,'xb::xbString::operator+=(const char *s)'],['../classxb_1_1xbString.html#ae12f45b8be84e438e032c0b860f985c6',1,'xb::xbString::operator+=(char c)']]],
+ ['operator_2d_7',['operator-',['../classxb_1_1xbString.html#a06abec236b95f6933ba17bf67089f7cf',1,'xb::xbString::operator-()'],['../classxb_1_1xbDate.html#a3f3a8802c96098c85aa8d0e19717a979',1,'xb::xbDate::operator-(const xbDate &amp;) const'],['../classxb_1_1xbDate.html#a73ff5c037046ac0a0bb7d73f74e25cbb',1,'xb::xbDate::operator-(xbInt32 i)']]],
+ ['operator_2d_2d_8',['operator--',['../classxb_1_1xbDate.html#ae2b33dfee60d324916d833b2098b5a6b',1,'xb::xbDate']]],
+ ['operator_2d_3d_9',['operator-=',['../classxb_1_1xbDate.html#a4a8f207d759540114373f5e9d6d375f7',1,'xb::xbDate::operator-=()'],['../classxb_1_1xbString.html#aa7f4db1b4eae9dfad46346db6e17ea15',1,'xb::xbString::operator-=(const xbString &amp;s)'],['../classxb_1_1xbString.html#aaae97e6eda3d18c9f463993ade985bf4',1,'xb::xbString::operator-=(const char *s)'],['../classxb_1_1xbString.html#adcafd019df23bb5724c46e34f3f31194',1,'xb::xbString::operator-=(char c)']]],
+ ['operator_3c_10',['operator&lt;',['../classxb_1_1xbDate.html#a11f09d97ed527e7ef00ba6f17b9fb02c',1,'xb::xbDate::operator&lt;()'],['../classxb_1_1xbString.html#a71c7aafa0d523c72cbe58c474be2270a',1,'xb::xbString::operator&lt;()']]],
+ ['operator_3c_3c_11',['operator&lt;&lt;',['../namespacexb.html#ad27f348219e895c44f74addba8e1889a',1,'xb']]],
+ ['operator_3c_3d_12',['operator&lt;=',['../classxb_1_1xbString.html#a461f245e60cddfdf5f78a972a46e5880',1,'xb::xbString::operator&lt;=()'],['../classxb_1_1xbDate.html#a6d8fa4df4664f3fd8d4cc15e77f6d046',1,'xb::xbDate::operator&lt;=(const xbDate &amp;) const']]],
+ ['operator_3d_13',['operator=',['../classxb_1_1xbDate.html#a2e33ad9415c32e820e08fd8084198690',1,'xb::xbDate::operator=()'],['../classxb_1_1xbString.html#a4f69d11cbd43edf71725a606d0ca8f40',1,'xb::xbString::operator=(const xbString &amp;s)'],['../classxb_1_1xbString.html#a84ae7d16c5d73c5aa2270aa9895a7f7c',1,'xb::xbString::operator=(const char *s)']]],
+ ['operator_3d_3d_14',['operator==',['../classxb_1_1xbDate.html#aaaf98c1a672066021895f0953b6e94d0',1,'xb::xbDate::operator==()'],['../classxb_1_1xbString.html#a2df3ed2fc9456214f5fd2fcf77b69bc1',1,'xb::xbString::operator==(const xbString &amp;) const'],['../classxb_1_1xbString.html#a94031269af3c433393d4cf0ff9b4be38',1,'xb::xbString::operator==(const char *) const']]],
+ ['operator_3e_15',['operator&gt;',['../classxb_1_1xbDate.html#a744031c4031d6ec4595d34acbd1c5860',1,'xb::xbDate::operator&gt;()'],['../classxb_1_1xbString.html#ae46f6a45da5686b607a4edf2786a2fff',1,'xb::xbString::operator&gt;()']]],
+ ['operator_3e_3d_16',['operator&gt;=',['../classxb_1_1xbDate.html#a1d81959ea55440588068ea7f82617c99',1,'xb::xbDate::operator&gt;=()'],['../classxb_1_1xbString.html#a8f16643cb7ba3ee9cf685422c9ea0e67',1,'xb::xbString::operator&gt;=(const xbString &amp;) const']]],
+ ['operator_5b_5d_17',['operator[]',['../classxb_1_1xbString.html#abe45e463226ac8e18550ced18c5a9df3',1,'xb::xbString::operator[](xbUInt32 n) const'],['../classxb_1_1xbString.html#a4deaa68d9571753349c29baacb5613e8',1,'xb::xbString::operator[](xbInt32 n) const']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.html
new file mode 100644
index 0000000..1297715
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_e.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="functions_e.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.html
new file mode 100644
index 0000000..d2ae3cf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.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="functions_f.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.js
new file mode 100644
index 0000000..cdd92e0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/functions_f.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+ ['readblock_0',['ReadBlock',['../classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825',1,'xb::xbFile::ReadBlock(xbUInt32 ulBlockNo, size_t readSize, void *buf)'],['../classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485',1,'xb::xbFile::ReadBlock(xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf)']]],
+ ['readheader_1',['ReadHeader',['../classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9',1,'xb::xbDbf']]],
+ ['recorddeleted_2',['RecordDeleted',['../classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6',1,'xb::xbDbf']]],
+ ['remove_3',['Remove',['../classxb_1_1xbString.html#afaac65eaa6d9ef1596d6a0e7b91ed0f2',1,'xb::xbString']]],
+ ['removetblfromtbllist_4',['RemoveTblFromTblList',['../classxb_1_1xbTblMgr.html#ac8eaef41acf08911b90f900aac8e70af',1,'xb::xbTblMgr::RemoveTblFromTblList(const xbString &amp;sTblAlias)'],['../classxb_1_1xbTblMgr.html#a3d82b6e73d5c0bc8cac22b9a260389c1',1,'xb::xbTblMgr::RemoveTblFromTblList(xbDbf *d)']]],
+ ['rename_5',['Rename',['../classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708',1,'xb::xbDbf']]],
+ ['replace_6',['Replace',['../classxb_1_1xbString.html#ac721d643c60b5c5acf60c2bce99596fa',1,'xb::xbString']]],
+ ['resize_7',['Resize',['../classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e',1,'xb::xbString']]],
+ ['rtrim_8',['Rtrim',['../classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/mag_sel.svg b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/mag_sel.svg
new file mode 100644
index 0000000..03626f6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/mag_sel.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="svg2"
+ width="20"
+ height="19"
+ viewBox="0 0 20 19"
+ sodipodi:docname="mag_sel.svg"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="2096"
+ id="namedview4"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="32"
+ inkscape:cx="5.9792688"
+ inkscape:cy="1.1436277"
+ inkscape:window-x="1920"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2" />
+ <circle
+ style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path4611"
+ cx="5.5"
+ cy="8.5"
+ r="3.5" />
+ <path
+ style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11,7 13.5,10 16,7 Z"
+ id="path4609"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.1085854,11.109059 2.7823556,2.782356"
+ id="path4630"
+ inkscape:connector-curvature="0" />
+</svg>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.html
new file mode 100644
index 0000000..c6a0d24
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.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="namespaces_0.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.js
new file mode 100644
index 0000000..e3c1eff
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/namespaces_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['xb_0',['xb',['../namespacexb.html',1,'']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/nomatches.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/nomatches.html
new file mode 100644
index 0000000..2b9360b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/nomatches.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD 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"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.html
new file mode 100644
index 0000000..28d304b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.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="related_0.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.js
new file mode 100644
index 0000000..ff26086
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['operator_3c_3c_0',['operator&lt;&lt;',['../classxb_1_1xbString.html#a3fa915061156521e9dd772a8d7e5f8fb',1,'xb::xbString']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.html
new file mode 100644
index 0000000..64586cd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_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="related_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.js
new file mode 100644
index 0000000..ffc5eef
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/related_1.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['xbbcd_0',['xbBcd',['../classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add',1,'xb::xbXBase']]],
+ ['xbexp_1',['xbExp',['../classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc',1,'xb::xbXBase']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.css b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.css
new file mode 100644
index 0000000..648a792
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.css
@@ -0,0 +1,263 @@
+/*---------------- Search Box */
+
+#MSearchBox {
+ white-space : nowrap;
+ background: white;
+ border-radius: 0.65em;
+ box-shadow: inset 0.5px 0.5px 3px 0px #555;
+ z-index: 102;
+}
+
+#MSearchBox .left {
+ display: inline-block;
+ vertical-align: middle;
+ height: 1.4em;
+}
+
+#MSearchSelect {
+ display: inline-block;
+ vertical-align: middle;
+ height: 19px;
+ padding: 0 0 0 0.3em;
+ margin: 0;
+}
+
+#MSearchField {
+ display: inline-block;
+ vertical-align: middle;
+ width: 7.5em;
+ height: 19px;
+ margin: 0 0.15em;
+ padding: 0;
+ line-height: 1em;
+ border:none;
+ color: #909090;
+ outline: none;
+ font-family: Arial, Verdana, sans-serif;
+ -webkit-border-radius: 0px;
+ border-radius: 0px;
+ background: none;
+}
+
+@media(hover: none) {
+ /* to avoid zooming on iOS */
+ #MSearchField {
+ font-size: 16px;
+ }
+}
+
+#MSearchBox .right {
+ display: inline-block;
+ vertical-align: middle;
+ width: 1.4em;
+ height: 1.4em;
+}
+
+#MSearchClose {
+ display: none;
+ font-size: inherit;
+ background : none;
+ border: none;
+ margin: 0;
+ padding: 0;
+ outline: none;
+
+}
+
+#MSearchCloseImg {
+ height: 1.4em;
+ padding: 0.3em;
+ margin: 0;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+#main-menu > li:last-child {
+ /* This <li> object is the parent of the search bar */
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 36px;
+ margin-right: 1em;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #90A5CE;
+ background-color: #F9FAFC;
+ z-index: 10001;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: #3D578C;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ /*width: 60ex;*/
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: #EEF1F7;
+ z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.SRResult {
+ display: none;
+}
+
+div.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+ background-color: #F0F3F8;
+}
+
+.pages b {
+ color: white;
+ padding: 5px 5px 3px 5px;
+ background-image: url("../tab_a.png");
+ background-repeat: repeat-x;
+ text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+ line-height: 17px;
+ margin-left: 4px;
+ text-decoration: none;
+}
+
+.hl {
+ font-weight: bold;
+}
+
+#searchresults {
+ margin-bottom: 20px;
+}
+
+.searchpages {
+ margin-top: 10px;
+}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.js
new file mode 100644
index 0000000..ac8055d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search.js
@@ -0,0 +1,794 @@
+/*
+ @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
+ */
+function convertToId(search)
+{
+ var result = '';
+ for (i=0;i<search.length;i++)
+ {
+ var c = search.charAt(i);
+ var cn = c.charCodeAt(0);
+ if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+ {
+ result+=c;
+ }
+ else if (cn<16)
+ {
+ result+="_0"+cn.toString(16);
+ }
+ else
+ {
+ result+="_"+cn.toString(16);
+ }
+ }
+ return result;
+}
+
+function getXPos(item)
+{
+ var x = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ x += item.offsetLeft;
+ item = item.offsetParent;
+ }
+ }
+ return x;
+}
+
+function getYPos(item)
+{
+ var y = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ y += item.offsetTop;
+ item = item.offsetParent;
+ }
+ }
+ return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+ Parameters:
+ name - The name of the global variable that will be
+ storing this instance. Is needed to be able to set timeouts.
+ resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, label, extension)
+{
+ if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
+ if (!extension || extension == "") { extension = ".html"; }
+
+ // ---------- Instance variables
+ this.name = name;
+ this.resultsPath = resultsPath;
+ this.keyTimeout = 0;
+ this.keyTimeoutLength = 500;
+ this.closeSelectionTimeout = 300;
+ this.lastSearchValue = "";
+ this.lastResultsPage = "";
+ this.hideTimeout = 0;
+ this.searchIndex = 0;
+ this.searchActive = false;
+ this.searchLabel = label;
+ this.extension = extension;
+
+ // ----------- DOM Elements
+
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); }
+
+ this.DOMSearchSelect = function()
+ { return document.getElementById("MSearchSelect"); }
+
+ this.DOMSearchSelectWindow = function()
+ { return document.getElementById("MSearchSelectWindow"); }
+
+ this.DOMPopupSearchResults = function()
+ { return document.getElementById("MSearchResults"); }
+
+ this.DOMPopupSearchResultsWindow = function()
+ { return document.getElementById("MSearchResultsWindow"); }
+
+ this.DOMSearchClose = function()
+ { return document.getElementById("MSearchClose"); }
+
+ this.DOMSearchBox = function()
+ { return document.getElementById("MSearchBox"); }
+
+ // ------------ Event Handlers
+
+ // Called when focus is added or removed from the search field.
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ }
+
+ this.OnSearchSelectShow = function()
+ {
+ var searchSelectWindow = this.DOMSearchSelectWindow();
+ var searchField = this.DOMSearchSelect();
+
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+
+ // stop selection hide timer
+ if (this.hideTimeout)
+ {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout=0;
+ }
+ return false; // to avoid "image drag" default event
+ }
+
+ this.OnSearchSelectHide = function()
+ {
+ this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+ this.closeSelectionTimeout);
+ }
+
+ // Called when the content of the search field is changed.
+ this.OnSearchFieldChange = function(evt)
+ {
+ if (this.keyTimeout) // kill running timer
+ {
+ clearTimeout(this.keyTimeout);
+ this.keyTimeout = 0;
+ }
+
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 || e.keyCode==13)
+ {
+ if (e.shiftKey==1)
+ {
+ this.OnSearchSelectShow();
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ child.focus();
+ return;
+ }
+ }
+ return;
+ }
+ else
+ {
+ window.frames.MSearchResults.postMessage("take_focus", "*");
+ }
+ }
+ else if (e.keyCode==27) // Escape out of the search field
+ {
+ this.DOMSearchField().blur();
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ this.Activate(false);
+ return;
+ }
+
+ // strip whitespaces
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != this.lastSearchValue) // search value has changed
+ {
+ if (searchValue != "") // non-empty search
+ {
+ // set timer for search update
+ this.keyTimeout = setTimeout(this.name + '.Search()',
+ this.keyTimeoutLength);
+ }
+ else // empty search field
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ }
+ }
+ }
+
+ this.SelectItemCount = function(id)
+ {
+ var count=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ this.SelectItemSet = function(id)
+ {
+ var i,j=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ var node = child.firstChild;
+ if (j==id)
+ {
+ node.innerHTML='&#8226;';
+ }
+ else
+ {
+ node.innerHTML='&#160;';
+ }
+ j++;
+ }
+ }
+ }
+
+ // Called when an search filter selection is made.
+ // set item with index id as the active item
+ this.OnSelectItem = function(id)
+ {
+ this.searchIndex = id;
+ this.SelectItemSet(id);
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+ if (searchValue!="" && this.searchActive) // something was found -> do a search
+ {
+ this.Search();
+ }
+ }
+
+ this.OnSearchSelectKey = function(evt)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+ {
+ this.searchIndex++;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==38 && this.searchIndex>0) // Up
+ {
+ this.searchIndex--;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==13 || e.keyCode==27)
+ {
+ this.OnSelectItem(this.searchIndex);
+ this.CloseSelectionWindow();
+ this.DOMSearchField().focus();
+ }
+ return false;
+ }
+
+ // --------- Actions
+
+ // Closes the results window.
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.Activate(false);
+ }
+
+ this.CloseSelectionWindow = function()
+ {
+ this.DOMSearchSelectWindow().style.display = 'none';
+ }
+
+ // Performs a search.
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ // strip leading whitespace
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+ var code = searchValue.toLowerCase().charCodeAt(0);
+ var idxChar = searchValue.substr(0, 1).toLowerCase();
+ if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+ {
+ idxChar = searchValue.substr(0, 2);
+ }
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+ if (idx!=-1)
+ {
+ var hexCode=idx.toString(16);
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension;
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else // nothing available for this search term
+ {
+ resultsPage = this.resultsPath + '/nomatches' + this.extension;
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ }
+
+ window.frames.MSearchResults.location = resultsPageWithSearch;
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (domPopupSearchResultsWindow.style.display!='block')
+ {
+ var domSearchBox = this.DOMSearchBox();
+ this.DOMSearchClose().style.display = 'inline-block';
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+ var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
+ domPopupSearchResultsWindow.style.display = 'block';
+ left -= domPopupSearchResults.offsetWidth;
+ var maxWidth = document.body.clientWidth;
+ var width = 400;
+ if (left<10) left=10;
+ if (width+left+8>maxWidth) width=maxWidth-left-8;
+ domPopupSearchResultsWindow.style.top = top + 'px';
+ domPopupSearchResultsWindow.style.left = left + 'px';
+ domPopupSearchResultsWindow.style.width = width + 'px';
+ }
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ }
+
+ // -------- Activation Functions
+
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
+ this.Activate = function(isActive)
+ {
+ if (isActive || // open it
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
+ )
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+ {
+ searchField.value = '';
+ this.searchActive = true;
+ }
+ }
+ else if (!isActive) // directly remove the panel
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ this.searchActive = false;
+ this.lastSearchValue = ''
+ this.lastResultsPage = '';
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+ // The number of matches from the last run of <Search()>.
+ this.lastMatchCount = 0;
+ this.lastKey = 0;
+ this.repeatOn = false;
+
+ // Toggles the visibility of the passed element ID.
+ this.FindChildElement = function(id)
+ {
+ var parentElement = document.getElementById(id);
+ var element = parentElement.firstChild;
+
+ while (element && element!=parentElement)
+ {
+ if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren')
+ {
+ return element;
+ }
+
+ if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes())
+ {
+ element = element.firstChild;
+ }
+ else if (element.nextSibling)
+ {
+ element = element.nextSibling;
+ }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element!=parentElement && !element.nextSibling);
+
+ if (element && element!=parentElement)
+ {
+ element = element.nextSibling;
+ }
+ }
+ }
+ }
+
+ this.Toggle = function(id)
+ {
+ var element = this.FindChildElement(id);
+ if (element)
+ {
+ if (element.style.display == 'block')
+ {
+ element.style.display = 'none';
+ }
+ else
+ {
+ element.style.display = 'block';
+ }
+ }
+ }
+
+ // Searches for the passed string. If there is no parameter,
+ // it takes it from the URL query.
+ //
+ // Always returns true, since other documents may try to call it
+ // and that may or may not be possible.
+ this.Search = function(search)
+ {
+ if (!search) // get search word from URL
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading '?'
+ search = unescape(search);
+ }
+
+ search = search.replace(/^ +/, ""); // strip leading spaces
+ search = search.replace(/ +$/, ""); // strip trailing spaces
+ search = search.toLowerCase();
+ search = convertToId(search);
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+ if (search.length<=rowMatchName.length &&
+ rowMatchName.substr(0, search.length)==search)
+ {
+ row.style.display = 'block';
+ matches++;
+ }
+ else
+ {
+ row.style.display = 'none';
+ }
+ }
+ i++;
+ }
+ document.getElementById("Searching").style.display='none';
+ if (matches == 0) // no results
+ {
+ document.getElementById("NoMatches").style.display='block';
+ }
+ else // at least one result
+ {
+ document.getElementById("NoMatches").style.display='none';
+ }
+ this.lastMatchCount = matches;
+ return true;
+ }
+
+ // return the first item with index index or higher that is visible
+ this.NavNext = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index++;
+ }
+ return focusItem;
+ }
+
+ this.NavPrev = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index--;
+ }
+ return focusItem;
+ }
+
+ this.ProcessKeys = function(e)
+ {
+ if (e.type == "keydown")
+ {
+ this.repeatOn = false;
+ this.lastKey = e.keyCode;
+ }
+ else if (e.type == "keypress")
+ {
+ if (!this.repeatOn)
+ {
+ if (this.lastKey) this.repeatOn = true;
+ return false; // ignore first keypress after keydown
+ }
+ }
+ else if (e.type == "keyup")
+ {
+ this.lastKey = 0;
+ this.repeatOn = false;
+ }
+ return this.lastKey!=0;
+ }
+
+ this.Nav = function(evt,itemIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ var newIndex = itemIndex-1;
+ var focusItem = this.NavPrev(newIndex);
+ if (focusItem)
+ {
+ var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+ if (child && child.style.display == 'block') // children visible
+ {
+ var n=0;
+ var tmpElem;
+ while (1) // search for last child
+ {
+ tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+ if (tmpElem)
+ {
+ focusItem = tmpElem;
+ }
+ else // found it!
+ {
+ break;
+ }
+ n++;
+ }
+ }
+ }
+ if (focusItem)
+ {
+ focusItem.focus();
+ }
+ else // return focus to search field
+ {
+ parent.document.getElementById("MSearchField").focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = itemIndex+1;
+ var focusItem;
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem && elem.style.display == 'block') // children visible
+ {
+ focusItem = document.getElementById('Item'+itemIndex+'_c0');
+ }
+ if (!focusItem) focusItem = this.NavNext(newIndex);
+ if (focusItem) focusItem.focus();
+ }
+ else if (this.lastKey==39) // Right
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'block';
+ }
+ else if (this.lastKey==37) // Left
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'none';
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+
+ this.NavChild = function(evt,itemIndex,childIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ if (childIndex>0)
+ {
+ var newIndex = childIndex-1;
+ document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+ }
+ else // already at first child, jump to parent
+ {
+ document.getElementById('Item'+itemIndex).focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = childIndex+1;
+ var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+ if (!elem) // last child, jump to parent next parent
+ {
+ elem = this.NavNext(itemIndex+1);
+ }
+ if (elem)
+ {
+ elem.focus();
+ }
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+function setKeyActions(elem,action)
+{
+ elem.setAttribute('onkeydown',action);
+ elem.setAttribute('onkeypress',action);
+ elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+ elem.setAttribute('class',attr);
+ elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+ var results = document.getElementById("SRResults");
+ for (var e=0; e<searchData.length; e++)
+ {
+ var id = searchData[e][0];
+ var srResult = document.createElement('div');
+ srResult.setAttribute('id','SR_'+id);
+ setClassAttr(srResult,'SRResult');
+ var srEntry = document.createElement('div');
+ setClassAttr(srEntry,'SREntry');
+ var srLink = document.createElement('a');
+ srLink.setAttribute('id','Item'+e);
+ setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+ setClassAttr(srLink,'SRSymbol');
+ srLink.innerHTML = searchData[e][1][0];
+ srEntry.appendChild(srLink);
+ if (searchData[e][1].length==2) // single result
+ {
+ srLink.setAttribute('href',searchData[e][1][1][0]);
+ srLink.setAttribute('onclick','parent.searchBox.CloseResultsWindow()');
+ if (searchData[e][1][1][1])
+ {
+ srLink.setAttribute('target','_parent');
+ }
+ var srScope = document.createElement('span');
+ setClassAttr(srScope,'SRScope');
+ srScope.innerHTML = searchData[e][1][1][2];
+ srEntry.appendChild(srScope);
+ }
+ else // multiple results
+ {
+ srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+ var srChildren = document.createElement('div');
+ setClassAttr(srChildren,'SRChildren');
+ for (var c=0; c<searchData[e][1].length-1; c++)
+ {
+ var srChild = document.createElement('a');
+ srChild.setAttribute('id','Item'+e+'_c'+c);
+ setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+ setClassAttr(srChild,'SRScope');
+ srChild.setAttribute('href',searchData[e][1][c+1][0]);
+ srChild.setAttribute('onclick','parent.searchBox.CloseResultsWindow()');
+ if (searchData[e][1][c+1][1])
+ {
+ srChild.setAttribute('target','_parent');
+ }
+ srChild.innerHTML = searchData[e][1][c+1][2];
+ srChildren.appendChild(srChild);
+ }
+ srEntry.appendChild(srChildren);
+ }
+ srResult.appendChild(srEntry);
+ results.appendChild(srResult);
+ }
+}
+
+function init_search()
+{
+ var results = document.getElementById("MSearchSelectWindow");
+ for (var key in indexSectionLabels)
+ {
+ var link = document.createElement('a');
+ link.setAttribute('class','SelectItem');
+ link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+ link.href='javascript:void(0)';
+ link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+ results.appendChild(link);
+ }
+ searchBox.OnSelectItem(0);
+}
+/* @license-end */
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_l.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_l.png
new file mode 100644
index 0000000..fd5f7da
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_l.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_m.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_m.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_r.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/search_r.png
new file mode 100644
index 0000000..1af5d21
--- /dev/null
+++ 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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.html
new file mode 100644
index 0000000..882b2a1
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.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="typedefs_0.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.js
new file mode 100644
index 0000000..ab1907c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/typedefs_0.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['xbbool_0',['xbBool',['../namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f',1,'xb']]],
+ ['xbdouble_1',['xbDouble',['../namespacexb.html#a25f47b226ce924a5c78f97989b0744a2',1,'xb']]],
+ ['xbfloat_2',['xbFloat',['../namespacexb.html#a83aa6a550398db55973aa9fb4257e66e',1,'xb']]],
+ ['xbofft_3',['xbOffT',['../namespacexb.html#ac963d9fde6debb416303cfbed35fb793',1,'xb']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.html
new file mode 100644
index 0000000..950bfc5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_0.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_0.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.html
new file mode 100644
index 0000000..fed58a5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_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="variables_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.js
new file mode 100644
index 0000000..02ce92e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['errorcodetext_0',['ErrorCodeText',['../classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e',1,'xb::xbSsv']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.html
new file mode 100644
index 0000000..761c194
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_2.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_2.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.html
new file mode 100644
index 0000000..78bfe03
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.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_3.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.js
new file mode 100644
index 0000000..7708e94
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_3.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['mydbfrec_0',['MyDbfRec',['../xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e',1,'xb_test_blockread.cpp']]],
+ ['myv4record_1',['MyV4Record',['../xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99',1,'xb_ex_expression.cpp']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.html
new file mode 100644
index 0000000..4d608da
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_4.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_4.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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.html
new file mode 100644
index 0000000..6342402
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.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_5.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.js
new file mode 100644
index 0000000..946d73a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_5.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['pdbf_0',['pDbf',['../structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6',1,'xb::xbTblList']]],
+ ['pnext_1',['pNext',['../structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c',1,'xb::xbTblList']]],
+ ['psfqtblname_2',['psFqTblName',['../structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d',1,'xb::xbTblList']]],
+ ['pstblalias_3',['psTblAlias',['../structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05',1,'xb::xbTblList']]],
+ ['pstblname_4',['psTblName',['../structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f',1,'xb::xbTblList']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.html
new file mode 100644
index 0000000..80db039
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.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_6.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.js
new file mode 100644
index 0000000..9dde579
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_6.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['recbuf_0',['RecBuf',['../classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd',1,'xb::xbDbf']]],
+ ['recbuf2_1',['RecBuf2',['../classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606',1,'xb::xbDbf']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.html
new file mode 100644
index 0000000..bf8eb38
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.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_7.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.js
new file mode 100644
index 0000000..f1b6b71
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_7.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['salias_0',['sAlias',['../classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276',1,'xb::xbDbf']]],
+ ['schemaptr_1',['SchemaPtr',['../classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7',1,'xb::xbDbf']]],
+ ['snullstring_2',['sNullString',['../classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da',1,'xb::xbSsv']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.html
new file mode 100644
index 0000000..92a55e9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.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_8.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.js
new file mode 100644
index 0000000..2369f5c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['timer_0',['timer',['../tstfuncs_8cpp.html#ae2281da6157495d69406c35f69a61f9f',1,'tstfuncs.cpp']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.html
new file mode 100644
index 0000000..1aec773
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.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_9.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.js
new file mode 100644
index 0000000..5eb7a13
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_9.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['uiheaderlen_0',['uiHeaderLen',['../classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918',1,'xb::xbDbf']]],
+ ['uirecordlen_1',['uiRecordLen',['../classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91',1,'xb::xbDbf']]],
+ ['ulcurrec_2',['ulCurRec',['../classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8',1,'xb::xbDbf']]],
+ ['ulnoofrecs_3',['ulNoOfRecs',['../classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87',1,'xb::xbDbf']]]
+];
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.js b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.js
new file mode 100644
index 0000000..8367676
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/search/variables_a.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['xbase_0',['xbase',['../classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004',1,'xb::xbFile']]],
+ ['xbdbf_1',['xbDbf',['../namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b',1,'xb']]],
+ ['xberrormessages_2',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
+ ['xblog_3',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
+ ['xbxbase_4',['xbXBase',['../namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0',1,'xb']]]
+];
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/splitbar.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ 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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_off.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_off.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_on.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/sync_on.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_a.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_a.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_b.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_b.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_h.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_h.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_s.png b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tab_s.png
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tabs.css b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tabs.css
new file mode 100644
index 0000000..00d1c60
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumphdr_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumphdr_8cpp.html
new file mode 100644
index 0000000..39b4a89
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumphdr_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.1/src/utils/xb_dumphdr.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_dumphdr.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:a0c99d968a34e803d378692bde2e3f18f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumphdr_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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpix_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpix_8cpp.html
new file mode 100644
index 0000000..7e42d1e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__dumpix_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.1/src/utils/xb_dumpix.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_dumpix.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:a0c99d968a34e803d378692bde2e3f18f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__dumpix_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/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/1Tdata/xbase/xbase64-4.1.4/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
new file mode 100644
index 0000000..40885f8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__blockread__save_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.1/src/tests/xb_test_blockread_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_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_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 />
+<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__save_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__save_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>, 300, 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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx2_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx2_8cpp.html
new file mode 100644
index 0000000..b92ae09
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__test__ndx2_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.0.2/src/tests/xb_test_ndx2.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_ndx2.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__ndx2_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__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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__zap_8cpp.html b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__zap_8cpp.html
new file mode 100644
index 0000000..793d67e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/html/xb__zap_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.1/src/utils/xb_zap.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_zap.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:a0c99d968a34e803d378692bde2e3f18f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__zap_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/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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/Makefile b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/Makefile
new file mode 100644
index 0000000..877c9cc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/Makefile
@@ -0,0 +1,23 @@
+LATEX_CMD=pdflatex
+
+all: refman.pdf
+
+pdf: refman.pdf
+
+refman.pdf: clean refman.tex
+ $(LATEX_CMD) refman
+ makeindex refman.idx
+ $(LATEX_CMD) refman
+ latex_count=8 ; \
+ while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
+ do \
+ echo "Rerunning latex...." ;\
+ $(LATEX_CMD) refman ;\
+ latex_count=`expr $$latex_count - 1` ;\
+ done
+ makeindex refman.idx
+ $(LATEX_CMD) refman
+
+
+clean:
+ rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/checkndx_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/checkndx_8cpp.tex
new file mode 100644
index 0000000..d2155ae
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/checkndx_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{checkndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/checkndx.cpp File Reference}
+\label{checkndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/checkndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/checkndx.cpp}}
+{\ttfamily \#include $<$xbase64/xbase64.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{checkndx_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{checkndx_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{checkndx_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
+\index{checkndx.cpp@{checkndx.cpp}!main@{main}}
+\index{main@{main}!checkndx.cpp@{checkndx.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.eps
new file mode 100644
index 0000000..80ed36f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDate.eps
@@ -0,0 +1,197 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 512.820496
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.975000 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 2 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text 'arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(xb::xbDate) cw
+(xb::xbSsv) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (xb::xbDate) 0.000000 0.000000 box
+ (xb::xbSsv) 0.000000 1.000000 box
+
+% ----- relations -----
+
+solid
+0 0.000000 0.000000 out
+solid
+1 0.000000 1.000000 in
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.eps
new file mode 100644
index 0000000..26ff00c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbDbf.eps
@@ -0,0 +1,203 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 821.917786
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.608333 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 3 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text 'arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(xb::xbDbf) cw
+(xb::xbFile) cw
+(xb::xbSsv) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (xb::xbDbf) 0.000000 0.000000 box
+ (xb::xbFile) 0.000000 1.000000 box
+ (xb::xbSsv) 0.000000 2.000000 box
+
+% ----- relations -----
+
+solid
+0 0.000000 0.000000 out
+solid
+1 0.000000 1.000000 in
+solid
+0 0.000000 1.000000 out
+solid
+1 0.000000 2.000000 in
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.eps
new file mode 100644
index 0000000..defac03
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbFile.eps
@@ -0,0 +1,203 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 821.917786
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.608333 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 3 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text 'arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(xb::xbFile) cw
+(xb::xbSsv) cw
+(xb::xbDbf) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (xb::xbFile) 0.000000 1.000000 box
+ (xb::xbSsv) 0.000000 2.000000 box
+ (xb::xbDbf) 0.000000 0.000000 box
+
+% ----- relations -----
+
+solid
+0 0.000000 1.000000 out
+solid
+1 0.000000 2.000000 in
+solid
+1 0.000000 0.250000 out
+solid
+0 0.000000 0.750000 in
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.eps
new file mode 100644
index 0000000..2cceb9d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbSsv.eps
@@ -0,0 +1,219 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 217.391312
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 2.300000 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 3 def
+/cols 3 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text 'arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(xb::xbSsv) cw
+(xb::xbDate) cw
+(xb::xbFile) cw
+(xb::xbTblMgr) cw
+(xb::xbDbf) cw
+(xb::xbXBase) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (xb::xbSsv) 1.000000 2.000000 box
+ (xb::xbDate) 0.000000 1.000000 box
+ (xb::xbFile) 1.000000 1.000000 box
+ (xb::xbTblMgr) 2.000000 1.000000 box
+ (xb::xbDbf) 1.000000 0.000000 box
+ (xb::xbXBase) 2.000000 0.000000 box
+
+% ----- relations -----
+
+solid
+1 1.000000 1.250000 out
+solid
+0.000000 2.000000 2.000000 conn
+solid
+0 0.000000 1.750000 in
+solid
+0 1.000000 1.750000 in
+solid
+1 1.000000 0.250000 out
+solid
+0 2.000000 1.750000 in
+solid
+1 2.000000 0.250000 out
+solid
+0 1.000000 0.750000 in
+solid
+0 2.000000 0.750000 in
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.eps
new file mode 100644
index 0000000..12fb841
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbTblMgr.eps
@@ -0,0 +1,203 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 652.173889
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.766667 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 3 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text 'arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(xb::xbTblMgr) cw
+(xb::xbSsv) cw
+(xb::xbXBase) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (xb::xbTblMgr) 0.000000 1.000000 box
+ (xb::xbSsv) 0.000000 2.000000 box
+ (xb::xbXBase) 0.000000 0.000000 box
+
+% ----- relations -----
+
+solid
+0 0.000000 1.000000 out
+solid
+1 0.000000 2.000000 in
+solid
+1 0.000000 0.250000 out
+solid
+0 0.000000 0.750000 in
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.eps b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.eps
new file mode 100644
index 0000000..c5ffd19
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/classxb_1_1xbXBase.eps
@@ -0,0 +1,203 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 652.173889
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.766667 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 3 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text 'arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(xb::xbXBase) cw
+(xb::xbTblMgr) cw
+(xb::xbSsv) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (xb::xbXBase) 0.000000 0.000000 box
+ (xb::xbTblMgr) 0.000000 1.000000 box
+ (xb::xbSsv) 0.000000 2.000000 box
+
+% ----- relations -----
+
+solid
+0 0.000000 0.000000 out
+solid
+1 0.000000 1.000000 in
+solid
+0 0.000000 1.000000 out
+solid
+1 0.000000 2.000000 in
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dbfxtrct_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dbfxtrct_8cpp.tex
new file mode 100644
index 0000000..dafa6b6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/dbfxtrct_8cpp.tex
@@ -0,0 +1,25 @@
+\hypertarget{dbfxtrct_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/dbfxtrct.cpp File Reference}
+\label{dbfxtrct_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/dbfxtrct.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/dbfxtrct.cpp}}
+{\ttfamily \#include $<$xbase64/xbase64.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{dbfxtrct_8cpp_a5ae07f63d6b390e42068d941038dadf2}{Usage}} ()
+\item
+int \mbox{\hyperlink{dbfxtrct_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{dbfxtrct_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{dbfxtrct_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
+\index{dbfxtrct.cpp@{dbfxtrct.cpp}!main@{main}}
+\index{main@{main}!dbfxtrct.cpp@{dbfxtrct.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{dbfxtrct_8cpp_a5ae07f63d6b390e42068d941038dadf2}\label{dbfxtrct_8cpp_a5ae07f63d6b390e42068d941038dadf2}}
+\index{dbfxtrct.cpp@{dbfxtrct.cpp}!Usage@{Usage}}
+\index{Usage@{Usage}!dbfxtrct.cpp@{dbfxtrct.cpp}}
+\doxysubsubsection{\texorpdfstring{Usage()}{Usage()}}
+{\footnotesize\ttfamily void Usage (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/doxygen.sty b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/doxygen.sty
new file mode 100644
index 0000000..7e01991
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/doxygen.sty
@@ -0,0 +1,601 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{doxygen}
+
+% Packages used by this style file
+\RequirePackage{alltt}
+%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
+\RequirePackage{calc}
+\RequirePackage{float}
+%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
+\RequirePackage{verbatim}
+\RequirePackage[table]{xcolor}
+\RequirePackage{longtable_doxygen}
+\RequirePackage{tabu_doxygen}
+\RequirePackage{fancyvrb}
+\RequirePackage{tabularx}
+\RequirePackage{multicol}
+\RequirePackage{multirow}
+\RequirePackage{hanging}
+\RequirePackage{ifpdf}
+\RequirePackage{adjustbox}
+\RequirePackage{amssymb}
+\RequirePackage{stackengine}
+\RequirePackage{enumitem}
+\RequirePackage{alphalph}
+\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis
+\RequirePackage{enumitem}
+
+%---------- Internal commands used in this style file ----------------
+
+\newcommand{\ensurespace}[1]{%
+ \begingroup%
+ \setlength{\dimen@}{#1}%
+ \vskip\z@\@plus\dimen@%
+ \penalty -100\vskip\z@\@plus -\dimen@%
+ \vskip\dimen@%
+ \penalty 9999%
+ \vskip -\dimen@%
+ \vskip\z@skip% hide the previous |\vskip| from |\addvspace|
+ \endgroup%
+}
+
+\newcommand{\DoxyHorRuler}[1]{%
+ \setlength{\parskip}{0ex plus 0ex minus 0ex}%
+ \ifthenelse{#1=0}%
+ {%
+ \hrule%
+ }%
+ {%
+ \hrulefilll%
+ }%
+}
+\newcommand{\DoxyLabelFont}{}
+\newcommand{\entrylabel}[1]{%
+ {%
+ \parbox[b]{\labelwidth-4pt}{%
+ \makebox[0pt][l]{\DoxyLabelFont#1}%
+ \vspace{1.5\baselineskip}%
+ }%
+ }%
+}
+
+\newenvironment{DoxyDesc}[1]{%
+ \ensurespace{4\baselineskip}%
+ \begin{list}{}{%
+ \settowidth{\labelwidth}{20pt}%
+ %\setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }%
+ \item[#1]%
+}{%
+ \end{list}%
+}
+
+\newsavebox{\xrefbox}
+\newlength{\xreflength}
+\newcommand{\xreflabel}[1]{%
+ \sbox{\xrefbox}{#1}%
+ \setlength{\xreflength}{\wd\xrefbox}%
+ \ifthenelse{\xreflength>\labelwidth}{%
+ \begin{minipage}{\textwidth}%
+ \setlength{\parindent}{0pt}%
+ \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
+ \end{minipage}%
+ }{%
+ \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
+ }%
+}
+
+%---------- Commands used by doxygen LaTeX output generator ----------
+
+% Used by <pre> ... </pre>
+\newenvironment{DoxyPre}{%
+ \small%
+ \begin{alltt}%
+}{%
+ \end{alltt}%
+ \normalsize%
+}
+% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output.
+\newlength{\CodeWidthChar}
+\newlength{\CodeHeightChar}
+\settowidth{\CodeWidthChar}{?}
+\settoheight{\CodeHeightChar}{?}
+% Necessary for hanging indent
+\newlength{\DoxyCodeWidth}
+
+\newcommand\DoxyCodeLine[1]{\hangpara{\DoxyCodeWidth}{1}{#1}\par}
+
+\newcommand\NiceSpace{%
+ \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}%
+}
+
+% Used by @code ... @endcode
+\newenvironment{DoxyCode}[1]{%
+ \par%
+ \scriptsize%
+ \normalfont\ttfamily%
+ \rightskip0pt plus 1fil%
+ \settowidth{\DoxyCodeWidth}{000000}%
+ \settowidth{\CodeWidthChar}{?}%
+ \settoheight{\CodeHeightChar}{?}%
+ \setlength{\parskip}{0ex plus 0ex minus 0ex}%
+ \ifthenelse{\equal{#1}{0}}
+ {
+ {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
+ }
+ {
+ {\lccode`~32 \lowercase{\global\let~}}\obeyspaces%
+ }
+
+}{%
+ \normalfont%
+ \normalsize%
+ \settowidth{\CodeWidthChar}{?}%
+ \settoheight{\CodeHeightChar}{?}%
+}
+
+% Redefining not defined characters, i.e. "Replacement Character" in tex output.
+\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{%
+ \textcolor{white}{\sffamily\bfseries\small ?}}{%
+ \rotatebox{45}{$\blacksquare$}}}}
+
+% Used by @example, @include, @includelineno and @dontinclude
+\newenvironment{DoxyCodeInclude}[1]{%
+ \DoxyCode{#1}%
+}{%
+ \endDoxyCode%
+}
+
+% Used by @verbatim ... @endverbatim
+\newenvironment{DoxyVerb}{%
+ \footnotesize%
+ \verbatim%
+}{%
+ \endverbatim%
+ \normalsize%
+}
+
+% Used by @verbinclude
+\newenvironment{DoxyVerbInclude}{%
+ \DoxyVerb%
+}{%
+ \endDoxyVerb%
+}
+
+% Used by numbered lists (using '-#' or <ol> ... </ol>)
+\setlistdepth{12}
+\newlist{DoxyEnumerate}{enumerate}{12}
+\setlist[DoxyEnumerate,1]{label=\arabic*.}
+\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)}
+\setlist[DoxyEnumerate,3]{label=\roman*.}
+\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.}
+\setlist[DoxyEnumerate,5]{label=\arabic*.}
+\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)}
+\setlist[DoxyEnumerate,7]{label=\roman*.}
+\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.}
+\setlist[DoxyEnumerate,9]{label=\arabic*.}
+\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)}
+\setlist[DoxyEnumerate,11]{label=\roman*.}
+\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.}
+
+% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
+\setlistdepth{12}
+\newlist{DoxyItemize}{itemize}{12}
+\setlist[DoxyItemize]{label=\textperiodcentered}
+
+\setlist[DoxyItemize,1]{label=\textbullet}
+\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash}
+\setlist[DoxyItemize,3]{label=\textasteriskcentered}
+\setlist[DoxyItemize,4]{label=\textperiodcentered}
+
+% Used by description lists (using <dl> ... </dl>)
+\newenvironment{DoxyDescription}{%
+ \description%
+}{%
+ \enddescription%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if caption is specified)
+\newenvironment{DoxyImage}{%
+ \begin{figure}[H]%
+ \centering%
+}{%
+ \end{figure}%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if no caption is specified)
+\newenvironment{DoxyImageNoCaption}{%
+ \begin{center}%
+}{%
+ \end{center}%
+}
+
+% Used by @image
+% (only if inline is specified)
+\newenvironment{DoxyInlineImage}{%
+}{%
+}
+
+% Used by @attention
+\newenvironment{DoxyAttention}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @author and @authors
+\newenvironment{DoxyAuthor}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @date
+\newenvironment{DoxyDate}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @invariant
+\newenvironment{DoxyInvariant}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @note
+\newenvironment{DoxyNote}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @post
+\newenvironment{DoxyPostcond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @pre
+\newenvironment{DoxyPrecond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @copyright
+\newenvironment{DoxyCopyright}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @remark
+\newenvironment{DoxyRemark}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @return and @returns
+\newenvironment{DoxyReturn}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @since
+\newenvironment{DoxySince}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @see
+\newenvironment{DoxySeeAlso}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @version
+\newenvironment{DoxyVersion}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @warning
+\newenvironment{DoxyWarning}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @internal
+\newenvironment{DoxyInternal}[1]{%
+ \paragraph*{#1}%
+}{%
+}
+
+% Used by @par and @paragraph
+\newenvironment{DoxyParagraph}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by parameter lists
+\newenvironment{DoxyParams}[2][]{%
+ \tabulinesep=1mm%
+ \par%
+ \ifthenelse{\equal{#1}{}}%
+ {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description
+ {\ifthenelse{\equal{#1}{1}}%
+ {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc
+ {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc
+ }
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for fields of simple structs
+\newenvironment{DoxyFields}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}%
+ \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for fields simple class style enums
+\newenvironment{DoxyEnumFields}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for parameters within a detailed function description
+\newenvironment{DoxyParamCaption}{%
+ \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}%
+}{%
+}
+
+% Used by return value lists
+\newenvironment{DoxyRetVals}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used by exception lists
+\newenvironment{DoxyExceptions}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used by template parameter lists
+\newenvironment{DoxyTemplParams}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for member lists
+\newenvironment{DoxyCompactItemize}{%
+ \begin{itemize}%
+ \setlength{\itemsep}{-3pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \setlength{\partopsep}{0pt}%
+}{%
+ \end{itemize}%
+}
+
+% Used for member descriptions
+\newenvironment{DoxyCompactList}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \renewcommand{\makelabel}{\hfill}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used for reference lists (@bug, @deprecated, @todo, etc.)
+\newenvironment{DoxyRefList}{%
+ \begin{list}{}{%
+ \setlength{\labelwidth}{10pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \renewcommand{\makelabel}{\xreflabel}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by @bug, @deprecated, @todo, etc.
+\newenvironment{DoxyRefDesc}[1]{%
+ \begin{list}{}{%
+ \renewcommand\makelabel[1]{\textbf{##1}}%
+ \settowidth\labelwidth{\makelabel{#1}}%
+ \setlength\leftmargin{\labelwidth+\labelsep}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by parameter lists and simple sections
+\newenvironment{Desc}
+{\begin{list}{}{%
+ \settowidth{\labelwidth}{20pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }
+}{%
+ \end{list}%
+}
+
+% Used by tables
+\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
+\newenvironment{TabularC}[1]%
+{\tabulinesep=1mm
+\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}%
+{\end{longtabu*}\par}%
+
+\newenvironment{TabularNC}[1]%
+{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}%
+{\end{tabu}\par}%
+
+% Used for member group headers
+\newenvironment{Indent}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ }%
+ \item[]\ignorespaces%
+}{%
+ \unskip%
+ \end{list}%
+}
+
+% Used when hyperlinks are turned off
+\newcommand{\doxyref}[3]{%
+ \textbf{#1} (\textnormal{#2}\,\pageref{#3})%
+}
+
+% Used to link to a table when hyperlinks are turned on
+\newcommand{\doxytablelink}[2]{%
+ \ref{#1}%
+}
+
+% Used to link to a table when hyperlinks are turned off
+\newcommand{\doxytableref}[3]{%
+ \ref{#3}%
+}
+
+% Used by @addindex
+\newcommand{\lcurly}{\{}
+\newcommand{\rcurly}{\}}
+
+% Colors used for syntax highlighting
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
+\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
+
+% Color used for table heading
+\newcommand{\tableheadbgcolor}{lightgray}%
+
+% Version of hypertarget with correct landing location
+\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
+
+% possibility to have sections etc. be within the margins
+% unfortunately had to copy part of book.cls and add \raggedright
+\makeatletter
+\newcommand\doxysection{\@startsection {section}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\raggedright\normalfont\Large\bfseries}}
+\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\raggedright\normalfont\large\bfseries}}
+\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\raggedright\normalfont\normalsize\bfseries}}
+\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}%
+ {3.25ex \@plus1ex \@minus.2ex}%
+ {-1em}%
+ {\raggedright\normalfont\normalsize\bfseries}}
+\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\raggedright\normalfont\normalsize\bfseries}}
+\makeatother
+% Define caption that is also suitable in a table
+\makeatletter
+\def\doxyfigcaption{%
+\H@refstepcounter{figure}%
+\@dblarg{\@caption{figure}}}
+\makeatother
+
+% Define alpha enumarative names for counters > 26
+\makeatletter
+\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname}
+\def\@enumalphalphcnt#1{\alphalph{#1}}
+\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname}
+\def\@enumAlphAlphcnt#1{\AlphAlph{#1}}
+\makeatother
+\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa}
+\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA}
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/longtable_doxygen.sty b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/longtable_doxygen.sty
new file mode 100644
index 0000000..a0eb314
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/longtable_doxygen.sty
@@ -0,0 +1,448 @@
+%%
+%% This is file `longtable.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% longtable.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at http://latex-project.org/bugs.html
+%% (but please observe conditions on bug reports sent to that address!)
+%%
+%% Copyright 1993-2016
+%% The LaTeX3 Project and any individual authors listed elsewhere
+%% in this file.
+%%
+%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'.
+%% --------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle'
+%% without such generated files.
+%%
+%% The list of all files belonging to the LaTeX `Tools Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\ProvidesPackage{longtable_doxygen}
+ [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen]
+\def\LT@err{\PackageError{longtable}}
+\def\LT@warn{\PackageWarning{longtable}}
+\def\LT@final@warn{%
+ \AtEndDocument{%
+ \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}%
+ \global\let\LT@final@warn\relax}
+\DeclareOption{errorshow}{%
+ \def\LT@warn{\PackageInfo{longtable}}}
+\DeclareOption{pausing}{%
+ \def\LT@warn#1{%
+ \LT@err{#1}{This is not really an error}}}
+\DeclareOption{set}{}
+\DeclareOption{final}{}
+\ProcessOptions
+\newskip\LTleft \LTleft=\fill
+\newskip\LTright \LTright=\fill
+\newskip\LTpre \LTpre=\bigskipamount
+\newskip\LTpost \LTpost=\bigskipamount
+\newcount\LTchunksize \LTchunksize=20
+\let\c@LTchunksize\LTchunksize
+\newdimen\LTcapwidth \LTcapwidth=4in
+\newbox\LT@head
+\newbox\LT@firsthead
+\newbox\LT@foot
+\newbox\LT@lastfoot
+\newcount\LT@cols
+\newcount\LT@rows
+\newcounter{LT@tables}
+\newcounter{LT@chunks}[LT@tables]
+\ifx\c@table\undefined
+ \newcounter{table}
+ \def\fnum@table{\tablename~\thetable}
+\fi
+\ifx\tablename\undefined
+ \def\tablename{Table}
+\fi
+\newtoks\LT@p@ftn
+\mathchardef\LT@end@pen=30000
+\def\longtable{%
+ \par
+ \ifx\multicols\@undefined
+ \else
+ \ifnum\col@number>\@ne
+ \@twocolumntrue
+ \fi
+ \fi
+ \if@twocolumn
+ \LT@err{longtable not in 1-column mode}\@ehc
+ \fi
+ \begingroup
+ \@ifnextchar[\LT@array{\LT@array[x]}}
+\def\LT@array[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \if l#1%
+ \LTleft\z@ \LTright\fill
+ \else\if r#1%
+ \LTleft\fill \LTright\z@
+ \else\if c#1%
+ \LTleft\fill \LTright\fill
+ \fi\fi\fi
+ \let\LT@mcol\multicolumn
+ \let\LT@@tabarray\@tabarray
+ \let\LT@@hl\hline
+ \def\@tabarray{%
+ \let\hline\LT@@hl
+ \LT@@tabarray}%
+ \let\\\LT@tabularcr\let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \ifx\extrarowheight\@undefined
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ \else
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
+ \fi
+ \setbox\@arstrutbox\hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \let\@sharp##\let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\LT@bchunk{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@\setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft \noexpand\halign to\hsize\bgroup
+ \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th\let\par\@empty
+ \everycr{}\lineskip\z@\baselineskip\z@
+ \LT@bchunk}
+\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}}
+\def\LT@start{%
+ \let\LT@start\endgraf
+ \endgraf\penalty\z@\vskip\LTpre
+ \dimen@\pagetotal
+ \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \ht\LT@foot
+ \dimen@ii\vfuzz
+ \vfuzz\maxdimen
+ \setbox\tw@\copy\z@
+ \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \vfuzz\dimen@ii
+ \advance\dimen@ \ht
+ \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@\dp
+ \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@ -\pagegoal
+ \ifdim \dimen@>\z@\vfil\break\fi
+ \global\@colroom\@colht
+ \ifvoid\LT@foot\else
+ \advance\vsize-\ht\LT@foot
+ \global\advance\@colroom-\ht\LT@foot
+ \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
+ \maxdepth\z@
+ \fi
+ \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
+ \output{\LT@output}}
+\def\endlongtable{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}}%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \if@filesw
+ {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
+ \gdef\expandafter\noexpand
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}}}%
+ \fi
+ \ifx\LT@save@row\LT@@save@row
+ \else
+ \LT@warn{Column \@width s have changed\MessageBreak
+ in table \thetable}%
+ \LT@final@warn
+ \fi
+ \endgraf\penalty -\LT@end@pen
+ \endgroup
+ \global\@mparbottom\z@
+ \pagegoal\vsize
+ \endgraf\penalty\z@\addvspace\LTpost
+ \ifvoid\footins\else\insert\footins{}\fi}
+\def\LT@nofcols#1&{%
+ \futurelet\@let@token\LT@n@fcols}
+\def\LT@n@fcols{%
+ \advance\LT@cols\@ne
+ \ifx\@let@token\LT@nofcols
+ \expandafter\@gobble
+ \else
+ \expandafter\LT@nofcols
+ \fi}
+\def\LT@tabularcr{%
+ \relax\iffalse{\fi\ifnum0=`}\fi
+ \@ifstar
+ {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr
+ \LT@t@bularcr}%
+ {\LT@t@bularcr}}
+\let\LT@crcr\crcr
+\let\LT@setprevdepth\relax
+\def\LT@t@bularcr{%
+ \global\advance\LT@rows\@ne
+ \ifnum\LT@rows=\LTchunksize
+ \gdef\LT@setprevdepth{%
+ \prevdepth\z@\global
+ \global\let\LT@setprevdepth\relax}%
+ \expandafter\LT@xtabularcr
+ \else
+ \ifnum0=`{}\fi
+ \expandafter\LT@LL@FM@cr
+ \fi}
+\def\LT@xtabularcr{%
+ \@ifnextchar[\LT@argtabularcr\LT@ntabularcr}
+\def\LT@ntabularcr{%
+ \ifnum0=`{}\fi
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \LT@bchunk}
+\def\LT@argtabularcr[#1]{%
+ \ifnum0=`{}\fi
+ \ifdim #1>\z@
+ \unskip\@xargarraycr{#1}%
+ \else
+ \@yargarraycr{#1}%
+ \fi
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \LT@bchunk}
+\def\LT@echunk{%
+ \crcr\LT@save@row\cr\egroup
+ \global\setbox\@ne\lastbox
+ \unskip
+ \egroup}
+\def\LT@entry#1#2{%
+ \ifhmode\@firstofone{&}\fi\omit
+ \ifnum#1=\c@LT@chunks
+ \else
+ \kern#2\relax
+ \fi}
+\def\LT@entry@chop#1#2{%
+ \noexpand\LT@entry
+ {\ifnum#1>\c@LT@chunks
+ 1}{0pt%
+ \else
+ #1}{#2%
+ \fi}}
+\def\LT@entry@write{%
+ \noexpand\LT@entry^^J%
+ \@spaces}
+\def\LT@kill{%
+ \LT@echunk
+ \LT@get@widths
+ \expandafter\LT@rebox\LT@bchunk}
+\def\LT@rebox#1\bgroup{%
+ #1\bgroup
+ \unvbox\z@
+ \unskip
+ \setbox\z@\lastbox}
+\def\LT@blank@row{%
+ \xdef\LT@save@row{\expandafter\LT@build@blank
+ \romannumeral\number\LT@cols 001 }}
+\def\LT@build@blank#1{%
+ \if#1m%
+ \noexpand\LT@entry{1}{0pt}%
+ \expandafter\LT@build@blank
+ \fi}
+\def\LT@make@row{%
+ \global\expandafter\let\expandafter\LT@save@row
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ \ifx\LT@save@row\relax
+ \LT@blank@row
+ \else
+ {\let\LT@entry\or
+ \if!%
+ \ifcase\expandafter\expandafter\expandafter\LT@cols
+ \expandafter\@gobble\LT@save@row
+ \or
+ \else
+ \relax
+ \fi
+ !%
+ \else
+ \aftergroup\LT@blank@row
+ \fi}%
+ \fi}
+\let\setlongtables\relax
+\def\LT@get@widths{%
+ \setbox\tw@\hbox{%
+ \unhbox\@ne
+ \let\LT@old@row\LT@save@row
+ \global\let\LT@save@row\@empty
+ \count@\LT@cols
+ \loop
+ \unskip
+ \setbox\tw@\lastbox
+ \ifhbox\tw@
+ \LT@def@row
+ \advance\count@\m@ne
+ \repeat}%
+ \ifx\LT@@save@row\@undefined
+ \let\LT@@save@row\LT@save@row
+ \fi}
+\def\LT@def@row{%
+ \let\LT@entry\or
+ \edef\@tempa{%
+ \ifcase\expandafter\count@\LT@old@row
+ \else
+ {1}{0pt}%
+ \fi}%
+ \let\LT@entry\relax
+ \xdef\LT@save@row{%
+ \LT@entry
+ \expandafter\LT@max@sel\@tempa
+ \LT@save@row}}
+\def\LT@max@sel#1#2{%
+ {\ifdim#2=\wd\tw@
+ #1%
+ \else
+ \number\c@LT@chunks
+ \fi}%
+ {\the\wd\tw@}}
+\def\LT@hline{%
+ \noalign{\ifnum0=`}\fi
+ \penalty\@M
+ \futurelet\@let@token\LT@@hline}
+\def\LT@@hline{%
+ \ifx\@let@token\hline
+ \global\let\@gtempa\@gobble
+ \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}%
+ \else
+ \global\let\@gtempa\@empty
+ \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}%
+ \fi
+ \ifnum0=`{\fi}%
+ \multispan\LT@cols
+ \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
+ \noalign{\LT@sep}%
+ \multispan\LT@cols
+ \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
+ \noalign{\penalty\@M}%
+ \@gtempa}
+\def\LT@caption{%
+ \noalign\bgroup
+ \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n}
+\def\LT@c@ption#1[#2]#3{%
+ \LT@makecaption#1\fnum@table{#3}%
+ \def\@tempa{#2}%
+ \ifx\@tempa\@empty\else
+ {\let\\\space
+ \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}%
+ \fi}
+\def\LT@capti@n{%
+ \@ifstar
+ {\egroup\LT@c@ption\@gobble[]}%
+ {\egroup\@xdblarg{\LT@c@ption\@firstofone}}}
+\def\LT@makecaption#1#2#3{%
+ \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{%
+ \sbox\@tempboxa{#1{#2: }#3}%
+ \ifdim\wd\@tempboxa>\hsize
+ #1{#2: }#3%
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \endgraf\vskip\baselineskip}%
+ \hss}}}
+\def\LT@output{%
+ \ifnum\outputpenalty <-\@Mi
+ \ifnum\outputpenalty > -\LT@end@pen
+ \LT@err{floats and marginpars not allowed in a longtable}\@ehc
+ \else
+ \setbox\z@\vbox{\unvbox\@cclv}%
+ \ifdim \ht\LT@lastfoot>\ht\LT@foot
+ \dimen@\pagegoal
+ \advance\dimen@-\ht\LT@lastfoot
+ \ifdim\dimen@<\ht\z@
+ \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
+ \@makecol
+ \@outputpage
+ \setbox\z@\vbox{\box\LT@head}%
+ \fi
+ \fi
+ \global\@colroom\@colht
+ \global\vsize\@colht
+ \vbox
+ {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
+ \fi
+ \else
+ \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
+ \@makecol
+ \@outputpage
+ \global\vsize\@colroom
+ \copy\LT@head\nobreak
+ \fi}
+\def\LT@end@hd@ft#1{%
+ \LT@echunk
+ \ifx\LT@start\endgraf
+ \LT@err
+ {Longtable head or foot not at start of table}%
+ {Increase LTchunksize}%
+ \fi
+ \setbox#1\box\z@
+ \LT@get@widths
+ \LT@bchunk}
+\def\endfirsthead{\LT@end@hd@ft\LT@firsthead}
+\def\endhead{\LT@end@hd@ft\LT@head}
+\def\endfoot{\LT@end@hd@ft\LT@foot}
+\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot}
+\def\LT@startpbox#1{%
+ \bgroup
+ \let\@footnotetext\LT@p@ftntext
+ \setlength\hsize{#1}%
+ \@arrayparboxrestore
+ \vrule \@height \ht\@arstrutbox \@width \z@}
+\def\LT@endpbox{%
+ \@finalstrut\@arstrutbox
+ \egroup
+ \the\LT@p@ftn
+ \global\LT@p@ftn{}%
+ \hfil}
+\def\LT@p@ftntext#1{%
+ \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}%
+ \global\LT@p@ftn\expandafter{\@tempa{#1}}}%
+
+\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen}
+\endinput
+%%
+%% End of file `longtable.sty'.
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespaces.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespaces.tex
new file mode 100644
index 0000000..bac4907
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespaces.tex
@@ -0,0 +1,4 @@
+\doxysection{Namespace List}
+Here is a list of all namespaces with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{\mbox{\hyperlink{namespacexb}{xb}} }{\pageref{namespacexb}}{}
+\end{DoxyCompactList}
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespacexb.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespacexb.tex
new file mode 100644
index 0000000..4abf6a2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/namespacexb.tex
@@ -0,0 +1,126 @@
+\hypertarget{namespacexb}{}\doxysection{xb Namespace Reference}
+\label{namespacexb}\index{xb@{xb}}
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}}
+\begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} class. \end{DoxyCompactList}\item
+class \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}}
+\begin{DoxyCompactList}\small\item\em Base class for handling dbf files/tables. \end{DoxyCompactList}\item
+class \mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}}
+\begin{DoxyCompactList}\small\item\em Class for handling low level file I/O. \end{DoxyCompactList}\item
+struct \mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}}
+\begin{DoxyCompactList}\small\item\em Schema used for defining tables with Create\+Table methods. \end{DoxyCompactList}\item
+class \mbox{\hyperlink{classxb_1_1xbSsv}{xb\+Ssv}}
+\begin{DoxyCompactList}\small\item\em Class for handling shared system variables. \end{DoxyCompactList}\item
+class \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}}
+\begin{DoxyCompactList}\small\item\em Class for handling string data. \end{DoxyCompactList}\item
+struct \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}}
+\item
+class \mbox{\hyperlink{classxb_1_1xbTblMgr}{xb\+Tbl\+Mgr}}
+\item
+class \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+XBase}}
+\begin{DoxyCompactList}\small\item\em xb\+Xbase class. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Typedefs}
+\begin{DoxyCompactItemize}
+\item
+typedef float \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+Float}}
+\item
+typedef double \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}}
+\item
+typedef short int \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}
+\item
+typedef xb\+UInt64 \mbox{\hyperlink{namespacexb_ac963d9fde6debb416303cfbed35fb793}{xb\+OffT}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+std\+::ostream \& \mbox{\hyperlink{namespacexb_ad27f348219e895c44f74addba8e1889a}{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*{Variables}
+\begin{DoxyCompactItemize}
+\item
+const xb\+Error\+Message \mbox{\hyperlink{namespacexb_a04be228a037d220dd5564f5ef618adcc}{xb\+Error\+Messages}} \mbox{[}$\,$\mbox{]}
+\item
+class XBDLLEXPORT \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xb\+XBase}}
+\item
+class XBDLLEXPORT \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xb\+Dbf}}
+\item
+class XBDLLEXPORT \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xb\+Log}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Typedef Documentation}
+\mbox{\Hypertarget{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}\label{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}}
+\index{xb@{xb}!xbBool@{xbBool}}
+\index{xbBool@{xbBool}!xb@{xb}}
+\doxysubsubsection{\texorpdfstring{xbBool}{xbBool}}
+{\footnotesize\ttfamily typedef short int \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+::xb\+Bool}}}
+
+\mbox{\Hypertarget{namespacexb_a25f47b226ce924a5c78f97989b0744a2}\label{namespacexb_a25f47b226ce924a5c78f97989b0744a2}}
+\index{xb@{xb}!xbDouble@{xbDouble}}
+\index{xbDouble@{xbDouble}!xb@{xb}}
+\doxysubsubsection{\texorpdfstring{xbDouble}{xbDouble}}
+{\footnotesize\ttfamily typedef double \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+::xb\+Double}}}
+
+\mbox{\Hypertarget{namespacexb_a83aa6a550398db55973aa9fb4257e66e}\label{namespacexb_a83aa6a550398db55973aa9fb4257e66e}}
+\index{xb@{xb}!xbFloat@{xbFloat}}
+\index{xbFloat@{xbFloat}!xb@{xb}}
+\doxysubsubsection{\texorpdfstring{xbFloat}{xbFloat}}
+{\footnotesize\ttfamily typedef float \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xb\+::xb\+Float}}}
+
+\mbox{\Hypertarget{namespacexb_ac963d9fde6debb416303cfbed35fb793}\label{namespacexb_ac963d9fde6debb416303cfbed35fb793}}
+\index{xb@{xb}!xbOffT@{xbOffT}}
+\index{xbOffT@{xbOffT}!xb@{xb}}
+\doxysubsubsection{\texorpdfstring{xbOffT}{xbOffT}}
+{\footnotesize\ttfamily typedef xb\+UInt64 \mbox{\hyperlink{namespacexb_ac963d9fde6debb416303cfbed35fb793}{xb\+::xb\+OffT}}}
+
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{namespacexb_ad27f348219e895c44f74addba8e1889a}\label{namespacexb_ad27f348219e895c44f74addba8e1889a}}
+\index{xb@{xb}!operator$<$$<$@{operator$<$$<$}}
+\index{operator$<$$<$@{operator$<$$<$}!xb@{xb}}
+\doxysubsubsection{\texorpdfstring{operator$<$$<$()}{operator<<()}}
+{\footnotesize\ttfamily std\+::ostream \& xb\+::operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{os, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s }\end{DoxyParamCaption})}
+
+
+
+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}
+
+
+\doxysubsection{Variable Documentation}
+\mbox{\Hypertarget{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}\label{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}}
+\index{xb@{xb}!xbDbf@{xbDbf}}
+\index{xbDbf@{xbDbf}!xb@{xb}}
+\doxysubsubsection{\texorpdfstring{xbDbf}{xbDbf}}
+{\footnotesize\ttfamily class XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+::xb\+Dbf}}}
+
+\mbox{\Hypertarget{namespacexb_a04be228a037d220dd5564f5ef618adcc}\label{namespacexb_a04be228a037d220dd5564f5ef618adcc}}
+\index{xb@{xb}!xbErrorMessages@{xbErrorMessages}}
+\index{xbErrorMessages@{xbErrorMessages}!xb@{xb}}
+\doxysubsubsection{\texorpdfstring{xbErrorMessages}{xbErrorMessages}}
+{\footnotesize\ttfamily const xb\+Error\+Message xb\+::xb\+Error\+Messages\mbox{[}$\,$\mbox{]}}
+
+\mbox{\Hypertarget{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}\label{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}}
+\index{xb@{xb}!xbLog@{xbLog}}
+\index{xbLog@{xbLog}!xb@{xb}}
+\doxysubsubsection{\texorpdfstring{xbLog}{xbLog}}
+{\footnotesize\ttfamily class XBDLLEXPORT xb\+::xb\+Log}
+
+\mbox{\Hypertarget{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}\label{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}}
+\index{xb@{xb}!xbXBase@{xbXBase}}
+\index{xbXBase@{xbXBase}!xb@{xb}}
+\doxysubsubsection{\texorpdfstring{xbXBase}{xbXBase}}
+{\footnotesize\ttfamily class XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbXBase}{xb\+::xb\+XBase}}}
+
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/reindex_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/reindex_8cpp.tex
new file mode 100644
index 0000000..043a116
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/reindex_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{reindex_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/reindex.cpp File Reference}
+\label{reindex_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/reindex.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/reindex.cpp}}
+{\ttfamily \#include $<$xbase64/xbase64.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{reindex_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{reindex_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{reindex_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
+\index{reindex.cpp@{reindex.cpp}!main@{main}}
+\index{main@{main}!reindex.cpp@{reindex.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tabu_doxygen.sty b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tabu_doxygen.sty
new file mode 100644
index 0000000..3f17d1d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/tabu_doxygen.sty
@@ -0,0 +1,2557 @@
+%%
+%% This is file `tabu.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tabu.dtx (with options: `package')
+%%
+%% This is a generated file.
+%% Copyright (FC) 2010-2011 - lppl
+%%
+%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars
+%%
+%% **********************************************************************************************
+%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal
+%% \begin{tabu} to <dimen>{ preamble } => target specified
+%% \begin{tabu} spread <dimen>{ preamble } => target relative to the ``natural width''
+%%
+%% tabu works in text and in math modes.
+%%
+%% X columns: automatic width adjustment + horizontal and vertical alignment
+%% \begin{tabu} { X[4c] X[1c] X[-2ml] }
+%%
+%% Horizontal lines and / or leaders:
+%% \hline\hline => double horizontal line
+%% \firsthline\hline => for nested tabulars
+%% \lasthline\hline => for nested tabulars
+%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader)
+%% Automatic lines / leaders :
+%% \everyrow{\hline\hline}
+%%
+%% Vertical lines and / or leaders:
+%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] }
+%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] }
+%%
+%% Fixed vertical spacing adjustment:
+%% \extrarowheight=<dimen> \extrarowdepth=<dimen>
+%% or: \extrarowsep=<dimen> => may be prefixed by \global
+%%
+%% Dynamic vertical spacing adjustment:
+%% \abovetabulinesep=<dimen> \belowtabulinesep=<dimen>
+%% or: \tabulinesep=<dimen> => may be prefixed by \global
+%%
+%% delarray.sty shortcuts: in math and text modes
+%% \begin{tabu} .... \({ preamble }\)
+%%
+%% Algorithms reports:
+%% \tracingtabu=1 \tracingtabu=2
+%%
+%% **********************************************************************************************
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work consists of the main source file tabu.dtx
+%% and the derived files
+%% tabu.sty, tabu.pdf, tabu.ins
+%%
+%% tabu : Flexible LaTeX tabulars
+%% lppl copyright 2010-2011 by FC <florent.chervet@free.fr>
+%%
+
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen]
+\RequirePackage{array}[2008/09/09]
+\RequirePackage{varwidth}[2009/03/30]
+\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined}
+\let\tabu@AtEnd\@empty
+\def\TMP@EnsureCode#1={%
+ \edef\tabu@AtEnd{\tabu@AtEnd
+ \catcode#1 \the\catcode#1}%
+ \catcode#1=%
+}% \TMP@EnsureCode
+\TMP@EnsureCode 33 = 12 % !
+\TMP@EnsureCode 58 = 12 % : (for siunitx)
+\TMP@EnsureCode124 = 12 % |
+\TMP@EnsureCode 36 = 3 % $ = math shift
+\TMP@EnsureCode 38 = 4 % & = tab alignment character
+\TMP@EnsureCode 32 = 10 % space
+\TMP@EnsureCode 94 = 7 % ^
+\TMP@EnsureCode 95 = 8 % _
+%% Constants --------------------------------------------------------
+\newcount \c@taburow \def\thetaburow {\number\c@taburow}
+\newcount \tabu@nbcols
+\newcount \tabu@cnt
+\newcount \tabu@Xcol
+\let\tabu@start \@tempcnta
+\let\tabu@stop \@tempcntb
+\newcount \tabu@alloc \tabu@alloc=\m@ne
+\newcount \tabu@nested
+\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc}
+\newdimen \tabu@target
+\newdimen \tabu@spreadtarget
+\newdimen \tabu@naturalX
+\newdimen \tabucolX
+\let\tabu@DELTA \@tempdimc
+\let\tabu@thick \@tempdima
+\let\tabu@on \@tempdimb
+\let\tabu@off \@tempdimc
+\newdimen \tabu@Xsum
+\newdimen \extrarowdepth
+\newdimen \abovetabulinesep
+\newdimen \belowtabulinesep
+\newdimen \tabustrutrule \tabustrutrule \z@
+\newtoks \tabu@thebody
+\newtoks \tabu@footnotes
+\newsavebox \tabu@box
+\newsavebox \tabu@arstrutbox
+\newsavebox \tabu@hleads
+\newsavebox \tabu@vleads
+\newif \iftabu@colortbl
+\newif \iftabu@siunitx
+\newif \iftabu@measuring
+\newif \iftabu@spread
+\newif \iftabu@negcoef
+\newif \iftabu@everyrow
+\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue}
+\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse}
+\newif \iftabu@long
+\newif \iftabuscantokens
+\def\tabu@rescan {\tabu@verbatim \scantokens }
+%% Utilities (for internal usage) -----------------------------------
+\def\tabu@gobblespace #1 {#1}
+\def\tabu@gobbletoken #1#2{#1}
+\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex}
+\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble
+ \else\ifx \@sptoken\@let@token
+ \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX
+ \fi\fi
+}% \tabu@gobblex
+\def\tabu@X{^^J}
+{\obeyspaces
+\global\let\tabu@spxiii= % saves an active space (for \ifx)
+\gdef\tabu@@spxiii{ }}
+\def\tabu@ifenvir {% only for \multicolumn
+ \expandafter\tabu@if@nvir\csname\@currenvir\endcsname
+}% \tabu@ifenvir
+\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else
+ \ifx\longtabu#1first\else
+ second\fi\fi oftwo\endcsname
+}% \tabu@ifenvir
+\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi}
+{\catcode`\&=3
+\gdef\tabu@strtrim #1{% #1 = control sequence to trim
+ \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi
+ \let\tabu@c@l@r \@empty \let#1\@empty
+ \else \expandafter \tabu@trimspaces #1&#1\@nnil
+ \fi
+}% \tabu@strtrim
+\gdef\tabu@trimspaces #1&#2\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& &#2}%
+\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&}
+\gdef\tabu@lastspace #1&#2&#3{\def #3{#1}%
+ \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi
+ \tabu@trimspaces #1&#3\@nnil}
+}% \catcode
+\def\tabu@sanitizearg #1#2{{%
+ \csname \ifcsname if@safe@actives\endcsname % <babel>
+ @safe@activestrue\else
+ relax\fi \endcsname
+ \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2%
+ \expandafter}\expandafter\def\expandafter#2\expandafter{#2}%
+}% \tabu@sanitizearg
+\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}%
+ \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!!
+}% \tabu@textbar
+\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi}
+\def\tabu@everyrow@egroup{%
+ \iftabu@everyrow \expandafter \endgroup \the\toks@
+ \else \ifnum0=`{\fi}%
+ \fi
+}% \tabu@everyrow@egroup
+\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule
+ height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
+ depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
+ width \z@}%
+}% \tabu@arstrut
+\def\tabu@rearstrut {%
+ \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax
+ \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax
+ \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima
+ \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi
+ \tabu@mkarstrut
+ \fi
+}% \tabu@rearstrut
+\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi}
+\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox
+ \hbox to\z@{\hbox to\z@{\hss
+ {\tabu@DBG{cyan}\vrule
+ height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
+ depth \z@
+ width \tabustrutrule}\kern-\tabustrutrule
+ {\tabu@DBG{pink}\vrule
+ height \z@
+ depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
+ width \tabustrutrule}}}%
+}% \tabu@DBG@arstrut
+\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@
+ \@nextchar}}%
+\def\tabu@savedecl{\ifcat$\d@llarend\else
+ \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode
+}% \tabu@savedecl
+\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@}
+\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k }
+\let\tabu@trialh@@k \@empty
+\def\tabu@nowrite #1#{{\afterassignment}\toks@}
+\let\tabu@write\write
+\let\tabu@immediate\immediate
+\def\tabu@WRITE{\begingroup
+ \def\immediate\write{\aftergroup\endgroup
+ \tabu@immediate\tabu@write}%
+}% \tabu@WRITE
+\expandafter\def\expandafter\tabu@GenericError\expandafter{%
+ \expandafter\tabu@WRITE\GenericError}
+\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}}
+\def\tabu@noxfootnote [#1]{\@gobble}
+\def\tabu@nocolor #1#{\@gobble}
+\newcommand*\tabu@norowcolor[2][]{}
+\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}%
+ \futurelet\@let@token \tabu@m@ybesiunitx}
+\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {%
+ \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi
+ \tabu@temp}% \tabu@m@ybesiunitx
+}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname
+\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}%
+%% Fixed vertical spacing adjustment: \extrarowsep ------------------
+\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}%
+ \iftabu@everyrow \aftergroup\tabu@Gextra
+ \else \aftergroup\tabu@n@Gextra
+ \fi
+ \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra
+}% \extrarowsep
+\def\tabu@extra {\@ifnextchar_%
+ {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}
+ {\ifx ^\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}%
+ \else \let\tabu@temp \@empty
+ \afterassignment \tabu@setextrasep \extrarowdepth
+ \fi \tabu@temp}%
+}% \tabu@extra
+\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2}
+\def\tabu@extr@ #1#2{\@ifnextchar^%
+ {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}
+ {\ifx _\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}%
+ \else \let\tabu@temp \@empty
+ \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
+ \fi \tabu@temp}%
+}% \tabu@extr@
+\def\tabu@setextrasep {\extrarowheight=\extrarowdepth
+ \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
+}% \tabu@setextrasep
+\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi}
+\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi}
+\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra}
+\let\tabu@C@extra \z@
+\let\tabu@G@extra \@empty
+%% Dynamic vertical spacing adjustment: \tabulinesep ----------------
+\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}%
+ \iftabu@everyrow \aftergroup\tabu@Glinesep
+ \else \aftergroup\tabu@n@Glinesep
+ \fi
+ \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep
+}% \tabulinesep
+\def\tabu@linesep {\@ifnextchar_%
+ {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}
+ {\ifx ^\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}%
+ \else \let\tabu@temp \@empty
+ \afterassignment \tabu@setlinesep \abovetabulinesep
+ \fi \tabu@temp}%
+}% \tabu@linesep
+\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2}
+\def\tabu@sets@p #1#2{\@ifnextchar^%
+ {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}
+ {\ifx _\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}%
+ \else \let\tabu@temp \@empty
+ \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
+ \fi \tabu@temp}%
+}% \tabu@sets@p
+\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep
+ \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
+}% \tabu@setlinesep
+\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi}
+\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi}
+\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep}
+\let\tabu@C@linesep \z@
+\let\tabu@G@linesep \@empty
+%% \global\extrarowsep and \global\tabulinesep -------------------
+\def\tabu@Gsave #1#2#3#4{\xdef#1{#1%
+ \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}%
+}% \tabu@Gsave
+\def\tabu@Grestore#1#2{%
+ \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax
+ \ifcat$\the\toks\currentgrouplevel$\else
+ \global\let#1\@empty \global\let#2\z@
+ \the\toks\currentgrouplevel
+ \fi
+}% \tabu@Grestore
+%% Setting code for every row ---------------------------------------
+\newcommand*\everyrow{\tabu@everyrow@bgroup
+ \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop
+}% \everyrow
+\def\tabu@evrstartstop {\@ifnextchar^%
+ {\afterassignment \tabu@evrstartstop \tabu@stop=}%
+ {\ifx ^\@let@token
+ \afterassignment\tabu@evrstartstop \tabu@start=%
+ \else \afterassignment\tabu@everyr@w \toks@
+ \fi}%
+}% \tabu@evrstartstop
+\def\tabu@everyr@w {%
+ \xdef\tabu@everyrow{%
+ \noexpand\tabu@everyrowfalse
+ \let\noalign \relax
+ \noexpand\tabu@rowfontreset
+ \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors
+ \let\noexpand\tabu@docline \noexpand\tabu@docline@evr
+ \the\toks@
+ \noexpand\tabu@evrh@@k
+ \noexpand\tabu@rearstrut
+ \global\advance\c@taburow \@ne}%
+ \iftabu@everyrow \toks@\expandafter
+ {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}%
+ \else \xdef\tabu@evr@G{\the\toks@}%
+ \fi
+ \tabu@everyrow@egroup
+}% \tabu@everyr@w
+\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only
+\tabu@evr{}
+%% line style and leaders -------------------------------------------
+\newcommand*\newtabulinestyle [1]{%
+ {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}%
+}% \newtabulinestyle
+\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}%
+ \tabu@sanitizearg {#1}\@tempa
+ \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi
+ \global\expandafter\let
+ \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi
+}% \tabu@newlinestyle
+\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}%
+ \iftabu@everyrow
+ \toks@\expandafter{\expandafter \def \expandafter
+ \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}%
+ \gdef\tabu@ls@{\tabu@ls@L}%
+ \else
+ \global\let\tabu@ls@G \tabu@thestyle
+ \gdef\tabu@ls@{\tabu@ls@G}%
+ \fi
+ \tabu@everyrow@egroup
+}% \tabulinestyle
+\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor}
+\def\tabu@rulecolor #1{\toks@{}%
+ \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1%
+ \tabu@temp
+ \tabu@rulearc
+}% \tabu@rulecolor
+\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp
+ \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}%
+ \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}%
+ \fi
+ \tabu@temp
+}% \tabu@ruledrsc@
+\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}}
+\def\tabu@rule@drsc@ #1#2{%
+ \iftabu@everyrow
+ \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}%
+ \else \toks@{\def\CT@drsc@{\color #1{#2}}}%
+ \fi
+ \else
+ \ifx \\#1#2\\\global\let\CT@drsc@ \relax
+ \else \gdef\CT@drsc@{\color #1{#2}}%
+ \fi
+ \fi
+ \tabu@rulearc
+}% \tabu@rule@drsc@
+\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}}
+\def\tabu@rule@arc@ #1#2{%
+ \iftabu@everyrow
+ \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}%
+ \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}%
+ \fi
+ \toks@\expandafter{\the\toks@
+ \let\tabu@arc@L \CT@arc@
+ \let\tabu@drsc@L \CT@drsc@
+ \ignorespaces}%
+ \else
+ \ifx \\#1#2\\\gdef\CT@arc@{}%
+ \else \gdef\CT@arc@{\color #1{#2}}%
+ \fi
+ \global\let\tabu@arc@G \CT@arc@
+ \global\let\tabu@drsc@G \CT@drsc@
+ \fi
+ \tabu@everyrow@egroup
+}% \tabu@rule@arc@
+\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1}
+\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}}
+\def\tabu@rowc@lors #1#2#3{%
+ \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil
+ \@defaultunits \tabu@start =\number0#1\relax \@nnil
+ \ifnum \count@<\tw@ \count@=\tw@ \fi
+ \advance\tabu@start \m@ne
+ \ifnum \tabu@start<\z@ \tabu@start \z@ \fi
+ \tabu@rowcolorseries #3\in@..\in@ \@nnil
+}% \tabu@rowcolors
+\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {%
+ \ifx \in@#1\relax
+ \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}%
+ \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@
+ \fi
+ \else
+ \ifx \\#2\\\tabu@rowcolorserieserror \fi
+ \tabu@sanitizearg{#1}\tabu@temp
+ \tabu@sanitizearg{#2}\@tempa
+ \advance\count@ \m@ne
+ \iftabu@everyrow
+ \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{%
+ \ifnum ##2=\c@taburow
+ \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi
+ \ifnum \c@taburow<##2 \else
+ \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@
+ \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
+ \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+ \rowcolor{tabu@rc@\the\tabu@nested}\fi}%
+ }\edef\x{\noexpand\tabu@rc@ {\the\count@}
+ {\the\tabu@start}
+ {\tabu@temp}
+ {\@tempa}%
+ }\x
+ \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}%
+ \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}%
+ \else % inside \noalign
+ \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}%
+ \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}%
+ \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+ \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}%
+ \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{%
+ \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne
+ \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
+ \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+ \rowcolor{tabu@rc@\the\tabu@nested}}%
+ }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x
+ \global\let\tabu@rc@G \tabu@rc@
+ \fi
+ \fi
+ \tabu@everyrow@egroup
+}% \tabu@rowcolorseries
+\tabuDisableCommands {\let\tabu@rc@ \@empty }
+\def\tabu@rowcolorserieserror {\PackageError{tabu}
+ {Invalid syntax for \string\taburowcolors
+ \MessageBreak Please look at the documentation!}\@ehd
+}% \tabu@rowcolorserieserror
+\newcommand*\tabureset {%
+ \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@
+ \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}%
+}% \tabureset
+%% Parsing the line styles ------------------------------------------
+\def\tabu@getline #1{\begingroup
+ \csname \ifcsname if@safe@actives\endcsname % <babel>
+ @safe@activestrue\else
+ relax\fi \endcsname
+ \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa
+ \let\tabu@thestyle \relax
+ \ifcsname tabu@linestyle@\@tempa \endcsname
+ \edef\tabu@thestyle{\endgroup
+ \def\tabu@thestyle{\expandafter\noexpand
+ \csname tabu@linestyle@\@tempa\endcsname}%
+ }\tabu@thestyle
+ \else \expandafter\tabu@definestyle \tabu@temp \@nil
+ \fi
+}% \tabu@getline
+\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter
+ \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen
+ \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined
+ \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs
+ \def\tabu@temp{\tabu@getparam{thick}}%
+ \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}%
+ \fi
+ {%
+ \let\tabu@ \relax
+ \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-))
+ \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}%
+ \expandafter}\expandafter
+ \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-)
+ \def\;{\def\:}%
+ \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10)
+ \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-)
+ \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi
+ \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi
+ \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi
+ \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen
+ \tabu@on \tabulineon \fi\fi
+ \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen
+ \tabu@off \tabulineoff \fi\fi
+ \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi
+ \in@true % <leaders>
+ \else \in@false % <rule>
+ \fi
+ \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}%
+ \else \edef\tabu@thick{\the\tabu@thick}%
+ \fi
+ \edef \tabu@thestyle ##1##2{\endgroup
+ \def\tabu@thestyle{%
+ \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick}
+ {\the\tabu@on}{##1}
+ {\the\tabu@off}{##2}%
+ \else \noexpand\tabu@rulesstyle
+ {##1\vrule width \tabu@thick}%
+ {##1\leaders \hrule height \tabu@thick \hfil}%
+ \fi}%
+ }\expandafter \expandafter
+ \expandafter \tabu@thestyle \expandafter
+ \expandafter \expandafter
+ {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}%
+}% \tabu@definestyle
+{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active
+ \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}}
+ \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space}
+}% \catcode
+\def\tabu@oxiii #1{%
+ \ifcase \ifx n#1\z@ \else
+ \ifx f#1\@ne\else
+ \tw@ \fi\fi
+ \expandafter\tabu@onxiii
+ \or \expandafter\tabu@ofxiii
+ \else o%
+ \fi#1}%
+\def\tabu@onxiii #1#2{%
+ \ifcase \ifx !#2\tw@ \else
+ \ifcat.\noexpand#2\z@ \else
+ \ifx \tabu@spxiii#2\@ne\else
+ \tw@ \fi\fi\fi
+ \tabu@getparam{on}#2\expandafter\@gobble
+ \or \expandafter\tabu@onxiii % (space is active)
+ \else o\expandafter\@firstofone
+ \fi{#1#2}}%
+\def\tabu@ofxiii #1#2{%
+ \ifx #2f\expandafter\tabu@offxiii
+ \else o\expandafter\@firstofone
+ \fi{#1#2}}
+\def\tabu@offxiii #1#2{%
+ \ifcase \ifx !#2\tw@ \else
+ \ifcat.\noexpand#2\z@ \else
+ \ifx\tabu@spxiii#2\@ne \else
+ \tw@ \fi\fi\fi
+ \tabu@getparam{off}#2\expandafter\@gobble
+ \or \expandafter\tabu@offxiii % (space is active)
+ \else o\expandafter\@firstofone
+ \fi{#1#2}}
+\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=}
+\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef
+ \ifx \tabu@#1\else % no more spec
+ \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi
+}% \tabu@getcolor
+\def\tabu@getc@l@r #1\tabu@ {%
+ \def\tabu@temp{#1}\tabu@strtrim \tabu@temp
+ \ifx \tabu@temp\@empty
+ \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists
+ \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r
+ \else \let\tabu@c@lon \tabu@c@l@r
+ \fi
+ %\else \tabu@warncolour{\tabu@temp}%
+ \fi%\fi
+ \tabu@ % next spec
+}% \tabu@getc@l@r
+\def\tabu@warncolour #1{\PackageWarning{tabu}
+ {Color #1 is not defined. Default color used}%
+}% \tabu@warncolour
+\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}%
+ \ifx \tabu@leaders\tabu@leaders@G \else
+ \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi
+}% \tabu@leadersstyle
+\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined
+ \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}%
+}% \tabu@rulesstyle
+%% The leaders boxes ------------------------------------------------
+\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color
+ {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor
+ {% % but the leaders boxes should have colors !
+ \def\@therule{\vrule}\def\@thick{height}\def\@length{width}%
+ \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}%
+ \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}%
+ \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
+ \global\let\tabu@thehleaders \tabu@theleaders
+ }%
+ {%
+ \def\@therule{\hrule}\def\@thick{width}\def\@length{height}%
+ \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}%
+ \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}%
+ \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
+ \global\let\tabu@thevleaders \tabu@theleaders
+ }%
+ \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}%
+ }%
+}% \tabu@LEADERS
+\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@}
+\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color
+ \global\setbox \tabu@leads=\@box{%
+ {#3\tabu@therule{#1}{#2}}%
+ \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi
+ {#3\tabu@therule{#1}{#2}}}%
+ \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss
+ {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}%
+ \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {%
+ {##1\tabu@therule{#1}{#2}}%
+ \xleaders \copy\tabu@leads \@ss
+ \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}%
+ }\tabu@theleaders{#3}%
+}% \tabu@l@@d@rs
+%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ----------
+\newcommand*\tabu {\tabu@longfalse
+ \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}%
+ \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi
+ \expandafter\let\csname tabu*\endcsname \tabu
+ \expandafter\def\csname endtabu*\endcsname{\endtabu}%
+ \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
+}% {tabu}
+\let\tabu@tabular \tabular % <For LyX: some users redefine \tabular...>
+\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu}
+\newcommand*\longtabu {\tabu@longtrue
+ \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi
+ \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}%
+ \LTchunksize=\@M
+ \expandafter\let\csname tabu*\endcsname \tabu
+ \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}%
+ \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts }
+ \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
+}% {longtabu}
+\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu}
+\def\tabu@nolongtabu{\PackageError{tabu}
+ {longtabu requires the longtable package}\@ehd}
+%% Read the target and then : \tabular or \@array ------------------
+\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget }
+\def\tabu@sett@rget {\tabu@target \z@
+ \ifcase \ifx \bgroup\@let@token \z@ \else
+ \ifx \@sptoken\@let@token \@ne \else
+ \if t\@let@token \tw@ \else
+ \if s\@let@token \thr@@\else
+ \z@\fi\fi\fi\fi
+ \expandafter\tabu@begin
+ \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget
+ \or \expandafter\tabu@to
+ \or \expandafter\tabu@spread
+ \fi
+}% \tabu@sett@rget
+\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget}
+\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget}
+\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target }
+\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget }
+\def\tabu@linegoalt@rget {%
+ \ifx \tabu@temp\LNGL@setlinegoal
+ \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal
+ \tabu@begin
+}% \tabu@linegoalt@rget
+\def\tabu@begin #1#{%
+ \iftabu@measuring \expandafter\tabu@nestedmeasure \fi
+ \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty
+ \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}%
+ \fi
+ \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil
+}% \tabu@begin
+\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup
+ \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}%
+ \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }%
+}% \tabu@tabu@
+\def\tabu@nestedmeasure {%
+ \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax
+ \tabu@spreadtrue
+ \else \begingroup \iffalse{\fi \ifnum0=`}\fi
+ \toks@{}\def\tabu@stack{b}%
+ \expandafter\tabu@collectbody\expandafter\tabu@quickrule
+ \expandafter\endgroup
+ \fi
+}% \tabu@nestedmeasure
+\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target}
+%% \tabu@setup \tabu@init \tabu@indent
+\def\tabu@setup{\tabu@alloc@
+ \ifcase \tabu@nested
+ \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@
+ \let\tabu@afterendpar \par
+ \fi\fi\fi
+ \def\tabu@aligndefault{c}\tabu@init \tabu@indent
+ \else % <nested tabu>
+ \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth
+ \fi
+ \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined
+ \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}%
+ \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu...
+ \let\@endpbox \tabu@endpbox % idem " " " " " "
+ \let\@tabarray \tabu@tabarray % idem " " " " " "
+ \tabu@setcleanup \tabu@setreset
+}% \tabu@setup
+\def\tabu@init{\tabu@starttimer \tabu@measuringfalse
+ \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}%
+ \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline
+ \let\firstline \tabu@firstline \let\lastline \tabu@lastline
+ \let\hline \tabu@hline \let\@xhline \tabu@xhline
+ \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox
+ \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi
+ \tabu@trivlist %<restore \\=\@normalcr inside lists>
+ \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext
+ \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering
+ \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft
+ \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering
+ \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft
+ \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont
+ \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x
+ \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar
+ \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok
+ \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn
+ \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!!
+ \let\tabu@endpbox \@endpbox % idem " " " " " " "
+ \let\tabu@tabarray \@tabarray % idem " " " " " " "
+ \tabu@adl@fix \let\endarray \tabu@endarray % <fix> colortbl & arydshln (delarray)
+ \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi
+}% \tabu@init
+\def\tabu@indent{% correction for indentation
+ \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget
+ \everypar\expandafter{%
+ \the\everypar\everypar\expandafter{\the\everypar}%
+ \setbox\z@=\lastbox
+ \ifdim\wd\z@>\z@ \edef\tabu@thetarget
+ {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi
+ \box\z@}%
+ \fi\fi
+}% \tabu@indent
+\def\tabu@setcleanup {% saves last global assignments
+ \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax
+ \def\tabu@aftergroupcleanup{%
+ \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}%
+ \else
+ \def\tabu@aftergroupcleanup{%
+ \aftergroup\aftergroup\aftergroup\tabu@cleanup
+ \let\tabu@aftergroupcleanup \relax}%
+ \fi
+ \let\tabu@arc@Gsave \tabu@arc@G
+ \let\tabu@arc@G \tabu@arc@L % <init>
+ \let\tabu@drsc@Gsave \tabu@drsc@G
+ \let\tabu@drsc@G \tabu@drsc@L % <init>
+ \let\tabu@ls@Gsave \tabu@ls@G
+ \let\tabu@ls@G \tabu@ls@L % <init>
+ \let\tabu@rc@Gsave \tabu@rc@G
+ \let\tabu@rc@G \tabu@rc@L % <init>
+ \let\tabu@evr@Gsave \tabu@evr@G
+ \let\tabu@evr@G \tabu@evr@L % <init>
+ \let\tabu@celllalign@save \tabu@celllalign
+ \let\tabu@cellralign@save \tabu@cellralign
+ \let\tabu@cellleft@save \tabu@cellleft
+ \let\tabu@cellright@save \tabu@cellright
+ \let\tabu@@celllalign@save \tabu@@celllalign
+ \let\tabu@@cellralign@save \tabu@@cellralign
+ \let\tabu@@cellleft@save \tabu@@cellleft
+ \let\tabu@@cellright@save \tabu@@cellright
+ \let\tabu@rowfontreset@save \tabu@rowfontreset
+ \let\tabu@@rowfontreset@save\tabu@@rowfontreset
+ \let\tabu@rowfontreset \@empty
+ \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset
+ \edef\c@taburow@save {\the\c@taburow}%
+ \edef\tabu@naturalX@save {\the\tabu@naturalX}%
+ \let\tabu@naturalXmin@save \tabu@naturalXmin
+ \let\tabu@naturalXmax@save \tabu@naturalXmax
+ \let\tabu@mkarstrut@save \tabu@mkarstrut
+ \edef\tabu@clarstrut{%
+ \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax
+ \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax
+ \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}%
+}% \tabu@setcleanup
+\def\tabu@cleanup {\begingroup
+ \globaldefs\@ne \tabu@everyrowtrue
+ \let\tabu@arc@G \tabu@arc@Gsave
+ \let\CT@arc@ \tabu@arc@G
+ \let\tabu@drsc@G \tabu@drsc@Gsave
+ \let\CT@drsc@ \tabu@drsc@G
+ \let\tabu@ls@G \tabu@ls@Gsave
+ \let\tabu@ls@ \tabu@ls@G
+ \let\tabu@rc@G \tabu@rc@Gsave
+ \let\tabu@rc@ \tabu@rc@G
+ \let\CT@do@color \relax
+ \let\tabu@evr@G \tabu@evr@Gsave
+ \let\tabu@celllalign \tabu@celllalign@save
+ \let\tabu@cellralign \tabu@cellralign@save
+ \let\tabu@cellleft \tabu@cellleft@save
+ \let\tabu@cellright \tabu@cellright@save
+ \let\tabu@@celllalign \tabu@@celllalign@save
+ \let\tabu@@cellralign \tabu@@cellralign@save
+ \let\tabu@@cellleft \tabu@@cellleft@save
+ \let\tabu@@cellright \tabu@@cellright@save
+ \let\tabu@rowfontreset \tabu@rowfontreset@save
+ \let\tabu@@rowfontreset \tabu@@rowfontreset@save
+ \tabu@naturalX =\tabu@naturalX@save
+ \let\tabu@naturalXmax \tabu@naturalXmax@save
+ \let\tabu@naturalXmin \tabu@naturalXmin@save
+ \let\tabu@mkarstrut \tabu@mkarstrut@save
+ \c@taburow =\c@taburow@save
+ \ifcase \tabu@nested \tabu@alloc \m@ne\fi
+ \endgroup % <end of \globaldefs>
+ \ifcase \tabu@nested
+ \the\tabu@footnotes \global\tabu@footnotes{}%
+ \tabu@afterendpar \tabu@elapsedtime
+ \fi
+ \tabu@clarstrut
+ \everyrow\expandafter {\tabu@evr@G}%
+}% \tabu@cleanup
+\let\tabu@afterendpar \relax
+\def\tabu@setreset {%
+ \edef\tabu@savedparams {% \relax for \tabu@message@save
+ \ifmmode \col@sep \the\arraycolsep
+ \else \col@sep \the\tabcolsep \fi \relax
+ \arrayrulewidth \the\arrayrulewidth \relax
+ \doublerulesep \the\doublerulesep \relax
+ \extratabsurround \the\extratabsurround \relax
+ \extrarowheight \the\extrarowheight \relax
+ \extrarowdepth \the\extrarowdepth \relax
+ \abovetabulinesep \the\abovetabulinesep \relax
+ \belowtabulinesep \the\belowtabulinesep \relax
+ \def\noexpand\arraystretch{\arraystretch}%
+ \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}%
+ \begingroup
+ \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu
+ \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi
+ \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi
+ \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L
+ \expandafter \endgroup \expandafter
+ \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena
+ \let\tabu@arc@G \tabu@arc@L
+ \let\tabu@drsc@G \tabu@drsc@L
+ \let\tabu@ls@G \tabu@ls@L
+ \let\tabu@rc@G \tabu@rc@L
+ \let\tabu@evr@G \tabu@evr@L}%
+ \def\tabu@reset{\tabu@savedparams
+ \tabu@everyrowtrue \c@taburow \z@
+ \let\CT@arc@ \tabu@arc@L
+ \let\CT@drsc@ \tabu@drsc@L
+ \let\tabu@ls@ \tabu@ls@L
+ \let\tabu@rc@ \tabu@rc@L
+ \global\tabu@alloc \tabu@alloc@save
+ \everyrow\expandafter{\tabu@evr@L}}%
+}% \tabu@reset
+\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}}
+\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}}
+%% The Rewriting Process -------------------------------------------
+\def\tabu@newcolumntype #1{%
+ \expandafter\tabu@new@columntype
+ \csname NC@find@\string#1\expandafter\endcsname
+ \csname NC@rewrite@\string#1\endcsname
+ {#1}%
+}% \tabu@newcolumntype
+\def\tabu@new@columntype #1#2#3{%
+ \def#1##1#3{\NC@{##1}}%
+ \let#2\relax \newcommand*#2%
+}% \tabu@new@columntype
+\def\tabu@privatecolumntype #1{%
+ \expandafter\tabu@private@columntype
+ \csname NC@find@\string#1\expandafter\endcsname
+ \csname NC@rewrite@\string#1\expandafter\endcsname
+ \csname tabu@NC@find@\string#1\expandafter\endcsname
+ \csname tabu@NC@rewrite@\string#1\endcsname
+ {#1}%
+}% \tabu@privatecolumntype
+\def\tabu@private@columntype#1#2#3#4{%
+ \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}%
+ \tabu@new@columntype#3#4%
+}% \tabu@private@columntype
+\let\tabu@privatecolumns \@empty
+\newcommand*\tabucolumn [1]{\expandafter \def \expandafter
+ \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns
+ \NC@do #1}}%
+\let\tabu@highprioritycolumns \@empty
+%% The | ``column'' : rewriting process --------------------------
+\tabu@privatecolumntype |{\tabu@rewritevline}
+\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}%
+ \expandafter \NC@find \tabu@rewritten}
+\def\tabu@lines #1{%
+ \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi
+ \NC@list\expandafter{\the\NC@list \NC@do #1}%
+}% \tabu@lines@
+\def\tabu@vlinearg #1{%
+ \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}%
+ \else\tabu@getline {#1}%
+ \fi
+ \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}%
+ }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}%
+ \expandafter \tabu@keepls \tabu@thestyle \@nil
+}% \tabu@vlinearg
+\def\tabu@keepls #1\@nil{%
+ \ifcat $\@cdr #1\@nil $%
+ \ifx \relax#1\else
+ \ifx \tabu@ls@#1\else
+ \let#1\relax
+ \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
+ \tabu@savels\noexpand#1}\fi\fi\fi
+}% \tabu@keepls
+\def\tabu@thevline {\begingroup
+ \ifdefined\tabu@leaders
+ \setbox\@tempboxa=\vtop to\dimexpr
+ \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}%
+ \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox
+ \box\@tempboxa
+ \else
+ \tabu@thevrule
+ \fi \endgroup
+}% \tabu@thevline
+\def\tabu@savels #1{%
+ \expandafter\let\csname\string#1\endcsname #1%
+ \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset
+ \tabu@resetls#1}}%
+\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}%
+%% \multicolumn inside tabu environment -----------------------------
+\tabu@newcolumntype \tabu@rewritemulticolumn{%
+ \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group
+ \NC@list{\NC@do *}\tabu@textbar \tabu@lines
+ \tabu@savedecl
+ \tabu@privatecolumns
+ \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}%
+ \let\tabu@savels \relax
+ \NC@find
+}% \tabu@rewritemulticolumn
+\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup}
+\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI}
+\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup
+ \tabu@everyrowtrue
+ \NC@list{\NC@do \tabu@rewritemulticolumn}%
+ \expandafter\@gobbletwo % gobbles \multispan{#1}
+ \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}%
+ {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi
+ {#3}}%
+}% \tabu@multic@lumn
+%% The X column(s): rewriting process -----------------------------
+\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}}
+\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten }
+\def\tabu@siunitx #1{\@ifnextchar \bgroup
+ {\tabu@rewriteX@Ss{#1}}
+ {\tabu@nosiunitx{#1}}}
+\def\tabu@rewriteX@Ss #1#2{\@temptokena{}%
+ \@defaultunits \let\tabu@temp =#2\relax\@nnil
+ \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi
+ \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}%
+ }\expandafter\NC@find \the\@temptokena \relax
+ }\expandafter\NC@rewrite@S \@gobble #2\relax
+ \else \tabu@siunitxerror
+ \fi
+ \expandafter \NC@find \tabu@rewritten
+}% \tabu@rewriteX@Ss
+\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column !
+ \MessageBreak X column can only embed siunitx S or s columns}\@ehd
+}% \tabu@siunitxerror
+\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}%
+ \iftabu@measuring
+ \else \tabu@measuringtrue % first X column found in the preamble
+ \let\@halignto \relax \let\tabu@halignto \relax
+ \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@
+ \else \tabu@spreadtarget \z@ \fi
+ \ifdim \tabu@target=\z@
+ \setlength\tabu@target \tabu@thetarget
+ \tabu@message{\tabu@message@defaulttarget}%
+ \else \tabu@message{\tabu@message@target}\fi
+ \fi
+}% \tabu@rewriteX
+\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax
+ \def\tabu@rewritten{l}}
+\def\tabu@Xarg #1#2#3{%
+ \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty
+ \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty
+ \ifx\\#1\\% <shortcut when no option>
+ \def\tabu@rewritten{p}\tabucolX \p@ % <default coef = 1>
+ \else
+ \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@
+ \tabu@Xparse {}#1\relax
+ \fi
+ \tabu@Xrewritten{#2}{#3}%
+}% \tabu@Xarg
+\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest}
+\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}}
+\def\tabu@Xtest{%
+ \ifcase \ifx \relax\@let@token \z@ \else
+ \if ,\@let@token \m@ne\else
+ \if p\@let@token 1\else
+ \if m\@let@token 2\else
+ \if b\@let@token 3\else
+ \if l\@let@token 4\else
+ \if c\@let@token 5\else
+ \if r\@let@token 6\else
+ \if j\@let@token 7\else
+ \if L\@let@token 8\else
+ \if C\@let@token 9\else
+ \if R\@let@token 10\else
+ \if J\@let@token 11\else
+ \ifx \@sptoken\@let@token 12\else
+ \if .\@let@token 13\else
+ \if -\@let@token 13\else
+ \ifcat $\@let@token 14\else
+ 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
+ \or \tabu@Xtype {p}%
+ \or \tabu@Xtype {m}%
+ \or \tabu@Xtype {b}%
+ \or \tabu@Xalign \raggedright\relax
+ \or \tabu@Xalign \centering\relax
+ \or \tabu@Xalign \raggedleft\relax
+ \or \tabu@Xalign \tabu@justify\relax
+ \or \tabu@Xalign \RaggedRight\raggedright
+ \or \tabu@Xalign \Centering\centering
+ \or \tabu@Xalign \RaggedLeft\raggedleft
+ \or \tabu@Xalign \justifying\tabu@justify
+ \or \expandafter \tabu@Xparsespace
+ \or \expandafter \tabu@Xcoef
+ \or \expandafter \tabu@Xm@th
+ \or \tabu@Xcoef{}%
+ \else\expandafter \tabu@Xparse
+ \fi
+}% \tabu@Xtest
+\def\tabu@Xalign #1#2{%
+ \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu}
+ {Duplicate horizontal alignment specification}\fi
+ \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax
+ \else \def\tabu@Xlcr{#2}\let#2\relax\fi
+ \expandafter\tabu@Xparse
+}% \tabu@Xalign
+\def\tabu@Xtype #1{%
+ \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu}
+ {Duplicate vertical alignment specification}\fi
+ \def\tabu@rewritten{#1}\expandafter\tabu@Xparse
+}% \tabu@Xtype
+\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}%
+ \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi
+}% \tabu@Xcoef
+\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@
+ \tabu@Xparse{}%
+}% \tabu@Xc@ef
+\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp}
+\def\tabu@Xd@sp{\let\tabu@Xmath=$%
+ \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}%
+ \expandafter\tabu@Xparse
+ \else \expandafter\tabu@Xparse\expandafter{\expandafter}%
+ \fi
+}% \tabu@Xd@sp
+\def\tabu@Xrewritten {%
+ \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi
+ \ifdim \tabucolX<\z@ \tabu@negcoeftrue
+ \else\ifdim \tabucolX=\z@ \tabucolX \p@
+ \fi\fi
+ \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}%
+ \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}%
+ \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{%
+ >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}%
+ \tabu@rewritten {\tabu@hsize \tabu@temp}%
+ <{##2\ifx$\tabu@Xmath$\fi}}%
+ }\tabu@rewritten
+}% \tabu@Xrewritten
+\def\tabu@hsize #1#2{%
+ \ifdim #2\p@<\z@
+ \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else
+ \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi
+ \fi
+ \else #2\tabucolX
+ \fi
+}% \tabu@hsize
+%% \usetabu and \preamble: rewriting process ---------------------
+\tabu@privatecolumntype \usetabu [1]{%
+ \ifx\\#1\\\tabu@saveerr{}\else
+ \@ifundefined{tabu@saved@\string#1}
+ {\tabu@saveerr{#1}}
+ {\let\tabu@rewriteX \tabu@rewriteXrestore
+ \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}%
+ \fi
+}% \NC@rewrite@\usetabu
+\tabu@privatecolumntype \preamble [1]{%
+ \ifx\\#1\\\tabu@saveerr{}\else
+ \@ifundefined{tabu@saved@\string#1}
+ {\tabu@saveerr{#1}}
+ {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}%
+ \fi
+}% \NC@rewrite@\preamble
+%% Controlling the rewriting process -------------------------------
+\tabu@newcolumntype \tabu@rewritefirst{%
+ \iftabu@long \aftergroup \tabu@longpream % <the whole implementation is here !>
+ \else \aftergroup \tabu@pream
+ \fi
+ \let\tabu@ \relax \let\tabu@hsize \relax
+ \let\tabu@Xcoefs \@empty \let\tabu@savels \relax
+ \tabu@Xcol \z@ \tabu@cnt \tw@
+ \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse
+ \global\setbox\@arstrutbox \box\@arstrutbox
+ \NC@list{\NC@do *}\tabu@textbar \tabu@lines
+ \NC@list\expandafter{\the\NC@list \NC@do X}%
+ \iftabu@siunitx % <siunitx S and s columns>
+ \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi
+ \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}%
+ \expandafter\def\expandafter\tabu@NC@list\expandafter{%
+ \the\expandafter\NC@list \tabu@NC@list}% % * | X S <original>
+ \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu
+ \expandafter \NC@do \expandafter\preamble
+ \the\NC@list \NC@do \tabu@rewritemiddle
+ \NC@do \tabu@rewritelast}%
+ \tabu@savedecl
+ \tabu@privatecolumns
+ \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle
+}% NC@rewrite@\tabu@rewritefirst
+\tabu@newcolumntype \tabu@rewritemiddle{%
+ \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast
+}% \NC@rewrite@\tabu@rewritemiddle
+\tabu@newcolumntype \tabu@rewritelast{%
+ \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne
+ \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle
+ \NC@do \tabu@rewritelast}%
+ \else \let\tabu@prev\tabu@temp
+ \fi
+ \ifcase \tabu@cnt \expandafter\tabu@endrewrite
+ \else \expandafter\NC@find \expandafter\tabu@rewritemiddle
+ \fi
+}% \NC@rewrite@\tabu@rewritelast
+%% Choosing the strategy --------------------------------------------
+\def\tabu@endrewrite {%
+ \let\tabu@temp \NC@find
+ \ifx \@arrayright\relax \let\@arrayright \@empty \fi
+ \count@=%
+ \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print
+ \iftabu@measuring
+ \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
+ \tabu@target \csname tabu@\the\tabu@nested.T\endcsname
+ \tabucolX \csname tabu@\the\tabu@nested.X\endcsname
+ \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}%
+ \fi
+ \else\iftabu@measuring 4 % X columns
+ \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer
+ \tabu@target \the\tabu@target
+ \tabu@spreadtarget \the\tabu@spreadtarget}%
+ \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}%
+ \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}%
+ \let\tabu@Xcoefs \relax
+ \else\ifcase\tabu@nested \thr@@ % outer, no X
+ \global\let\tabu@afterendpar \relax
+ \else \@ne % inner, no X, outer in mode 1 or 2
+ \fi
+ \ifdefined\tabu@usetabu
+ \else \ifdim\tabu@target=\z@
+ \else \let\tabu@temp \tabu@extracolsep
+ \fi\fi
+ \fi
+ \fi
+ \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}%
+ \tabu@temp
+}% \tabu@endrewrite
+\def\tabu@extracolsep{\@defaultunits \expandafter\let
+ \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil
+ \ifx \tabu@temp\@sptoken
+ \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep
+ \else
+ \edef\tabu@temp{\noexpand\NC@find
+ \if |\noexpand\tabu@temp @%
+ \else\if !\noexpand\tabu@temp @%
+ \else !%
+ \fi\fi
+ {\noexpand\extracolsep\noexpand\@flushglue}}%
+ \fi
+ \tabu@temp
+}% \tabu@extrac@lsep
+%% Implementing the strategy ----------------------------------------
+\long\def\tabu@pream #1\@preamble {%
+ \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup
+ \NC@list\expandafter {\tabu@NC@list}% in case of nesting...
+ \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi
+ \let\tabu@savedpreamble \@preamble
+ \global\let\tabu@elapsedtime \relax
+ \tabu@thebody ={#1\tabu@aftergroupcleanup}%
+ \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody
+ \@preamble}%
+ \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
+ \tabu@select
+}% \tabu@pream
+\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{%
+ \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup
+ \NC@list\expandafter {\tabu@NC@list}% in case of nesting...
+ \let\tabu@savedpreamble \@preamble
+ \global\let\tabu@elapsedtime \relax
+ \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}%
+ \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
+ \tabu@select
+}% \tabu@longpream
+\def\tabu@select {%
+ \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi
+ \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi
+ \ifcase \count@
+ \global\let\tabu@elapsedtime \relax
+ \tabu@seteverycr
+ \expandafter \tabuthepreamble % vertical adjustment (inherited from outer)
+ \or % exit in vertical measure + struts per cell because no X and outer in mode 3
+ \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
+ \def\tabu@cellralign{\tabu@verticalspacing}%
+ \tabu@seteverycr
+ \expandafter \tabuthepreamble
+ \or % exit without measure because no X and outer in mode 4
+ \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
+ \tabu@seteverycr
+ \expandafter \tabuthepreamble
+ \else % needs trials
+ \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
+ \tabu@savecounters
+ \expandafter \tabu@setstrategy
+ \fi
+}% \tabu@select
+\def\tabu@@ {\gdef\tabu@mkpreambuffer}
+%% Protections to set up before trials ------------------------------
+\def\tabu@setstrategy {\begingroup % <trials group>
+ \tabu@trialh@@k \tabu@cnt \z@ % number of trials
+ \hbadness \@M \let\hbadness \@tempcnta
+ \hfuzz \maxdimen \let\hfuzz \@tempdima
+ \let\write \tabu@nowrite\let\GenericError \tabu@GenericError
+ \let\savetabu \@gobble \let\tabudefaulttarget \linewidth
+ \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote
+ \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor
+ \let\tabu@aftergroupcleanup \relax % only after the last trial
+ \tabu@mkpreambuffer
+ \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init
+ \def\tabu@lasttry{\m@ne\p@}\fi
+ \begingroup \iffalse{\fi \ifnum0=`}\fi
+ \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi %
+ \tabu@collectbody \tabu@strategy %
+}% \tabu@setstrategy
+\def\tabu@savecounters{%
+ \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}%
+ \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax
+}% \tabu@savecounters
+\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0)
+ \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs
+ \ifdim \dimen@>\z@
+ \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax
+ \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
+ \fi
+}% \tabucolX@init
+\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum
+ \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@
+ \else -#2\p@ \tabu@negcoeftrue
+ \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax
+ \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
+ \tabu@wddef{#1}{0pt}%
+ \fi
+}% \tabu@Xinit
+%% Collecting the environment body ----------------------------------
+\long\def\tabu@collectbody #1#2\end #3{%
+ \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}%
+ \ifx \tabu@stack\@empty
+ \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}%
+ \def\tabu@end@envir{\end{#3}}%
+ \iftabuscantokens
+ \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}%
+ \else \def\tabu@endenvir {\let\endarray \@empty
+ \end{#3}\tabu@gobbleX}%
+ \fi
+ \else \def\tabu@endenvir {\end{#3}}\fi}%
+ \let\tabu@collectbody \tabu@endofcollect
+ \else\def\tabu@temp{#3}%
+ \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }%
+ \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}%
+ \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}%
+ \else \toks@\expandafter{\the\toks@ #2\end{#3}}%
+ \fi\fi\fi
+ \fi
+ \tabu@collectbody{#1}%
+}% \tabu@collectbody
+\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}%
+\def\tabu@endofcollect #1{\ifnum0=`{}\fi
+ \expandafter\endgroup \the\toks@ #1%
+}% \tabu@endofcollect
+%% The trials: switching between strategies -------------------------
+\def\tabu@strategy {\relax % stops \count@ assignment !
+ \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished)
+ \expandafter \tabu@endoftrials
+ \or % case 1 = exit in vertical measure (outer in mode 3)
+ \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}%
+ \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}%
+ \expandafter \tabu@endoftrials
+ \or % case 2 = exit with a rule replacing the table (outer in mode 4)
+ \expandafter \tabu@quickend
+ \or % case 3 = outer is in mode 3 because of no X
+ \begingroup
+ \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
+ \def\tabu@cellralign{\tabu@verticalspacing}%
+ \expandafter \tabu@measuring
+ \else % case 4 = horizontal measure
+ \begingroup
+ \global\let\tabu@elapsedtime \tabu@message@etime
+ \long\def\multicolumn##1##2##3{\multispan{##1}}%
+ \let\tabu@startpboxORI \@startpbox
+ \iftabu@spread
+ \def\tabu@naturalXmax {\z@}%
+ \let\tabu@naturalXmin \tabu@naturalXmax
+ \tabu@evr{\global\tabu@naturalX \z@}%
+ \let\@startpbox \tabu@startpboxmeasure
+ \else\iftabu@negcoef
+ \let\@startpbox \tabu@startpboxmeasure
+ \else \let\@startpbox \tabu@startpboxquick
+ \fi\fi
+ \expandafter \tabu@measuring
+ \fi
+}% \tabu@strategy
+\def\tabu@measuring{\expandafter \tabu@trial \expandafter
+ \count@ \the\count@ \tabu@endtrial
+}% \tabu@measuring
+\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi}
+\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
+ \ifx \tabu@savecounters\relax \else
+ \let\tabu@savecounters \relax \tabu@clckpt \fi
+ $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
+ \expandafter{\expandafter \tabuthepreamble
+ \the\tabu@thebody
+ \csname tabu@adl@endtrial\endcsname
+ \endarray}$\egroup % got \tabu@box
+}% \tabu@shorttrial
+\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
+ \ifx \tabu@savecounters\relax \else
+ \let\tabu@savecounters \relax \tabu@clckpt \fi
+ \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
+ \expandafter{\expandafter \tabuthepreamble
+ \the\tabu@thebody
+ \tabuendlongtrial}\egroup % got \tabu@box
+}% \tabu@longtrial
+\def\tabuendlongtrial{% no @ allowed for \scantokens
+ \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne
+ \LT@get@widths
+}% \tabuendlongtrial
+\def\tabu@adl@endtrial{% <arydshln in nested trials - problem for global column counters!>
+ \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails !
+\def\tabu@seteverycr {\tabu@reset
+ \everycr \expandafter{\the\everycr \tabu@everycr}%
+ \let\everycr \tabu@noeverycr % <for ialign>
+}% \tabu@seteverycr
+\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@}
+\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr}
+\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi}
+\def\tabu@endoftrials {%
+ \iftabuscantokens \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi
+ {\expandafter \tabu@closetrialsgroup \expandafter
+ \tabu@rescan \expandafter{%
+ \expandafter\tabuthepreamble
+ \the\expandafter\tabu@thebody
+ \iftabu@long \else \endarray \fi}}
+ {\expandafter\tabu@closetrialsgroup \expandafter
+ \tabuthepreamble
+ \the\tabu@thebody}%
+ \tabu@endenvir % Finish !
+}% \tabu@endoftrials
+\def\tabu@closetrialsgroup {%
+ \toks@\expandafter{\tabu@endenvir}%
+ \edef\tabu@bufferX{\endgroup
+ \tabucolX \the\tabucolX
+ \tabu@target \the\tabu@target
+ \tabu@cnt \the\tabu@cnt
+ \def\noexpand\tabu@endenvir{\the\toks@}%
+ %Quid de \@halignto = \tabu@halignto ??
+ }% \tabu@bufferX
+ \tabu@bufferX
+ \ifcase\tabu@nested % print out (outer in mode 0)
+ \global\tabu@cnt \tabu@cnt
+ \tabu@evr{\tabu@verticaldynamicadjustment}%
+ \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty
+ \let\@finalstrut \tabu@finalstrut
+ \else % vertical measure of nested tabu
+ \tabu@evr{\tabu@verticalinit}%
+ \tabu@celllalign@def{\tabu@verticalmeasure}%
+ \def\tabu@cellralign{\tabu@verticalspacing}%
+ \fi
+ \tabu@clckpt \let\@halignto \tabu@halignto
+ \let\@halignto \@empty
+ \tabu@seteverycr
+ \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@
+ \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts)
+ \fi\fi
+}% \tabu@closetrialsgroup
+\def\tabu@quickend {\expandafter \endgroup \expandafter
+ \tabu@target \the\tabu@target \tabu@quickrule
+ \let\endarray \relax \tabu@endenvir
+}% \tabu@quickend
+\def\tabu@endtrial {\relax % stops \count@ assignment !
+ \ifcase \count@ \tabu@err % case 0 = impossible here
+ \or \tabu@err % case 1 = impossible here
+ \or \tabu@err % case 2 = impossible here
+ \or % case 3 = outer goes into mode 0
+ \def\tabu@bufferX{\endgroup}\count@ \z@
+ \else % case 4 = outer goes into mode 3
+ \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3)
+ \else \tabu@arith % or 2 (outer in mode 4)
+ \fi
+ \count@=%
+ \ifcase\tabu@nested \thr@@ % outer goes into mode 3
+ \else\iftabu@measuring \tw@ % outer is in mode 4
+ \else \@ne % outer is in mode 3
+ \fi\fi
+ \edef\tabu@bufferX{\endgroup
+ \tabucolX \the\tabucolX
+ \tabu@target \the\tabu@target}%
+ \fi
+ \expandafter \tabu@bufferX \expandafter
+ \count@ \the\count@ \tabu@strategy
+}% \tabu@endtrial
+\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}}
+%% The algorithms: compute the widths / stop or go on ---------------
+\def\tabu@arithnegcoef {%
+ \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs
+}% \tabu@arithnegcoef
+\def\tabu@arith@negcoef #1#2{%
+ \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition
+ \advance\@tempdima #2\tabucolX
+ \else
+ \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated
+ \advance\dimen@ -#2\p@
+ \advance\@tempdima -#2\tabucolX
+ \else
+ \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised
+ \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised
+ \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target)
+ \fi
+ \fi
+ \fi
+}% \tabu@arith@negcoef
+\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@
+ \ifdim \@tempdima=\z@
+ \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}%
+ \else
+ \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2}
+ *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}%
+ \fi
+}% \tabu@givespace
+\def\tabu@arith {\advance\tabu@cnt \@ne
+ \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi
+ \tabu@arithnegcoef
+ \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % <incompressible material>
+ \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax
+ \tabu@message{\tabu@message@arith}%
+ \ifdim \tabu@DELTA <\tabu@hfuzz
+ \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ?
+ \let\tabu@ \tabu@givespace \tabu@Xcoefs
+ \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message
+ \else % already converged: nothing to do but nearly impossible...
+ \fi
+ \tabucolX \maxdimen
+ \tabu@measuringfalse
+ \else % need for narrower X columns
+ \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax
+ \tabu@measuringtrue
+ \@whilesw \iftabu@measuring\fi {%
+ \advance\tabu@cnt \@ne
+ \tabu@arithnegcoef
+ \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here
+ \tabu@message{\tabu@header
+ \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
+ \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
+ \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else
+ \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@
+ \fi}%
+ \ifdim -\tabu@DELTA<\tabu@hfuzz
+ \advance\@tempdima \@tempdimb % for message
+ \tabu@measuringfalse
+ \else
+ \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax
+ \fi
+ }%
+ \fi
+ \tabu@message{\tabu@message@reached}%
+ \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt
+ \tabucolX \the\tabucolX
+ \tabu@target \the\tabu@target}%
+}% \tabu@arith
+\def\tabu@spreadarith {%
+ \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs
+ \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}%
+ \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax
+ \iftabu@measuring
+ \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
+ \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}%
+ \else
+ \tabu@message{\tabu@message@spreadarith}%
+ \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target
+ \tabu@message{(tabu) spread
+ \ifdim \@tempdimc>\tabu@target useless here: default target used%
+ \else too large: reduced to fit default target\fi.}%
+ \else
+ \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
+ \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}%
+ \fi
+ \begingroup \let\tabu@wddef \@gobbletwo
+ \@tempdimb \@tempdima
+ \tabucolX@init
+ \tabu@arithnegcoef
+ \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax
+ \expandafter\endgroup \expandafter\tabucolX \the\tabucolX
+ \tabu@arith
+ \fi
+}% \tabu@spreadarith
+\def\tabu@spread@arith #1#2{%
+ \ifdim #2\p@>\z@ \advance\dimen@ #2\p@
+ \else \advance\@tempdima \tabu@wd{#1}\relax
+ \fi
+}% \tabu@spread@arith
+%% Reporting in the .log file ---------------------------------------
+\def\tabu@message@defaulttarget{%
+ \ifnum\tabu@nested=\z@^^J(tabu) Default target:
+ \ifx\tabudefaulttarget\linewidth \string\linewidth
+ \ifdim \tabu@thetarget=\linewidth \else
+ -\the\dimexpr\linewidth-\tabu@thetarget\fi =
+ \else\ifx\tabudefaulttarget\linegoal\string\linegoal=
+ \fi\fi
+ \else (tabu) Default target (nested): \fi
+ \the\tabu@target \on@line
+ \ifnum\tabu@nested=\z@ , page \the\c@page\fi}
+\def\tabu@message@target {^^J(tabu) Target specified:
+ \the\tabu@target \on@line, page \the\c@page}
+\def\tabu@message@arith {\tabu@header
+ \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
+ \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
+ \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else
+ \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@
+ \fi
+}% \tabu@message@arith
+\def\tabu@message@spreadarith {\tabu@spreadheader
+ \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@
+ \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@
+ \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@
+ \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@
+ \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target
+ \else \@tempdimc+\tabu@spreadtarget \fi
+ {}{}{}{}{}\@@}
+\def\tabu@message@negcoef #1#2{
+ \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]:
+ \space width = \tabu@wd {#1}
+ \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname
+ \ifdim -\tabu@pt#2\tabucolX<\tabu@target
+ < \number-\rem@pt#2 X
+ = \the\dimexpr -\tabu@pt#2\tabucolX \relax
+ \else
+ <= \the\tabu@target\space < \number-\rem@pt#2 X\fi}
+\def\tabu@message@reached{\tabu@header
+ ******* Reached Target:
+ hfuzz = \tabu@hfuzz\on@line\space *******}
+\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}%
+ \tabu@message{(tabu)\tabu@spaces Time elapsed during measure:
+ \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec
+ \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime)
+ -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax
+ *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space
+ cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}}
+\def\tabu@message@verticalsp {%
+ \ifdim \@tempdima>\tabu@ht
+ \ifdim \@tempdimb>\tabu@dp
+ \expandafter\expandafter\expandafter\string\tabu@ht =
+ \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@
+ \expandafter\expandafter\expandafter\string\tabu@dp =
+ \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J%
+ \else
+ \expandafter\expandafter\expandafter\string\tabu@ht =
+ \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J%
+ \fi
+ \else\ifdim \@tempdimb>\tabu@dp
+ \tabu@spaces\tabu@spaces\tabu@spaces
+ \expandafter\expandafter\expandafter\string\tabu@dp =
+ \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi
+ \fi
+}% \tabu@message@verticalsp
+\edef\tabu@spaces{\@spaces}
+\def\tabu@strippt{\expandafter\tabu@pt\the}
+{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}}
+\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr}
+\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt}
+\def\do #1{%
+ \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{%
+ \ifnum##1<10 #1 #1\else
+ \ifnum##1<100 #1 \else
+ \ifnum##1<\@m #1\fi\fi\fi
+ ##1.##2##3##4##5##6##7##8#1}%
+ \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }%
+ \def\tabu@titles{\ifnum \tabu@nested=\z@
+ (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target
+ #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}%
+ \def\tabu@spreadheader{%
+ (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min.
+ #1 New Target^^J%
+ (tabu) sprd}
+ \def\tabu@message@save {\begingroup
+ \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@}
+ \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt
+ \dimexpr####1\p@{ }{ }}}%
+ \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}%
+ \let\CT@arc@ \relax \let\@preamble \@gobble
+ \let\tabu@savedpream \@firstofone
+ \let\tabu@savedparams \@firstofone
+ \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}%
+ \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}%
+ \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}%
+ \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}%
+ \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}%
+ \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}%
+ \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}%
+ \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}%
+ \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}%
+ \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}%
+ \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }%
+ \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}%
+ \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}%
+ \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}%
+ \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}%
+ \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}%
+ \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}%
+ \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}%
+ \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}%
+ \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}%
+ \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo
+ \tabu@message{%
+ (tabu) \string\savetabu{\tabu@temp}: \on@line^^J%
+ \tabu@usetabu \@nil^^J}%
+ \endgroup}
+}\do{ }
+%% Measuring the natural width (varwidth) - store the results -------
+\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop
+ \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}%
+ \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ?
+ \iftabu@spread \else % if spread -> measure
+ \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure
+ \let\@startpbox \tabu@startpboxORI % restore immediately (nesting)
+ \tabu@measuringtrue % for the quick option...
+ \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi
+ \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target
+ \tabu@target=\tabu@temp\tabucolX \fi\fi
+ \setbox\tabu@box \hbox \bgroup
+ \begin{varwidth}\tabu@target
+ \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width...
+ \narrowragged \arraybackslash \parfillskip \@flushglue
+ \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi
+ \bgroup \aftergroup\tabu@endpboxmeasure
+ \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi
+ \else \expandafter\@gobble
+ \tabu@startpboxquick{#1}% \@gobble \bgroup
+ \fi
+}% \tabu@startpboxmeasure
+\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty
+ \bgroup\color@begingroup}
+\def\tabu@endpboxmeasure {%
+ \@finalstrut \@arstrutbox
+ \end{varwidth}\egroup % <got my \tabu@box>
+ \ifdim \tabu@temp\p@ <\z@ % neg coef
+ \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box
+ \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}%
+ \tabu@debug{\tabu@message@endpboxmeasure}%
+ \fi
+ \else % spread coef>0
+ \global\advance \tabu@naturalX \wd\tabu@box
+ \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax
+ \ifdim \tabu@naturalXmax <\tabu@naturalX
+ \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi
+ \ifdim \tabu@naturalXmin <\@tempdima
+ \xdef\tabu@naturalXmin {\the\@tempdima}\fi
+ \fi
+ \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target
+}% \tabu@endpboxmeasure
+\def\tabu@wddef #1{\expandafter\xdef
+ \csname tabu@\the\tabu@nested.W\number#1\endcsname}
+\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname}
+\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd
+ \the\tabu@Xcol. X[\tabu@temp]:
+ target = \the\tabucolX \space
+ \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol
+ =\tabu@wd\tabu@Xcol
+}% \tabu@message@endpboxmeasure
+\def\tabu@startpboxquick {\bgroup
+ \let\@startpbox \tabu@startpboxORI % restore immediately
+ \let\tabu \tabu@quick % \begin is expanded before...
+ \expandafter\@gobble \@startpbox % gobbles \bgroup
+}% \tabu@startpboxquick
+\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi
+ \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick
+}% \tabu@quick
+\def\tabu@endquick {%
+ \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else
+ \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax
+ \endgroup
+ \else \let\endtabu \relax
+ \tabu@end@envir
+ \fi
+}% \tabu@quick
+\def\tabu@endtabu {\end{tabu}}
+\def\tabu@endtabus {\end{tabu*}}
+%% Measuring the heights and depths - store the results -------------
+\def\tabu@verticalmeasure{\everypar{}%
+ \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group
+ \setbox\tabu@box =\hbox\bgroup
+ \let\tabu@verticalspacing \tabu@verticalsp@lcr
+ \d@llarbegin % after \hbox ...
+ \else
+ \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop
+ \else\ifnum\currentgrouptype=12\vcenter
+ \else\vbox\fi\fi}%
+ \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup
+ \let\tabu@verticalspacing \tabu@verticalsp@pmb
+ \fi
+}% \tabu@verticalmeasure
+\def\tabu@verticalsp@lcr{%
+ \d@llarend \egroup % <got my \tabu@box>
+ \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
+ \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
+ \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
+ \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi
+ \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi
+ \noindent\vrule height\@tempdima depth\@tempdimb
+}% \tabu@verticalsp@lcr
+\def\tabu@verticalsp@pmb{% inserts struts as needed
+ \par \expandafter\egroup
+ \expandafter$\expandafter
+ \egroup \expandafter
+ \@tempdimc \the\prevdepth
+ \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
+ \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
+ \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
+ \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi
+ \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi
+ \let\@finalstrut \@gobble
+ \hrule height\@tempdima depth\@tempdimb width\hsize
+%% \box\tabu@box
+}% \tabu@verticalsp@pmb
+
+\def\tabu@verticalinit{%
+ \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset !
+ \advance\c@taburow \@ne
+ \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}%
+ \advance\c@taburow \m@ne
+}% \tabu@verticalinit
+\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
+\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
+\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
+\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
+\def\tabu@verticaldynamicadjustment {%
+ \advance\c@taburow \@ne
+ \extrarowheight \dimexpr\tabu@ht - \ht\strutbox
+ \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox
+ \let\arraystretch \@empty
+ \advance\c@taburow \m@ne
+}% \tabu@verticaldynamicadjustment
+\def\tabuphantomline{\crcr \noalign{%
+ {\globaldefs \@ne
+ \setbox\@arstrutbox \box\voidb@x
+ \let\tabu@@celllalign \tabu@celllalign
+ \let\tabu@@cellralign \tabu@cellralign
+ \let\tabu@@cellleft \tabu@cellleft
+ \let\tabu@@cellright \tabu@cellright
+ \let\tabu@@thevline \tabu@thevline
+ \let\tabu@celllalign \@empty
+ \let\tabu@cellralign \@empty
+ \let\tabu@cellright \@empty
+ \let\tabu@cellleft \@empty
+ \let\tabu@thevline \relax}%
+ \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}%
+ \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr
+ \noalign{\tabu@rearstrut
+ {\globaldefs\@ne
+ \let\tabu@celllalign \tabu@@celllalign
+ \let\tabu@cellralign \tabu@@cellralign
+ \let\tabu@cellleft \tabu@@cellleft
+ \let\tabu@cellright \tabu@@cellright
+ \let\tabu@thevline \tabu@@thevline}}}%
+ \expandafter}\the\toks@
+}% \tabuphantomline
+%% \firsthline and \lasthline corrections ---------------------------
+\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}}
+\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline}
+\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}}
+\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline}
+\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument)
+ \noalign{\ifnum0=`}\fi
+ {\CT@arc@\hrule height\arrayrulewidth}%
+ \futurelet \tabu@temp \tabu@xhline
+}% \tabu@hline
+\def\tabu@xhline{%
+ \ifx \tabu@temp \hline
+ {\ifx \CT@drsc@\relax \vskip
+ \else\ifx \CT@drsc@\@empty \vskip
+ \else \CT@drsc@\hrule height
+ \fi\fi
+ \doublerulesep}%
+ \fi
+ \ifnum0=`{\fi}%
+}% \tabu@xhline
+\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@
+ \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}%
+ \tabu@hlineAZsurround
+}% \tabu@hlineAZ
+\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{%
+ \extratabsurround #1\let\tabucline \tabucline@scan
+ \let\hline \tabu@hlinescan \let\firsthline \hline
+ \let\cline \tabu@clinescan \let\lasthline \hline
+ \expandafter \futurelet \expandafter \tabu@temp
+ \expandafter \tabu@nexthlineAZ \tabu@temp
+}% \tabu@hlineAZsurround
+\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline}
+\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}}
+\def\tabucline@scan{\@testopt \tabucline@sc@n {}}
+\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}}
+\def\tabu@nexthlineAZ{%
+ \ifx \tabu@temp\hline \else
+ \ifx \tabu@temp\cline \else
+ \ifx \tabu@temp\tabucline \else
+ \tabu@hlinecorrection
+ \fi\fi\fi
+}% \tabu@nexthlineAZ
+\def\tabu@xhlineAZ #1{%
+ \toks@\expandafter{\the\toks@ #1}%
+ \@tempdimc \tabu@thick % The last line width
+ \ifcase\count@ \@tempdimb \tabu@thick % The first line width
+ \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax
+ \fi
+ \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ
+}% \tabu@xhlineAZ
+\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1
+ \@tempdima \dimexpr \ht\@arstrutbox+\dimen@
+ \edef\firsthline{% <local in \noalign>
+ \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
+ height \the\dimexpr\@tempdima+\extratabsurround
+ depth \dp\@arstrutbox
+ width \tabustrutrule}\hss}\cr
+ \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb
+ +\dp\@arstrutbox \relax}%
+ \the\toks@
+ }\ifnum0=`{\fi
+ \expandafter}\firsthline % we are then !
+}% \tabu@firsthlinecorrection
+\def\tabu@lasthlinecorrection{%
+ \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc
+ \edef\lasthline{% <local in \noalign>
+ \the\toks@
+ \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}%
+ \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
+ depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@
+ +\extratabsurround-\@tempdimc
+ height \z@
+ width \tabustrutrule}\hss}\cr
+ }\ifnum0=`{\fi
+ \expandafter}\lasthline % we are then !
+}% \tabu@lasthlinecorrection
+\def\tabu@LT@@hline{%
+ \ifx\LT@next\hline
+ \global\let\LT@next \@gobble
+ \ifx \CT@drsc@\relax
+ \gdef\CT@LT@sep{%
+ \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}%
+ \else
+ \gdef\CT@LT@sep{%
+ \multispan\LT@cols{%
+ \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}%
+ \fi
+ \else
+ \global\let\LT@next\empty
+ \gdef\CT@LT@sep{%
+ \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}%
+ \fi
+ \ifnum0=`{\fi}%
+ \multispan\LT@cols
+ {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
+ \CT@LT@sep
+ \multispan\LT@cols
+ {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
+ \noalign{\penalty\@M}%
+ \LT@next
+}% \tabu@LT@@hline
+%% Horizontal lines : \tabucline ------------------------------------
+\let\tabu@start \@tempcnta
+\let\tabu@stop \@tempcntb
+\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline}
+\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}%
+ \ifnum \tabu@stop<\z@ \toks@{}%
+ \else \tabu@clinearg{#1}\tabu@thestyle
+ \edef\tabucline{\toks@{%
+ \ifnum \tabu@start>\z@ \omit
+ \tabu@multispan\tabu@start {\span\omit}&\fi
+ \omit \tabu@multispan\tabu@stop {\span\omit}%
+ \tabu@thehline\cr
+ }}\tabucline
+ \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}%
+ \fi
+ \futurelet \tabu@temp \tabu@xcline
+}% \tabu@cline
+\def\tabu@clinearg #1{%
+ \ifx\\#1\\\let\tabu@thestyle \tabu@ls@
+ \else \@defaultunits \expandafter\let\expandafter\@tempa
+ \romannumeral-`\0#1\relax \@nnil
+ \ifx \hbox\@tempa \tabu@clinebox{#1}%
+ \else\ifx \box\@tempa \tabu@clinebox{#1}%
+ \else\ifx \vbox\@tempa \tabu@clinebox{#1}%
+ \else\ifx \vtop\@tempa \tabu@clinebox{#1}%
+ \else\ifx \copy\@tempa \tabu@clinebox{#1}%
+ \else\ifx \leaders\@tempa \tabu@clineleads{#1}%
+ \else\ifx \cleaders\@tempa \tabu@clineleads{#1}%
+ \else\ifx \xleaders\@tempa \tabu@clineleads{#1}%
+ \else\tabu@getline {#1}%
+ \fi\fi\fi\fi\fi\fi\fi\fi
+ \fi
+}% \tabu@clinearg
+\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}}
+\def\tabu@clineleads #1{%
+ \let\tabu@thestyle \relax \let\tabu@leaders \@undefined
+ \gdef\tabu@thehrule{#1}}
+\def\tabu@thehline{\begingroup
+ \ifdefined\tabu@leaders
+ \noexpand\tabu@thehleaders
+ \else \noexpand\tabu@thehrule
+ \fi \endgroup
+}% \tabu@thehline
+\def\tabu@xcline{%
+ \ifx \tabu@temp\tabucline
+ \toks@\expandafter{\the\toks@ \noalign
+ {\ifx\CT@drsc@\relax \vskip
+ \else \CT@drsc@\hrule height
+ \fi
+ \doublerulesep}}%
+ \fi
+ \tabu@docline
+}% \tabu@xcline
+\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@}
+\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}%
+ \ifnum0=`{\fi}\aftergroup\tabu@doclineafter}
+\def\tabu@multispan #1#2{%
+ \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan
+ \else \expandafter\@gobbletwo
+ \fi {#1-1}{#2}%
+}% \tabu@multispan
+\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil}
+\def\tabu@start@stop #1-#2\@nnil{%
+ \@defaultunits \tabu@start\number 0#1\relax \@nnil
+ \@defaultunits \tabu@stop \number 0#2\relax \@nnil
+ \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne
+ \else\ifnum \tabu@stop=\z@ \tabu@nbcols
+ \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols
+ \else \tabu@stop
+ \fi\fi\fi
+ \advance\tabu@start \m@ne
+ \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi
+}% \tabu@start@stop
+%% Numbers: siunitx S columns (and \tabudecimal) -------------------
+\def\tabu@tabudecimal #1{%
+ \def\tabu@decimal{#1}\@temptokena{}%
+ \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces
+ \tabu@scandecimal
+}% \tabu@tabudecimal
+\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@}
+\def\tabu@skipdecimal#1{#1\tabu@scandecimal}
+\def\tabu@getdecimal@ignorespaces{%
+ \ifcase 0\ifx\tabu@temp\ignorespaces\else
+ \ifx\tabu@temp\@sptoken1\else
+ 2\fi\fi\relax
+ \let\tabu@getdecimal@ \tabu@getdecimal
+ \expandafter\tabu@skipdecimal
+ \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal
+ \else \expandafter\tabu@skipdecimal
+ \fi
+}% \tabu@getdecimal@ignorespaces
+\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}%
+ \tabu@scandecimal}
+\def\do#1{%
+ \def\tabu@get@decimalspace#1{%
+ \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}%
+}\do{ }
+\let\tabu@@tabudecimal \tabu@tabudecimal
+\def\tabu@getdecimal{%
+ \ifcase 0\ifx 0\tabu@temp\else
+ \ifx 1\tabu@temp\else
+ \ifx 2\tabu@temp\else
+ \ifx 3\tabu@temp\else
+ \ifx 4\tabu@temp\else
+ \ifx 5\tabu@temp\else
+ \ifx 6\tabu@temp\else
+ \ifx 7\tabu@temp\else
+ \ifx 8\tabu@temp\else
+ \ifx 9\tabu@temp\else
+ \ifx .\tabu@temp\else
+ \ifx ,\tabu@temp\else
+ \ifx -\tabu@temp\else
+ \ifx +\tabu@temp\else
+ \ifx e\tabu@temp\else
+ \ifx E\tabu@temp\else
+ \ifx\tabu@cellleft\tabu@temp1\else
+ \ifx\ignorespaces\tabu@temp1\else
+ \ifx\@sptoken\tabu@temp2\else
+ 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
+ \expandafter\tabu@get@decimal
+ \or \expandafter\tabu@skipdecimal
+ \or \expandafter\tabu@get@decimalspace
+ \else\expandafter\tabu@printdecimal
+ \fi
+}% \tabu@getdecimal
+\def\tabu@printdecimal{%
+ \edef\tabu@temp{\the\@temptokena}%
+ \ifx\tabu@temp\@empty\else
+ \ifx\tabu@temp\space\else
+ \expandafter\tabu@decimal\expandafter{\the\@temptokena}%
+ \fi\fi
+}% \tabu@printdecimal
+%% Verbatim inside X columns ----------------------------------------
+\def\tabu@verbatim{%
+ \let\verb \tabu@verb
+ \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd
+}% \tabu@verbatim
+\let\tabu@ltx@verb \verb
+\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb}
+\def\tabu@fancyvrb {%
+ \def\tabu@FV@DefineCheckEnd ##1{%
+ \def\tabu@FV@DefineCheckEnd{%
+ ##1% <original definition (if fancyvrb is loaded)>
+ \let\FV@CheckEnd \tabu@FV@CheckEnd
+ \let\FV@@CheckEnd \tabu@FV@@CheckEnd
+ \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd
+ \edef\FV@EndScanning{%
+ \def\noexpand\next{\noexpand\end{\FV@EnvironName}}%
+ \global\let\noexpand\FV@EnvironName\relax
+ \noexpand\next}%
+ \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}%
+ }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd}
+}% \tabu@fancyvrb
+\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil}
+\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}}
+\begingroup
+\catcode`\[1 \catcode`\]2
+\@makeother\{ \@makeother\}
+ \edef\x[\endgroup
+ \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3%
+ ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}}
+\def\tabu@FV@ListProcessLine #1{%
+ \hbox {%to \hsize{%
+ \kern\leftmargin
+ \hbox {%to \linewidth{%
+ \FV@LeftListNumber
+ \FV@LeftListFrame
+ \FancyVerbFormatLine{#1}\hss
+%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on)
+%% \FV@RightListFrame}%
+ \FV@RightListFrame
+ \FV@RightListNumber}%
+%% DG/SR modification end
+ \hss}}
+%% \savetabu --------------------------------------------------------
+\newcommand*\savetabu[1]{\noalign{%
+ \tabu@sanitizearg{#1}\tabu@temp
+ \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else
+ \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}%
+ \ifdefined\tabu@restored \expandafter\let
+ \csname tabu@saved@\tabu@temp \endcsname \tabu@restored
+ \else {\tabu@save}%
+ \fi
+ \fi}%
+}% \savetabu
+\def\tabu@save {%
+ \toks0\expandafter{\tabu@saved@}%
+ \iftabu@negcoef
+ \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}%
+ \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi
+ \toks1\expandafter{\tabu@savedpream}%
+ \toks2\expandafter{\tabu@savedpreamble}%
+ \let\@preamble \relax
+ \let\tabu@savedpream \relax \let\tabu@savedparams \relax
+ \edef\tabu@preamble{%
+ \def\noexpand\tabu@aligndefault{\tabu@align}%
+ \def\tabu@savedparams {\noexpand\the\toks0}%
+ \def\tabu@savedpream {\noexpand\the\toks1}}%
+ \edef\tabu@usetabu{%
+ \def\@preamble {\noexpand\the\toks2}%
+ \tabu@target \the\tabu@target \relax
+ \tabucolX \the\tabucolX \relax
+ \tabu@nbcols \the\tabu@nbcols \relax
+ \def\noexpand\tabu@aligndefault{\tabu@align}%
+ \def\tabu@savedparams {\noexpand\the\toks0}%
+ \def\tabu@savedpream {\noexpand\the\toks1}}%
+ \let\tabu@aligndefault \relax \let\@sharp \relax
+ \edef\@tempa{\noexpand\tabu@s@ved
+ {\tabu@usetabu}
+ {\tabu@preamble}
+ {\the\toks1}}\@tempa
+ \tabu@message@save
+}% \tabu@save
+\long\def\tabu@s@ved #1#2#3{%
+ \def\tabu@usetabu{#1}% <for \tabu@message@save>
+ \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{%
+ \ifodd ##1% \usetabu
+ \tabu@measuringfalse \tabu@spreadfalse % Just in case...
+ \gdef\tabu@usetabu {%
+ \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi
+ \global\let\tabu@usetabu \@undefined
+ \def\@halignto {to\tabu@target}%
+ #1%
+ \ifx \tabu@align\tabu@aligndefault@text
+ \ifnum \tabu@nested=\z@
+ \let\tabu@align \tabu@aligndefault \fi\fi}%
+ \else % \preamble
+ \gdef\tabu@preamble {%
+ \global\let\tabu@preamble \@undefined
+ #2%
+ \ifx \tabu@align\tabu@aligndefault@text
+ \ifnum \tabu@nested=\z@
+ \let\tabu@align \tabu@aligndefault \fi\fi}%
+ \fi
+ #3}%
+}% \tabu@s@ved
+\def\tabu@aligndefault@text {\tabu@aligndefault}%
+\def\tabu@warn@usetabu {\PackageWarning{tabu}
+ {Specifying a target with \string\usetabu\space is useless
+ \MessageBreak The target cannot be changed!}}
+\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi}
+\def\tabu@savewarn#1#2{\PackageInfo{tabu}
+ {User-name `#1' already used for \string\savetabu
+ \MessageBreak #2}}%
+\def\tabu@saveerr#1{\PackageError{tabu}
+ {User-name `#1' is unknown for \string\usetabu
+ \MessageBreak I cannot restore an unknown preamble!}\@ehd}
+%% \rowfont ---------------------------------------------------------
+\newskip \tabu@cellskip
+\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi
+ {\ifnum0=`}\fi \tabu@row@font}
+\newcommand*\tabu@row@font[2][]{%
+ \ifnum7=\currentgrouptype
+ \global\let\tabu@@cellleft \tabu@cellleft
+ \global\let\tabu@@cellright \tabu@cellright
+ \global\let\tabu@@celllalign \tabu@celllalign
+ \global\let\tabu@@cellralign \tabu@cellralign
+ \global\let\tabu@@rowfontreset\tabu@rowfontreset
+ \fi
+ \global\let\tabu@rowfontreset \tabu@rowfont@reset
+ \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}%
+ \ifcsname tabu@cell@#1\endcsname % row alignment
+ \csname tabu@cell@#1\endcsname \fi
+ \ifnum0=`{\fi}% end of group / noalign group
+}% \rowfont
+\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}%
+\def\tabu@rowfont@reset{%
+ \global\let\tabu@rowfontreset \tabu@@rowfontreset
+ \global\let\tabu@cellleft \tabu@@cellleft
+ \global\let\tabu@cellright \tabu@@cellright
+ \global\let\tabu@cellfont \@empty
+ \global\let\tabu@celllalign \tabu@@celllalign
+ \global\let\tabu@cellralign \tabu@@cellralign
+}% \tabu@@rowfontreset
+\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl
+%% \tabu@prepnext@tok -----------------------------------------------
+\newif \iftabu@cellright
+\def\tabu@prepnext@tok{%
+ \ifnum \count@<\z@ % <first initialisation>
+ \@tempcnta \@M % <not initialized by array.sty>
+ \tabu@nbcols\z@
+ \let\tabu@fornoopORI \@fornoop
+ \tabu@cellrightfalse
+ \else
+ \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left
+ \advance \tabu@nbcols \@ne
+ \iftabu@cellright % before-previous token is right and is finished
+ \tabu@cellrightfalse % <only once>
+ \tabu@righttok
+ \fi
+ \tabu@lefttok
+ \or % (case 1) previous token is right
+ \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop
+ \else % special column: do not change the token
+ \iftabu@cellright % before-previous token is right
+ \tabu@cellrightfalse
+ \tabu@righttok
+ \fi
+ \fi % \ifcase
+ \fi
+ \tabu@prepnext@tokORI
+}% \tabu@prepnext@tok
+\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@}
+\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{%
+ \ifx \in@#2\else
+ \let\@fornoop \tabu@fornoopORI
+ \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}%
+ \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}%
+ \expandafter\prepnext@tok
+ \fi
+}% \tabu@lastnoop
+\def\tabu@righttok{%
+ \advance \count@ \m@ne
+ \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}%
+ \advance \count@ \@ne
+}% \tabu@righttok
+\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign
+ \the\toks\count@ \tabu@cellleft}% after because of $
+}% \tabu@lefttok
+%% Neutralisation of glues ------------------------------------------
+\let\tabu@cellleft \@empty
+\let\tabu@cellright \@empty
+\tabu@celllalign@def{\tabu@cellleft}%
+\let\tabu@cellralign \@empty
+\def\tabu@cell@align #1#2#3{%
+ \let\tabu@maybesiunitx \toks@ \tabu@celllalign
+ \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}%
+ \toks@\expandafter{\tabu@cellralign #2}%
+ \xdef\tabu@cellralign{\the\toks@}%
+ \toks@\expandafter{\tabu@cellleft #3}%
+ \xdef\tabu@cellleft{\the\toks@}%
+}% \tabu@cell@align
+\def\tabu@cell@l{% force alignment to left
+ \tabu@cell@align
+ {\tabu@removehfil \raggedright \tabu@cellleft}% left
+ {\tabu@flush1\tabu@ignorehfil}% right
+ \raggedright
+}% \tabu@cell@l
+\def\tabu@cell@c{% force alignment to center
+ \tabu@cell@align
+ {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft}
+ {\tabu@flush{.5}\tabu@ignorehfil}
+ \centering
+}% \tabu@cell@c
+\def\tabu@cell@r{% force alignment to right
+ \tabu@cell@align
+ {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft}
+ \tabu@ignorehfil
+ \raggedleft
+}% \tabu@cell@r
+\def\tabu@cell@j{% force justification (for p, m, b columns)
+ \tabu@cell@align
+ {\tabu@justify\tabu@cellleft}
+ {}
+ \tabu@justify
+}% \tabu@cell@j
+\def\tabu@justify{%
+ \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip
+ \parfillskip\@flushglue
+}% \tabu@justify
+%% ragged2e settings
+\def\tabu@cell@L{% force alignment to left (ragged2e)
+ \tabu@cell@align
+ {\tabu@removehfil \RaggedRight \tabu@cellleft}
+ {\tabu@flush 1\tabu@ignorehfil}
+ \RaggedRight
+}% \tabu@cell@L
+\def\tabu@cell@C{% force alignment to center (ragged2e)
+ \tabu@cell@align
+ {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft}
+ {\tabu@flush{.5}\tabu@ignorehfil}
+ \Centering
+}% \tabu@cell@C
+\def\tabu@cell@R{% force alignment to right (ragged2e)
+ \tabu@cell@align
+ {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft}
+ \tabu@ignorehfil
+ \RaggedLeft
+}% \tabu@cell@R
+\def\tabu@cell@J{% force justification (ragged2e)
+ \tabu@cell@align
+ {\justifying \tabu@cellleft}
+ {}
+ \justifying
+}% \tabu@cell@J
+\def\tabu@flush#1{%
+ \iftabu@colortbl % colortbl uses \hfill rather than \hfil
+ \hskip \ifnum13<\currentgrouptype \stretch{#1}%
+ \else \ifdim#1pt<\p@ \tabu@cellskip
+ \else \stretch{#1}
+ \fi\fi \relax
+ \else % array.sty
+ \ifnum 13<\currentgrouptype
+ \hfil \hskip1sp \relax \fi
+ \fi
+}% \tabu@flush
+\let\tabu@hfil \hfil
+\let\tabu@hfill \hfill
+\let\tabu@hskip \hskip
+\def\tabu@removehfil{%
+ \iftabu@colortbl
+ \unkern \tabu@cellskip =\lastskip
+ \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip
+ \else \tabu@cellskip \z@skip
+ \fi
+ \else
+ \ifdim\lastskip=1sp\unskip\fi
+ \ifnum\gluestretchorder\lastskip =\@ne
+ \hfilneg % \hfilneg for array.sty but not for colortbl...
+ \fi
+ \fi
+}% \tabu@removehfil
+\def\tabu@ignorehfil{\aftergroup \tabu@nohfil}
+\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil
+ \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group
+}% \tabu@nohfil
+\def\tabu@colortblalignments {% if colortbl
+ \def\tabu@nohfil{%
+ \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group
+ \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff...
+ \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local
+}% \tabu@colortblalignments
+%% Taking care of footnotes and hyperfootnotes ----------------------
+\long\def\tabu@footnotetext #1{%
+ \edef\@tempa{\the\tabu@footnotes
+ \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}%
+ \global\tabu@footnotes\expandafter{\@tempa {#1}}}%
+\long\def\tabu@xfootnotetext [#1]#2{%
+ \global\tabu@footnotes\expandafter{\the\tabu@footnotes
+ \footnotetext [{#1}]{#2}}}
+\let\tabu@xfootnote \@xfootnote
+\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }}
+\long\def\tabu@Hy@xfootnote [#1]{%
+ \begingroup
+ \value\@mpfn #1\relax
+ \protected@xdef \@thefnmark {\thempfn}%
+ \endgroup
+ \@footnotemark \tabu@Hy@ftntxt {#1}%
+}% \tabu@Hy@xfootnote
+\long\def\tabu@Hy@ftntxt #1#2{%
+ \edef\@tempa{%
+ \the\tabu@footnotes
+ \begingroup
+ \value\@mpfn #1\relax
+ \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}%
+ \expandafter \noexpand \expandafter
+ \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}%
+ }%
+ \global\tabu@footnotes\expandafter{\@tempa {#2}%
+ \endgroup}%
+}% \tabu@Hy@ftntxt
+\long\def\tabu@Hy@footnotetext #1#2{%
+ \H@@footnotetext{%
+ \ifHy@nesting
+ \hyper@@anchor {#1}{#2}%
+ \else
+ \Hy@raisedlink{%
+ \hyper@@anchor {#1}{\relax}%
+ }%
+ \def\@currentHref {#1}%
+ \let\@currentlabelname \@empty
+ #2%
+ \fi
+ }%
+}% \tabu@Hy@footnotetext
+%% No need for \arraybackslash ! ------------------------------------
+\def\tabu@latextwoe {%
+\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
+\tabu@temp \tabu@centering \centering \arraybackslash
+\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash
+\tabu@temp \tabu@raggedright \raggedright \arraybackslash
+}% \tabu@latextwoe
+\def\tabu@raggedtwoe {%
+\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
+\tabu@temp \tabu@Centering \Centering \arraybackslash
+\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash
+\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash
+\tabu@temp \tabu@justifying \justifying \arraybackslash
+}% \tabu@raggedtwoe
+\def\tabu@normalcrbackslash{\let\\\@normalcr}
+\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{%
+ \expandafter\tabu@normalcrbackslash \@trivlist}}
+%% Utilities: \fbox \fcolorbox and \tabudecimal -------------------
+\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox}
+\def\tabu@beginfbox {\bgroup \kern\fboxsep
+ \bgroup\aftergroup\tabu@endfbox}
+\def\tabu@endfbox {\kern\fboxsep\egroup\egroup
+ \@frameb@x\relax}
+\def\tabu@color@b@x #1#2{\leavevmode \bgroup
+ \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}%
+ \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox
+}% \tabu@color@b@x
+\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup
+ \aftergroup\tabu@endcolor@b@x \set@color}
+\def\tabu@endcolor@b@x {\kern\fboxsep \egroup
+ \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@
+ \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@
+ \tabu@docolor@b@x \egroup
+}% \tabu@endcolor@b@x
+%% Corrections (arydshln, delarray, colortbl) -----------------------
+\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray
+ \iftabu@colortbl
+ \ifdefined\adl@array % <colortbl + arydshln>
+ \def\tabu@endarray{%
+ \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup %<original>
+ \@arrayright % <FC>
+ \gdef\@preamble{}}% <FC>
+ \else % <colortbl / no arydshln>
+ \def\tabu@endarray{%
+ \crcr \egroup \egroup %<original>
+ \@arrayright % <FC>
+ \gdef\@preamble{}\CT@end}%
+ \fi
+ \else
+ \ifdefined\adl@array % <arydshln / no colortbl>
+ \def\tabu@endarray{%
+ \adl@endarray \egroup \adl@arrayrestore \egroup %<original>
+ \@arrayright % <FC>
+ \gdef\@preamble{}}% <FC>
+ \else % <no arydshln / no colotbl + \@arrayright missing>
+ \PackageWarning{tabu}
+ {\string\@arrayright\space is missing from the
+ \MessageBreak definition of \string\endarray.
+ \MessageBreak Compatibility with delarray.sty is broken.}%
+ \fi\fi
+}% \tabu@fix@arrayright
+\def\tabu@adl@xarraydashrule #1#2#3{%
+ \ifnum\@lastchclass=\adl@class@start\else
+ \ifnum\@lastchclass=\@ne\else
+ \ifnum\@lastchclass=5 \else % <FC> @-arg (class 5) and !-arg (class 1)
+ \adl@leftrulefalse \fi\fi % must be treated the same
+ \fi
+ \ifadl@zwvrule\else \ifadl@inactive\else
+ \@addtopreamble{\vrule\@width\arrayrulewidth
+ \@height\z@ \@depth\z@}\fi \fi
+ \ifadl@leftrule
+ \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}%
+ {\number#1}#3}%
+ \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}%
+ {\number#2}#3}
+ \fi
+}% \tabu@adl@xarraydashrule
+\def\tabu@adl@act@endpbox {%
+ \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox
+ \egroup \egroup
+ \adl@colhtdp \box\adl@box \hfil
+}% \tabu@adl@act@endpbox
+\def\tabu@adl@fix {%
+ \let\adl@xarraydashrule \tabu@adl@xarraydashrule % <fix> arydshln
+ \let\adl@act@endpbox \tabu@adl@act@endpbox % <fix> arydshln
+ \let\adl@act@@endpbox \tabu@adl@act@endpbox % <fix> arydshln
+ \let\@preamerror \@preamerr % <fix> arydshln
+}% \tabu@adl@fix
+%% Correction for longtable' \@startbox definition ------------------
+%% => \everypar is ``missing'' : TeX should be in vertical mode
+\def\tabu@LT@startpbox #1{%
+ \bgroup
+ \let\@footnotetext\LT@p@ftntext
+ \setlength\hsize{#1}%
+ \@arrayparboxrestore
+ \everypar{%
+ \vrule \@height \ht\@arstrutbox \@width \z@
+ \everypar{}}%
+}% \tabu@LT@startpbox
+%% \tracingtabu and the package options ------------------
+\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}}
+\DeclareOption{linegoal}{%
+ \AtEndOfPackage{%
+ \RequirePackage{linegoal}[2010/12/07]%
+ \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX
+}}
+\DeclareOption{scantokens}{\tabuscantokenstrue}
+\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}}
+\def\tracingtabu {\begingroup\@ifnextchar=%
+ {\afterassignment\tabu@tracing\count@}
+ {\afterassignment\tabu@tracing\count@1\relax}}
+\def\tabu@tracing{\expandafter\endgroup
+ \expandafter\tabu@tr@cing \the\count@ \relax
+}% \tabu@tracing
+\def\tabu@tr@cing #1\relax {%
+ \ifnum#1>\thr@@ \let\tabu@tracinglines\message
+ \else \let\tabu@tracinglines\@gobble
+ \fi
+ \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG
+ \def\tabu@mkarstrut {\tabu@DBG@arstrut}%
+ \tabustrutrule 1.5\p@
+ \else \let\tabu@DBG \@gobble
+ \def\tabu@mkarstrut {\tabu@arstrut}%
+ \tabustrutrule \z@
+ \fi
+ \ifnum#1>\@ne \let\tabu@debug \message
+ \else \let\tabu@debug \@gobble
+ \fi
+ \ifnum#1>\z@
+ \let\tabu@message \message
+ \let\tabu@tracing@save \tabu@message@save
+ \let\tabu@starttimer \tabu@pdftimer
+ \else
+ \let\tabu@message \@gobble
+ \let\tabu@tracing@save \@gobble
+ \let\tabu@starttimer \relax
+ \fi
+}% \tabu@tr@cing
+%% Setup \AtBeginDocument
+\AtBeginDocument{\tabu@AtBeginDocument}
+\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined
+ \ifdefined\arrayrulecolor \tabu@colortbltrue % <colortbl>
+ \tabu@colortblalignments % different glues are used
+ \else \tabu@colortblfalse \fi
+ \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi
+ \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi
+ \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@
+ \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % <siunitx: ok>
+ \expandafter\ifx
+ \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax
+ \tabu@siunitxtrue
+ \else \let\tabu@maybesiunitx \@firstofone % <not siunitx: setup>
+ \let\tabu@siunitx \tabu@nosiunitx
+ \tabu@siunitxfalse
+ \fi
+ \ifdefined\adl@array % <arydshln>
+ \else \let\tabu@adl@fix \relax
+ \let\tabu@adl@endtrial \@empty \fi
+ \ifdefined\longtable % <longtable>
+ \else \let\longtabu \tabu@nolongtabu \fi
+ \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi
+ \csname\ifcsname ifHy@hyperfootnotes\endcsname % <hyperfootnotes>
+ ifHy@hyperfootnotes\else iffalse\fi\endcsname
+ \let\tabu@footnotetext \tabu@Hy@ftntext
+ \let\tabu@xfootnote \tabu@Hy@xfootnote \fi
+ \ifdefined\FV@DefineCheckEnd% <fancyvrb>
+ \tabu@fancyvrb \fi
+ \ifdefined\color % <color / xcolor>
+ \let\tabu@color \color
+ \def\tabu@leavevmodecolor ##1{%
+ \def\tabu@leavevmodecolor {\leavevmode ##1}%
+ }\expandafter\tabu@leavevmodecolor\expandafter{\color}%
+ \else
+ \let\tabu@color \tabu@nocolor
+ \let\tabu@leavevmodecolor \@firstofone \fi
+ \tabu@latextwoe
+ \ifdefined\@raggedtwoe@everyselectfont % <ragged2e>
+ \tabu@raggedtwoe
+ \else
+ \let\tabu@cell@L \tabu@cell@l
+ \let\tabu@cell@R \tabu@cell@r
+ \let\tabu@cell@C \tabu@cell@c
+ \let\tabu@cell@J \tabu@cell@j \fi
+ \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}%
+ \ifin@ \let\tabu@endarray \endarray
+ \else \tabu@fix@arrayright \fi% <fix for colortbl & arydshln (delarray)>
+ \everyrow{}%
+}% \tabu@AtBeginDocument
+\def\tabu@warn@cellspace{%
+ \PackageWarning{tabu}{%
+ Package cellspace has some limitations
+ \MessageBreak And redefines some macros of array.sty.
+ \MessageBreak Please use \string\tabulinesep\space to control
+ \MessageBreak vertical spacing of lines inside tabu environment}%
+}% \tabu@warn@cellspace
+%% tabu Package initialisation
+\tabuscantokensfalse
+\let\tabu@arc@G \relax
+\let\tabu@drsc@G \relax
+\let\tabu@evr@G \@empty
+\let\tabu@rc@G \@empty
+\def\tabu@ls@G {\tabu@linestyle@}%
+\let\tabu@@rowfontreset \@empty % <init>
+\let\tabu@@celllalign \@empty
+\let\tabu@@cellralign \@empty
+\let\tabu@@cellleft \@empty
+\let\tabu@@cellright \@empty
+\def\tabu@naturalXmin {\z@}
+\def\tabu@naturalXmax {\z@}
+\let\tabu@rowfontreset \@empty
+\def\tabulineon {4pt}\let\tabulineoff \tabulineon
+\tabu@everyrowtrue
+\ifdefined\pdfelapsedtime % <pdfTeX>
+ \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}%
+\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax
+\fi
+\tracingtabu=\z@
+\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@
+\tabulinestyle{}
+\taburowcolors{}
+\let\tabudefaulttarget \linewidth
+\ProcessOptions* % \ProcessOptions* is quicker !
+\endinput
+%%
+%% End of file `tabu.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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumphdr_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumphdr_8cpp.tex
new file mode 100644
index 0000000..2f7ac2a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumphdr_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__dumphdr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.1/src/utils/xb\+\_\+dumphdr.cpp File Reference}
+\label{xb__dumphdr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.1/src/utils/xb\_dumphdr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.1/src/utils/xb\_dumphdr.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__dumphdr_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__dumphdr_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{xb__dumphdr_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
+\index{xb\_dumphdr.cpp@{xb\_dumphdr.cpp}!main@{main}}
+\index{main@{main}!xb\_dumphdr.cpp@{xb\_dumphdr.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpix_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpix_8cpp.tex
new file mode 100644
index 0000000..b6d917e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__dumpix_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__dumpix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.1/src/utils/xb\+\_\+dumpix.cpp File Reference}
+\label{xb__dumpix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.1/src/utils/xb\_dumpix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.1/src/utils/xb\_dumpix.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__dumpix_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__dumpix_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{xb__dumpix_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
+\index{xb\_dumpix.cpp@{xb\_dumpix.cpp}!main@{main}}
+\index{main@{main}!xb\_dumpix.cpp@{xb\_dumpix.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
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/1Tdata/xbase/xbase64-4.1.4/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
new file mode 100644
index 0000000..d09d1b3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__blockread__save_8cpp.tex
@@ -0,0 +1,42 @@
+\hypertarget{xb__test__blockread__save_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.1/src/tests/xb\+\_\+test\+\_\+blockread\+\_\+save.cpp File Reference}
+\label{xb__test__blockread__save_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.1/src/tests/xb\_test\_blockread\_save.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.1/src/tests/xb\_test\_blockread\_save.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__save_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__save_8cpp_af68c3291a63fdf20ffa0e477460d148e}{My\+Dbf\+Rec}} \mbox{[}$\,$\mbox{]}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__blockread__save_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__blockread__save_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_blockread\_save.cpp@{xb\_test\_blockread\_save.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_blockread\_save.cpp@{xb\_test\_blockread\_save.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__save_8cpp_af68c3291a63fdf20ffa0e477460d148e}\label{xb__test__blockread__save_8cpp_af68c3291a63fdf20ffa0e477460d148e}}
+\index{xb\_test\_blockread\_save.cpp@{xb\_test\_blockread\_save.cpp}!MyDbfRec@{MyDbfRec}}
+\index{MyDbfRec@{MyDbfRec}!xb\_test\_blockread\_save.cpp@{xb\_test\_blockread\_save.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}}, 300, 0 \},}
+\DoxyCodeLine{ \{ \textcolor{stringliteral}{"{}"{}},0,0,0 \}}
+\DoxyCodeLine{ \}}
+
+\end{DoxyCode}
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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx2_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx2_8cpp.tex
new file mode 100644
index 0000000..921dfb6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__test__ndx2_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__ndx2_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+ndx2.cpp File Reference}
+\label{xb__test__ndx2_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_ndx2.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_ndx2.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__ndx2_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__ndx2_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__ndx2_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_ndx2.cpp@{xb\_test\_ndx2.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_ndx2.cpp@{xb\_test\_ndx2.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__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/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__zap_8cpp.tex b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__zap_8cpp.tex
new file mode 100644
index 0000000..43e396d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/doxygen/latex/xb__zap_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__zap_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.1/src/utils/xb\+\_\+zap.cpp File Reference}
+\label{xb__zap_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.1/src/utils/xb\_zap.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.1/src/utils/xb\_zap.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__zap_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__zap_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{xb__zap_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
+\index{xb\_zap.cpp@{xb\_zap.cpp}!main@{main}}
+\index{main@{main}!xb\_zap.cpp@{xb\_zap.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
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/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddAnIndex.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddAnIndex.txt
new file mode 100755
index 0000000..251caf8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddAnIndex.txt
@@ -0,0 +1,11 @@
+
+
+How to create an index
+
+1) Derive a child class from xbIx Pure Virtual Class
+
+2) Create header file
+3) Create cpp file
+
+4) SQL updates
+ - xbcrix.cpp
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddNewMemoFileType.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddNewMemoFileType.txt
new file mode 100755
index 0000000..a784d69
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/AddNewMemoFileType.txt
@@ -0,0 +1,9 @@
+
+
+How to create a new memo file format
+
+1) Derive a child class from xbMemo Pure Virtual Class
+
+2) Create header file
+3) Create cpp file
+4) Update CMakeLists.txt \ No newline at end of file
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/1Tdata/xbase/xbase64-4.1.4/docs/howto/Hacking.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/Hacking.txt
new file mode 100755
index 0000000..3447490
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/Hacking.txt
@@ -0,0 +1,28 @@
+
+
+How to modify the library:
+
+
+The library was redesigned with a structure in mind to allow additional
+dbf, memo and index files to be added relatively easily without trashing
+the underlying codebase.
+
+
+To add functionality to add a DBF, or tailor a particular dbf class,
+create a new derived class using the xbdbf class as a base class.
+The core xbdbf base class encompasses the DBASE III code base.
+
+At one time there was "Real Delete" processing embedded in the code. It
+was removed from the core classes because it would be incompatible with
+later versions of the xbase file structures. If you were interested in
+adding this back into the library, you could derive a new dbf class
+and add the mods into the new derived class, leaving the base class
+as it stands.
+
+
+To add additional memo functionality, create a new derived class from
+the xbMemo class.
+
+
+
+Update xbFile::DetermineXbaseVersion to identify Xbase file type \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/howto/Locking.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/Locking.txt
new file mode 100755
index 0000000..b3cc832
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/Locking.txt
@@ -0,0 +1,53 @@
+
+Xbase64 - Multi user / Record Locking
+
+
+
+If you are using the Xbase64 library in a multi user environment,
+
+The Record Locking functionality of Xbase64 is designed to work in an evironment
+where the files are not cached on a local client machine.
+
+If you are using the Xbase64 library in a multi user environment, you will need
+to verify that Oplocks are turned off for the files in question.
+
+Oplocks is short for Opportunistic Locking.
+
+
+If you are using Samba software as your file server software, you will
+need to add the following to your smb.conf config files.
+
+
+In the global section of the smb.conf file:
+
+[global]
+veto oplock files = /*.dbf/*.DBF/*.dbt/*.DBT/*.ndx/*.NDX/*.cdx/*.CDX/*.mdx/*.MDX
+
+
+Or you could set this at the share level
+[share_name]
+veto oplock files = /*.dbf/*.DBF/*.dbt/*.DBT/*.ndx/*.NDX/*.cdx/*.CDX/*.mdx/*.MDX
+
+
+Sometimes locking issues can be related to the network config, more than the programs
+For example, the locking logic might fail if the underlying file structure does not
+support it.
+
+Mac OSX does not support locking functionality on SMB / Samba shares
+Mac OSX does support locking functionality on NFS shares
+Per Apple, this is by design
+
+
+Function: xbase::SetMultiUser( xbTrue || xbFalse )
+
+ Use this function to turn multi user mode on or off.
+ This function needs to be called before any files are opened or created.
+ If this function is called after files are opened or created, the files
+ will need to be closed and reopened for this setting to take effect.
+
+ This setting turns file buffering on and off. In a single user environment,
+ set this switch to off to improve the performance of the application.
+
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/howto/mac_cmake_compile.txt b/1Tdata/xbase/xbase64-4.1.4/docs/howto/mac_cmake_compile.txt
new file mode 100755
index 0000000..4ec0ad6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/howto/mac_cmake_compile.txt
@@ -0,0 +1 @@
+cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagram.jpg b/1Tdata/xbase/xbase64-4.1.4/docs/html/Xbase64ClassDiagram.jpg
new file mode 100755
index 0000000..81bb539
--- /dev/null
+++ 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/1Tdata/xbase/xbase64-4.1.4/docs/html/gpl-3.0.txt b/1Tdata/xbase/xbase64-4.1.4/docs/html/gpl-3.0.txt
new file mode 100755
index 0000000..94a9ed0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/gpl-3.0.txt
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
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/1Tdata/xbase/xbase64-4.1.4/docs/html/xbab.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbab.html
new file mode 100755
index 0000000..809c2ea
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbab.html
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Bibliography</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H1><p align="center">Xbase DBMS Bibliography</p></H1>
+<p align="center">Page Updated 12/9/22</p><hr>
+
+Bachman, Erik<br>
+Xbase File Format Description / Erik Bachman, Roskilde, Denmark: Clickety
+Click Software, 1996-1998, 44 pages<br><br>
+
+Loomis, Mary:<br>
+The Database Book, Macmillan Publishing Company, 1987, New York, New York:
+ISBN 0-02-371760-2<br><br>
+
+Dorfman, Len:<br>
+Building C Libraries, Windcrest, 1990, Blue Ridge Summit, PA:
+ISBN 0-8306-3418-5<br><br>
+
+Eckel, Bruce:<br>
+Using C++, Osborne, McGraw-Hill, 1990, Berkeley, CA:
+ISBN 0-07-881522-3<br><br>
+
+Aho, Alfred: Hopcroft, John: Ullman, Jeffrey:<br>
+Data Structures and Algorithms, Addison-Wesley Publishing, 1983,
+Reading Massachusetts: ISBN 0-201-00023-7<br><br>
+
+Stevens, Al:<br>
+C Database Development, MIS Press, 1991, Portland Oregon:
+ISBN 1-55828-136-3<br><br>
+
+Pressman, Roger:<br>
+Software Engineering: A Practitioner's Approach, McGraw-Hill, 1982,
+New York ISBN 0-07-050781-3<br><br>
+
+Chou, George Tsu-der:<br>
+2nd Edition dBase III Plus Handbook: Que Corporation, 1986,
+Indianapolis, Indiana ISBN 0-88022-269-7<br><br>
+
+Krumm, Rob:<br>
+Understanding and Using dBase II & III, Brady Communications Company, Inc,
+1985, Bowie MD ISBN 0-89303-917-9<br><br>
+
+Hursch, Jack: Hursch, Carulyn:<br>
+dBase IV Essentials, Windcrest, 1988, Blue Ridge Summit, PA
+ISBN 0-8306-9616-4<br><br>
+
+Borland:<br>
+Turbo C++, Programmer's Guide, Borland International, 1990,
+Scotts Valley CA<br><br>
+
+Borland:<br>
+Turbo C++, Library Reference, Borland International 1990,
+Scotts Valley CA<br><br>
+
+The Draft Standard C++ Library by P.J. Plauger, Prentice Hall, New Jersey,
+1995.<br><br>
+
+H.M Dietel/P.J. Deitel: C++ How To Program, Prentice Hall, Englewod Cliffs,
+New Jersey 07632<br><br>
+
+Molinaro, Anthony:<br>
+SQL Cookbook, O'Reilly Media, Inc, 2005,
+Sebastopol CA: ISBN 978-0-596-00976-2<br><br>
+
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbac.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbac.html
new file mode 100755
index 0000000..e022890
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbac.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Appendix C</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Library Build Compile Options</p></H2>
+<p align="center">Chapter Updated 2/1/23</p><hr>
+
+
+
+<center>
+<H2>Library Build Compile Options</H2>
+<table >
+<TABLE BORDER>
+<TR VALIGN="BASELINE">
+<TR><TH>Options</TH><TH>Description</TH><TH>Prerequisites - Notes</TH></TR>
+<TR><TD>XB_DEBUG_SUPPORT</TD><TD>Include library debugging functionality</TD></TR>
+<TR><TD>XB_UTILS_SUPPORT</TD><TD>Build utility programs?</TD></TR>
+<TR><TD>XB_EXAMPLES_SUPPORT</TD><TD>Build example programs?</TD></TR>
+<TR><TD>XB_MEMO_SUPPORT</TD><TD>Include Memo file support?</TD><TD>Prereq: XB_LINKLIST_SUPPORT</TD></TR>
+<TR><TD>XB_LOGGING_SUPPORT</TD><TD>Include logging support?</TD></TR>
+<TR><TD>XB_DBF3_SUPPORT</TD><TD>Include DBF Version III support?</TD><TD>At lease one of XB_DBF3_SUPPORT or<br> XB_DBF4_SUPPORT required</TD></TR>
+<TR><TD>XB_DBF4_SUPPORT</TD><TD>Include DBF Version IV support?</TD><TD>At least one of XB_DBF3_SUPPORT or<br> XB_DBF4_SUPPORT required</TD></TR>
+<TR><TD>XB_LINKLIST_SUPPORT</TD><TD>Include Linklist functionality?</TD></TR>
+<TR><TD>XB_LOCKING_SUPPORT</TD><TD>Include File and Record locking support?</TD><TD>Prereq: XB_LINKLIST_SUPPORT</TD></TR>
+<TR><TD>XB_FUNCTION_SUPPORT</TD><TD>Include Expression Function support?</TD></TR>
+<TR><TD>XB_EXPRESSION_SUPPORT</TD><TD>Include Expression support?</TD><TD>Prereq: XB_FUNCTION_SUPPORT<br>and XB_LINKLIST_SUPPORT</TD></TR>
+<TR><TD>XB_NDX_SUPPORT</TD><TD>Include NDX Index support?</TD><TD>Prereq: XB_EXPRESSION_SUPPORT</TD></TR>
+<TR><TD>XB_MDX_SUPPORT</TD><TD>Include MDX Index support?</TD><TD>Prereq: XB_EXPRESSION_SUPPORT</TD></TR>
+<TR><TD>XB_SQL_SUPPORT</TD><TD>Include SQL support?</TD><TD>Prereq: XB_MEMO_SUPPORT<br>and XB_DBF4_SUPPORT<br>and XB_BLOCKREAD_SUPPORT<br>and XB_EXPRESSION_SUPPORT</TR>
+<TR><TD>XB_INF_SUPPORT</TD><TD>Include INF support (Provides auto open functions for NDX indices)</TD></TR>
+<TR><TD>XB_FILTER_SUPPORT</TD><TD>Include Filter support</TD><TD>Prereq: XB_EXPRESSION_SUPPORT</TD></TR>
+<TR><TD>XB_BLOCKREAD_SUPPORT</TD><TD>Include Block Read support</TD></TR>
+</TABLE></center>
+
+
+
+<br><br><hr><br><br>
+<center><h2>CMake</h2></center>
+The Xbase library is built using the CMake build manager. Cmake provides the architecture for
+building cross platform projects with a unified build system. If you are not familiar with CMake,
+you can familiarize yourself with it at https://cmake.org
+<br><br>
+To modify the XBase64 compile options take the following steps:<br><br><br>
+
+1) Identify which platform you want to build and identify the correct build folder
+<table border=1>
+<tr><td>/xbase64-4.x.x/build/borland5.5</td><td>Older free Borland 5.5 32 bit Windows compiler</td></tr>
+<tr><td>/xbase64-4.x.x/build/linux32</td><td>Linux 32 bit build folder</td></tr>
+<tr><td>/xbase64-4.x.x/build/linux64</td><td>Linux 64 bit build folder</td></tr>
+<tr><td>/xbase64-4.x.x/build/win32vs</td><td>Windows 32 bit Visual Studio folder</td></tr>
+<tr><td>/xbase64-4.x.x/build/win64vs</td><td>Windows 64 bit Visual Studio folder</td></tr>
+<tr><td>/xbase64-4.x.x/build/mac64</td><td>MAC 64 but folder</td></tr>
+</table>
+
+<br><br><br>
+2) Navigate to the appropriate folder identified in step 1. Once you are in the correct folder,
+verify there is a <em>CmakeLists.txt</em> file. That file is the main librbary build configuration file.
+<br><br>
+
+3) Select one if the following methods to update the config options
+<table border=1>
+<tr><td>For Windows users, use program cmake-gui.exe</td></tr>
+<tr><td>For Unix/Linux/Mac users, use program cmake-gui</td></tr>
+<tr><td>For Unix command line, use program "ccmake ."</td></tr>
+<tr><td>Or manually edit the <em>CmakeLists.txt</em> file with your favorite text editor</td></tr>
+</table>
+<br><br><br>
+<hr><br><br><br>
+<center><h2>Debug Support <em>(Option: XB_DEBUG_SUPPORT)</em></h2></center>
+The following methods are included in the build when the XB_DEBUG_OPTION is turned on and are mainly used for library debugging purposes.
+The option can be safely left turned off.<br>
+The <em>dump</em> routines print output to sdtout or an open log file.<br><br><br>
+
+<center><table border=1>
+<TR><TH>Method/Function</TH><TH>Description</TH></TR>
+<tr><td>xbDate::Dump()</td><td>Dump the xbDate object internals to stdout</td></tr>
+<tr><td>xbDate::DumpDateTable()</td><td>Dump internal date tables to stdout</td></tr>
+<tr><td>xbDbf::DumpTableLockStatus()</td><td>Dump internal locking status / structures</td></tr>
+<tr><td>xbExp::DumpToken()</td><td>Dump expression values</td></tr>
+<tr><td>xbExp::DumpTree()</td><td>Dump expression token tree</td></tr>
+<tr><td>xbExpNode::DumpToken()</td><td>Dump expression node values</td></tr>
+<tr><td>xbFile::DumpBlockToDisk</td><td>Dump specified block of data to a disk file</td></tr>
+<tr><td>xbFile::DumpMemToDisk</td><td>Dump specified memory to a disk file</td></tr>
+<tr><td>xbIx::DumpNode</td><td>Dump index node header</td></tr>
+<tr><td>xbIxMdx::DumpBlock</td><td>Dump MDX index block</td></tr>
+<tr><td>xbIxMdx::DumpFreeBlocks</td><td>Dump MDX free block chain</td></tr>
+<tr><td>xbIxMdx::DumpHeader</td><td>Dump MDX file header info</td></tr>
+<tr><td>xbIxMdx::DumpIxForTag</td><td>Dump MDX index keys and values for a given tag</td></tr>
+<tr><td>xbIxMdx::DumpIxNodeChain</td><td>Dump MDX current memory node linked list for a given tag</td></tr>
+<tr><td>xbIxMdx::DumpTagBlocks</td><td>Dump MDX blocks for a given tag</td></tr>
+<tr><td>xbIxNdx::DumpHeader</td><td>Dump MDX file header info</td></tr>
+<tr><td>xbIxNdx::DumpIxNodeChain</td><td>Dump MDX current memory node linked list for a given tag</td></tr>
+<tr><td>xbIxNdx::DumpNode</td><td>Dump index node header</td></tr>
+<tr><td>xbIxNdx::DumpTagBlocks</td><td>Dump NDX blocks for a given tag</td></tr>
+<tr><td>xbMemoDbt3::DumpMemoFreeChain()</td><td>Place holder</td></tr>
+<tr><td>xbMemoDbt4::DumpMemoFreeChain()</td><td>Dump list of free blocks available for reuse</td></tr>
+<tr><td>xbMemoDbt4::DumpMemoInternals()</td><td>Dump V4 memo file internals</td></tr>
+<tr><td>xbString::Dump()</td><td>Dump string internals</td></tr>
+<tr><td>xbString::DumpHex()</td><td>Dump string internals in hex</td></tr>
+<tr><td>xbBlockRead::DumpReadBlockInternals</td><td>Dump sequential read block internals</td></tr>
+</table></center>
+
+
+<br><hr><br><br>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/html/xbad.html b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbad.html
new file mode 100755
index 0000000..7356b7b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbad.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Appendix D</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">File Types</p></H2>
+<p align="center">Chapter Updated 12/09/22</p><hr>
+
+<h3>Supported File Types.</h3>
+
+All supported file types have one the following file extensions:
+The extensions are allway upper case.<br><br>
+
+
+<table >
+<TABLE BORDER>
+<TR VALIGN="BASELINE">
+<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>
+</TABLE>
+<br><hr><br>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</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/1Tdata/xbase/xbase64-4.1.4/docs/html/xbase.jpg b/1Tdata/xbase/xbase64-4.1.4/docs/html/xbase.jpg
new file mode 100755
index 0000000..5070fcb
--- /dev/null
+++ 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/1Tdata/xbase/xbase64-4.1.4/docs/license/gpl-3.0.txt b/1Tdata/xbase/xbase64-4.1.4/docs/license/gpl-3.0.txt
new file mode 100755
index 0000000..94a9ed0
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/license/gpl-3.0.txt
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/license/preamble.txt b/1Tdata/xbase/xbase64-4.1.4/docs/license/preamble.txt
new file mode 100755
index 0000000..a8988bf
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/license/preamble.txt
@@ -0,0 +1,11 @@
+
+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 \ No newline at end of file
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/1Tdata/xbase/xbase64-4.1.4/docs/misc/AutoUpdate.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/AutoUpdate.txt
new file mode 100755
index 0000000..909bc18
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/AutoUpdate.txt
@@ -0,0 +1,54 @@
+
+Auto Update Design / Functionality
+
+
+Auto update functionality in the library is used to automatically update
+records in tables, when the user moves off a particular record without
+explicitly posting an update for the new data updates.
+
+The auto Update logic defaults to ON, and there is nothing that the
+end user needs to worry about.
+
+However, if it is desired to change the behavior of the library, the
+Auto Update logic can be turned off.
+
+There are two levels to the Auto Update logic.
+
+The first level is the DBMS level, which controls how all tables are
+handled, if the Auto Update logic is not over ridden at the table level.
+
+The second level is the table level. The DBMS Auto Update logic can
+be over ridden at the table level.
+
+
+For the DBMS level settings, see methods:
+ xBase::GetDefaultAutoUpdate
+ xBase::SetDefaultAutoUpdate
+
+At the DBMS level, there are two settings
+ xbFalse = AutoUpdate is off
+ xbTrue = AutoUpdate is on
+
+For the Table level settings, see methods:
+ xbDbf::SetAutoUpdate
+ xbDbf::GetAutoUpdate
+
+At the table level, there are three settings
+ -1 = Use the DBMS setting (this is the default)
+ 0 = Do not use Auto Update on this table
+ 1 = Use Auto Update on this table.
+
+These seetings would be for a more advanceed implementation of
+XBase64. For the most part, you can ignore these settings and
+use the defaults that are already set in the library and you should
+be OK.
+
+
+This document is missing some functions
+
+x:DisableDefaultAutoLock()
+x:EnableDefaultAutoLock()
+
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/misc/DirectoryStructure.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/DirectoryStructure.txt
new file mode 100755
index 0000000..9a7ba66
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/DirectoryStructure.txt
@@ -0,0 +1,32 @@
+
+6/14/14 - The directory structure was updated with xb64 V4.0.0
+
+
+
+xb64
+ xb64 (Source Tree)
+ include
+ xb64
+ examples
+ utils
+
+ docs
+ html
+ license
+ misc
+
+ Linux (Build Tree for Linux)
+ bin
+ Processor
+
+ Windows (Build Tree for Windows)
+ bin
+ Processor
+
+ Mac (Build Tree for Mac)
+ bin
+ Processor
+
+ OtherPlatforms (Build tree for other platforms)
+ bin
+ Processor \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/misc/ExpressionNotes.ods b/1Tdata/xbase/xbase64-4.1.4/docs/misc/ExpressionNotes.ods
new file mode 100755
index 0000000..6817de2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/ExpressionNotes.ods
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/misc/Expressions.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Expressions.txt
new file mode 100755
index 0000000..d6eed0d
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Expressions.txt
@@ -0,0 +1,13 @@
+
+
+
+Expression Date Logic
+
+
+ DATE - DATE returns number
+ DATE - Number returns date
+ DATE + Number returns date
+ DATE -= Number returns date
+ DATE += Number returns date
+ DATE ++ returns date
+ DATE -- returns date \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/misc/FileTypeByte.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/FileTypeByte.txt
new file mode 100755
index 0000000..11d4823
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/FileTypeByte.txt
@@ -0,0 +1,53 @@
+
+
+
+Valid dBASE for Windows table file, bits 0-2 indicate version number: 3 for dBASE Level 5, 4 for dBASE Level 7.
+Bit 3 and bit 7 indicate presence of a dBASE IV or dBASE for Windows memo file;
+bits 4-6 indicate the presence of a dBASE IV SQL table;
+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).
+
+
+The first byte of the DBF file determines the xbase file version
+
+76543210
+00000000
+
+| - True if any memo file
+ | - True if Version 4 memo file
+ || - True for both V3 and V4 files
+
+
+
+
+00000011 - Could be a version III or version IV file, lib defaults to IV
+10000011 - Version III with memo
+10001011 - Version IV with memo
+
+
+
+Logic for checking for which version
+
+ 3 bit 4 not set, bit 5&6 set, if bit 0 set and bit 3 not set, then V3
+ 4 bit 4 not set, bit 5&6 set, if bit 0 set and bit 3 set
+ 5 bit 4 not set, bit 5&6 set, if bit 0 set and bit 3 set
+>=7 bit 4 set
+
+
+
+ bit 0 bit 3 bit 4 bit 5 bit 6
+V III Optional 0 0 1 1 No field type F
+V IV Optional if bit0 then 1 0 1 1 Supports field type F
+V V Optional if bit0 then 1 0 1 1 Supports field type F
+
+V VII ? ? 1 0 0
+
+
+
+pseudocode logic
+
+if not bit 4, and bit 5 and bit 6
+{
+ if V4 compiled in, if not (bit0 and not bit3) return V4
+ else
+ if V3 compiled in and not bit3, and not prod mdx, return V3
+} \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/misc/IndexNotes.ods b/1Tdata/xbase/xbase64-4.1.4/docs/misc/IndexNotes.ods
new file mode 100755
index 0000000..0b3cabc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/IndexNotes.ods
Binary files differ
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/misc/RealDelete.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/RealDelete.txt
new file mode 100755
index 0000000..7770afc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/RealDelete.txt
@@ -0,0 +1,88 @@
+
+
+Earlier versions of the library included an Xbase specific functin called "Real Delete"
+
+The analysis is as follows:
+
+Updates to xbdbf.h and xbdbf.cpp
+
+#ifdef XB_REAL_DELETE
+ ...
+#endif
+
+Functions included:
+
+ RealDeleteOn() Turns on RealDelete
+ RealDeleteOff() Turns off RealDelete
+ GetRealDelete() Returns the status of RealDelete
+
+Narrative:
+
+This should be done before creating a database with xbDbf::CreateDatabase() and
+thereafter before opening a database with xbDbfCreateDatabase()
+
+
+You can not turn on real deletes once a database has been created and records added
+
+
+In the Table header
+bytes 12-15 - FirstFreeRec;
+bytes 16-19 - RealNumRecs
+
+
+Updates to the following methods:
+WriteHeader()
+ReadHeader()
+
+The first four bytes of the deleted record is the record number to the next
+deleted record in the chain
+
+Append Record will pull next record from the chain and attempt to use that
+field, otherwise it will append a new record
+
+GetFirstRecord will skip over deleted records looking for the first record
+which is not deleted
+
+GetLastRecord will skip backwards to the next previous undeleted record
+
+GetPrevRecord skips backwards to the the next previous undeleted record
+
+DeleteRecord
+ -Deletes the memo data
+ - Adds the record to the front of the free chain
+
+UndeleteRecord
+ - Always returns XB_INVALID_RECORD
+
+PackDatafiles
+ - Deleted Records are skipped
+
+NoOfRecords
+ - Returns no of records not deleted
+
+PhysicalNoOfRecords()
+ - Return NoOfRecs - actual number of records in the file
+
+
+
+Conclusions:
+
+From a campatibility standpoint:
+
+ This setup will only work on the earlier version of the Xbase file format as this would
+ be library specific code.
+
+ Also, once past Dbase V3, the bytes used in the header file are used by Dbase 4,5,7
+
+
+Decision:
+
+ In an effort to make the library as portable as possible moving forward, a decision was made to
+ leave this code out of the basic library. To add this code in the future, a new class can be created
+ using the xbDbf class as a base class, and override the methods mentioned above.
+
+
+
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/misc/Release.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Release.txt
new file mode 100755
index 0000000..f73af11
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Release.txt
@@ -0,0 +1,34 @@
+
+xb64 4.0.0 Release notes
+
+ List of updates with xbase 4.0.0
+ 1) Converted from automake/autoconf to cmake
+ 2) Updated xbstring logic
+ 3) Created test programs for using in cmake
+ 4) Tested each method in the following environments
+ A) Linux Slackware 64 bit
+ B) Linux Slackware 32 bit
+ C) Mac OSX Lion, 64 bit build
+ D) Windows 64 bit build
+ E) Windows 32 bit build
+ F) Borland 32 bit build
+ 5) Updated the Get/Put field methods so they all have a
+ common look and feel. All the get/put methods now return
+ a return code indicating success/failure.
+ 6) Abstracted file i/o activity into xbFile class - used to
+ isolate the platform specifics out of the main dbms class
+ and improve portability. Utilized 64 bit functions where
+ possible
+ 7) Reworked the Lock logic, tested on various platforms.
+ Mac OSX supports on locking on NFS shares only.
+ Mac does not support locking on SMB shares - OS limitation.
+ Unix based file systems don't support file lock functionality,
+ if using in combination with sdoftware like DBase, Dbase supports
+ exclusive locking which is not supported on native Linux file systems
+ 8) Converted integer field names and checked for correct field lengths
+ xbInt16 16 bit integer
+ xbUInt16 16 bit unsigned integer
+ xbInt32 32 bit integer
+ xbUInt32 32 bit unsigned integer
+ xbInt64 64 bit integer
+ xbUInt64 64 bit unsigned integer
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/misc/Versions.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Versions.txt
new file mode 100755
index 0000000..2977341
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/Versions.txt
@@ -0,0 +1,30 @@
+
+
+
+
+Differences between Dbase III and Dbase IV
+
+ Dbase IV adds field type "F" Float
+ Dbase IV adds a more sophisticated DBT memo file, utilizes logic to reclaim disk space on memo field updates
+ Dbase IV adds support for MDX multi tag indices
+
+
+
+
+Version III Field Types
+
+ C Char
+ N Numeric
+ D Date
+ M Memo
+ L Logical
+
+
+Version IV Field Types
+
+ C Char
+ N Numeric
+ D Date
+ M Memo
+ L Logical
+ F Float (Similar to numeric) \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/docs/misc/xbTmpFiles.txt b/1Tdata/xbase/xbase64-4.1.4/docs/misc/xbTmpFiles.txt
new file mode 100755
index 0000000..f81bee9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/docs/misc/xbTmpFiles.txt
@@ -0,0 +1,12 @@
+
+
+At times, the Xbase64 library will create temporary work files with the
+following naming pattern: xbtmpNNN.xxx Where NNN is a sequential
+number and xxx is either dbf, dbt, ndx, mdx.
+
+These files should be automatically deleted by the library when
+the task is complete. However, if the program crashes in a particular
+step, the temp files might not be cleaned up automatically.
+
+If you run into these files, and they have an older timestamp on them,
+it is safe to delete them. \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/droptbl.sql b/1Tdata/xbase/xbase64-4.1.4/sql/droptbl.sql
new file mode 100755
index 0000000..d8699cc
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/droptbl.sql
@@ -0,0 +1,9 @@
+# HELP;
+
+USE /opt/1Tdata/xbase/xbase.30/data;
+
+DROP TABLE IF EXISTS TestSqlM.DBF;
+
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/jointest.sql b/1Tdata/xbase/xbase64-4.1.4/sql/jointest.sql
new file mode 100755
index 0000000..de167b5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/jointest.sql
@@ -0,0 +1,43 @@
+# HELP;
+
+USE /mnt/1Tdata/xbase/xbase64-4.1.1/data;
+
+DROP TABLE IF EXISTS MAIN0.DBF;
+DROP TABLE IF EXISTS LEFT0.DBF;
+DROP TABLE IF EXISTS LEFT1.DBF;
+DROP TABLE IF EXISTS LEFT2.DBF;
+DROP TABLE IF EXISTS LEFT3.DBF;
+DROP TABLE IF EXISTS INNER0.DBF;
+
+
+CREATE TABLE MAIN0 ( ID NUMERIC(6,0), LEFTFK0 CHAR(3), LEFTFK1 CHAR(3), LEFTFK2 CHAR(3), LEFTFK3 CHAR(3), RIGHTFK0 CHAR(3), RIGHTFK1 CHAR(3), RIGHTFK2 CHAR(3), INNERFK0 CHAR(3) );
+
+CREATE TABLE LEFT0.DBF ( ID NUMERIC(6,0), LEFTFK0 CHAR(3), CFLD CHAR(10) );
+CREATE TABLE LEFT1.DBF ( ID NUMERIC(6,0), LEFTFK1 CHAR(3), CFLD CHAR(10) );
+CREATE TABLE LEFT2.DBF ( ID NUMERIC(6,0), LEFTFK2 CHAR(3), CFLD CHAR(10) );
+CREATE TABLE LEFT3.DBF ( ID NUMERIC(6,0), LEFTFK3 CHAR(3), CFLD CHAR(10) );
+CREATE TABLE INNER0.DBF( ID NUMERIC(6,0), INNERFK0 CHAR(3), CFLD CHAR(10) );
+
+
+INSERT INTO MAIN0.DBF ( ID, LEFTFK0, LEFTFK1, LEFTFK2, LEFTFK3, RIGHTFK0, RIGHTFK1, RIGHTFK2, INNERFK0 ) VALUES ( 1, 'L01', 'L11', 'L21', 'L31', 'R01', 'R11', 'R21', 'I01' );
+INSERT INTO MAIN0.DBF ( ID, LEFTFK0, LEFTFK1, LEFTFK2, LEFTFK3, RIGHTFK0, RIGHTFK1, RIGHTFK2, INNERFK0 ) VALUES ( 2, 'L02', 'L12', 'L22', 'L32', 'R02', 'R12', 'R22', 'I02' );
+INSERT INTO MAIN0.DBF ( ID, LEFTFK0, LEFTFK1, LEFTFK2, LEFTFK3, RIGHTFK0, RIGHTFK1, RIGHTFK2, INNERFK0 ) VALUES ( 3, 'L03', 'L13', 'L23', 'L33', 'R03', 'R13', 'R23', 'I03' );
+
+INSERT INTO LEFT0.DBF ( ID, LEFTFK0, CFLD ) VALUES ( 1, 'L01', 'REC 1 data' );
+INSERT INTO LEFT0.DBF ( ID, LEFTFK0, CFLD ) VALUES ( 2, 'L02', 'REC 2 data' );
+
+INSERT INTO INNER0.DBF ( ID, INNERFK0, CFLD ) VALUES ( 1, 'I01', 'REC 1 data' );
+INSERT INTO INNER0.DBF ( ID, INNERFK0, CFLD ) VALUES ( 2, 'I03', 'REC 2 data' );
+
+
+
+#INSERT INTO TestSQL.DBF (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y');
+#CREATE UNIQUE INDEX TestSql1.NDX ON TestSql.DBF( CHRFLD ) ASSOCIATE;
+#DROP INDEX IF EXISTS TestSql1.NDX ON TestSql.DBF;
+
+
+
+#SELECT M.ID, M.LEFTFK0, L0.CFLD, L1.CFLD AS L1cfld
+#FROM MAIN0 M
+#LEFT JOIN LEFT0 L0 ON M.LEFTFK0 = L0.LEFTFK0
+#LEFT JOIN LEFT1 L1 ON M.LEFTFK1 = L1.LEFTFK1 AND L1.ID = L0.ID \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/oneNdxTag.sql b/1Tdata/xbase/xbase64-4.1.4/sql/oneNdxTag.sql
new file mode 100755
index 0000000..71ff217
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/oneNdxTag.sql
@@ -0,0 +1,18 @@
+# HELP;
+
+# where the tables live
+USE /mnt/1Tdata/xbase/xbase.35/data;
+
+
+DROP TABLE IF EXISTS OneNdxTg.DBF;
+
+CREATE TABLE OneNdxTg.DBF( CHRFLD CHAR(50), DTFLD DATE, INTFLD INTEGER, SMINTFLD SMALLINT, NUMFLD NUMERIC(9,4), DECFLD DECIMAL(9,4), FLTFLD FLOAT(9,4) LGFLD LOGICAL );
+
+CREATE INDEX OneNdxTg.NDX ON OneNdxTg.DBF( CHRFLD ) ASSOCIATE;
+
+INSERT INTO OneNdxTg.DBF ( CHRFLD ) Values ('AAA' );
+INSERT INTO OneNdxTg.DBF ( CHRFLD ) Values ('BBB' );
+INSERT INTO OneNdxTg.DBF ( CHRFLD ) Values ('CCC' );
+INSERT INTO OneNdxTg.DBF ( CHRFLD ) Values ('aaa' );
+INSERT INTO OneNdxTg.DBF ( CHRFLD ) Values ('bbb' );
+INSERT INTO OneNdxTg.DBF ( CHRFLD ) Values ('ccc' ); \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/testc.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testc.sql
new file mode 100755
index 0000000..85d9f18
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testc.sql
@@ -0,0 +1,13 @@
+# HELP;
+
+USE /opt/1Tdata/xbase/xbase.30/data;
+
+# INSERT INTO TestSQL.DBF (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y');
+
+DROP TABLE IF EXISTS TestSql.DBF;
+CREATE TABLE TestSql.DBF( CHRFLD CHAR(6), DTFLD DATE, INTFLD INTEGER, SMINTFLD SMALLINT, NUMFLD NUMERIC(9,4), DECFLD DECIMAL(9,4), FLTFLD FLOAT(9,4) VCHARFLD VARCHAR, LGFLD LOGICAL);
+CREATE UNIQUE INDEX TestSql1.NDX ON TestSql.DBF( CHRFLD ) ASSOCIATE;
+
+# DROP INDEX IF EXISTS TestSql1.NDX ON TestSql.DBF;
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/testd.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testd.sql
new file mode 100755
index 0000000..3bac01c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testd.sql
@@ -0,0 +1,12 @@
+# HELP;
+
+USE /opt/1Tdata/xbase/xbase.30/data;
+
+# INSERT INTO TestSQL.DBF (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y');
+
+# CREATE TABLE TestSql.DBF( CHRFLD CHAR(6), DTFLD DATE, INTFLD INTEGER, SMINTFLD SMALLINT, NUMFLD NUMERIC(9,4), DECFLD DECIMAL(9,4), FLTFLD FLOAT(9,4) VCHARFLD VARCHAR, LGFLD LOGICAL );
+# CREATE UNIQUE INDEX TestSql1.NDX ON TestSql.DBF( CHRFLD ) ASSOCIATE;
+
+DROP INDEX IF EXISTS TestSql1.NDX ON TestSql.DBF;
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/testdd.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testdd.sql
new file mode 100755
index 0000000..85c8000
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testdd.sql
@@ -0,0 +1,14 @@
+HELP;
+
+USE /opt/1Tdata/xbase/xbase.30/data;
+
+# INSERT INTO TestSQL.DBF (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y');
+
+# CREATE TABLE TestSql.DBF( CHRFLD CHAR(6), DTFLD DATE, INTFLD INTEGER, SMINTFLD SMALLINT, NUMFLD NUMERIC(9,4), DECFLD DECIMAL(9,4), FLTFLD FLOAT(9,4) VCHARFLD VARCHAR, LGFLD LOGICAL );
+# CREATE UNIQUE INDEX TestSql1.NDX ON TestSql.DBF( CHRFLD ) ASSOCIATE;
+
+#DROP INDEX IF EXISTS TestSql1.NDX ON TestSql.DBF;
+
+DROP TABLE IF EXISTS TestSql.DBF;
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/testflg.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testflg.sql
new file mode 100755
index 0000000..2d00290
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testflg.sql
@@ -0,0 +1,12 @@
+# HELP;
+
+USE /opt/1Tdata/xbase/xbase.30/data;
+
+DROP TABLE IF EXISTS TestFlag.DBF;
+
+CREATE TABLE TestFlag.DBF( C1 CHAR(1), C2 CHAR(2), C3 CHAR(3), D1 DATE, D2 DATE, D3 DATE, I1 INTEGER, I2 INTEGER, I3 INTEGER, N1 NUMERIC(9,1), N2 NUMERIC(9,2), N3 NUMERIC(9,3));
+
+# CREATE INDEX TestSql2 ON TestSql2.DBF( CHRFLD );
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/testmdx.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testmdx.sql
new file mode 100755
index 0000000..859334b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testmdx.sql
@@ -0,0 +1,12 @@
+# HELP;
+
+USE /opt/1Tdata/xbase/xbase.30/data;
+
+DROP TABLE IF EXISTS TestSqlM.DBF;
+
+CREATE TABLE TestSqlM.DBF( CHRFLD CHAR(6), DTFLD DATE, INTFLD INTEGER, SMINTFLD SMALLINT, NUMFLD NUMERIC(9,4), DECFLD DECIMAL(9,4), FLTFLD FLOAT(9,4) LGFLD LOGICAL );
+
+# CREATE INDEX TestSqlM ON TestSqlM.DBF( CHRFLD );
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/testmdx2.sql b/1Tdata/xbase/xbase64-4.1.4/sql/testmdx2.sql
new file mode 100755
index 0000000..040dddd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/testmdx2.sql
@@ -0,0 +1,12 @@
+# HELP;
+
+USE /opt/1Tdata/xbase/xbase.30/data;
+
+DROP TABLE IF EXISTS TestSql2.DBF;
+
+CREATE TABLE TestSql2.DBF( CHRFLD CHAR(100), DTFLD DATE, INTFLD INTEGER, SMINTFLD SMALLINT, NUMFLD NUMERIC(9,4), DECFLD DECIMAL(9,4), FLTFLD FLOAT(9,4) LGFLD LOGICAL );
+
+CREATE INDEX Ctag1 ON TestSql2.DBF( CHRFLD );
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/sql/twotags.sql b/1Tdata/xbase/xbase64-4.1.4/sql/twotags.sql
new file mode 100755
index 0000000..6840709
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/sql/twotags.sql
@@ -0,0 +1,10 @@
+# HELP;
+
+USE /opt/1Tdata/xbase/xbase.30/data;
+
+DROP TABLE IF EXISTS TwoTags.DBF;
+
+CREATE TABLE TwoTags.DBF( CHRFLD1 CHAR(100), CHRFLD2 CHAR(100), DTFLD DATE, INTFLD INTEGER, SMINTFLD SMALLINT, NUMFLD NUMERIC(9,4), DECFLD DECIMAL(9,4), FLTFLD FLOAT(9,4) LGFLD LOGICAL );
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/core/xbbcd.cpp b/1Tdata/xbase/xbase64-4.1.4/src/core/xbbcd.cpp
new file mode 100755
index 0000000..f86e74f
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/core/xbbcd.cpp
@@ -0,0 +1,301 @@
+/* xbbcd.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
+
+ BCD class
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_INDEX_SUPPORT
+///@cond DOXYOFF
+namespace xb{
+
+
+
+xbBool bcdBitSet( unsigned char c, xbInt16 iBitNo ){
+ return c & 1 << iBitNo;
+}
+void bcdBitDump( unsigned char c ){
+ for( int i = 7; i >= 0; i-- )
+ std::cout << (bcdBitSet( c, i ) ? 1 : 0);
+}
+void bcdBitDump( char c ){
+ bcdBitDump( (unsigned char) c );
+}
+
+
+/***********************************************************************/
+void xbBcd::ctor(){
+ memset( &bcd, 0x00, sizeof( xbBcdStruct ));
+}
+/***********************************************************************/
+xbBcd::xbBcd( xbDouble d ) {
+ Set( d );
+}
+/***********************************************************************/
+xbBcd::xbBcd( const xbString &sNumIn ) {
+ Set( sNumIn );
+}
+/***********************************************************************/
+xbBcd::xbBcd( const void *vBcdIn ) {
+ memcpy( &bcd, vBcdIn, sizeof( xbBcdStruct ));
+}
+/***********************************************************************/
+void xbBcd::Set( xbDouble d ) {
+ ctor();
+ xbString s( d );
+ StringToBcd( s );
+}
+/***********************************************************************/
+void xbBcd::Set( const xbString &sNumIn ) {
+ ctor();
+ StringToBcd( sNumIn );
+}
+/***********************************************************************/
+void xbBcd::Set( const void *vBcdIn ) {
+ memcpy( &bcd, vBcdIn, sizeof( xbBcdStruct ));
+}
+/***********************************************************************/
+void xbBcd::StringToBcd( const xbString &sIn )
+{
+
+ unsigned char cEdc = 0; // encoded digit count
+ xbUInt32 iPos; // current position in source string
+ xbBool bDecHit = xbFalse; // decimal position hit?
+ unsigned char *p = bcd.cData; // pointer to cData
+ xbInt16 iBytePos = 0; // next load position in xbs structure
+ xbInt16 iBcdDataPos = 0; // current position in output structure
+ xbByteSplit xbs; // combiner
+
+
+ ctor();
+ xbString sNum( sIn );
+ xbBool bSign = xbFalse;
+
+ sNum.Trim();
+ if( sNum[1] == '-' ){
+ bSign = 1;
+ sNum.ZapLeadingChar( '-' );
+ }
+ sNum.ZapLeadingChar( '0' );
+
+ xbInt16 iDecPos = sNum.Pos( '.' );
+ if( iDecPos > 0 ){
+ sNum.ZapTrailingChar( '0' );
+ cEdc = (unsigned char) (sNum.Len() - 1);
+ } else {
+ cEdc = (unsigned char) (sNum.Len());
+ }
+ if( cEdc > 31 ) cEdc = 31; // max 5 bit number
+
+
+ if( sNum[1] == '.' ){
+ iPos = 2;
+ bDecHit = xbTrue;
+ while( sNum[iPos] == '0' && iPos <= sNum.Len()){
+ bcd.cSigDigits--;
+ iPos++;
+ }
+ } else {
+ iPos = 1;
+ }
+
+ while( iPos <= sNum.Len() ){
+ if( sNum[iPos] == '.' )
+ bDecHit = true;
+ else{
+ if( !bDecHit ){
+ bcd.cSigDigits++;
+ }
+ if( iBytePos++ == 0 ){
+ xbs.c2 = (unsigned) sNum[iPos] - 0x30;
+ } else {
+ xbs.c1 = (unsigned) sNum[iPos] - 0x30;
+ iBytePos = 0;
+ if( iBcdDataPos++ < 10 ){
+ memcpy( p++, &xbs, 1 );
+ xbs.c1 = 0x00;
+ }
+ }
+ }
+ iPos++;
+ }
+
+ if( iBytePos == 1 && iBcdDataPos < 10 ){
+ memcpy( p, &xbs, 1 );
+ }
+
+ bcd.cSigDigits += 52;
+ bcd.cEncDigits = cEdc << 2;
+ bcd.cEncDigits = bcd.cEncDigits | 0x01;
+ if( bSign )
+ bcd.cEncDigits = bcd.cEncDigits | 0x80;
+
+}
+/***********************************************************************/
+void xbBcd::ToChar( char * cOut ){
+
+ memcpy( cOut, &bcd, sizeof( xbBcdStruct ));
+}
+/***********************************************************************/
+void xbBcd::ToDouble( xbDouble &d ){
+ xbString s;
+ ToString( s );
+ d = atof( s.Str());
+}
+/***********************************************************************/
+void xbBcd::ToString( xbString &sStringOut ){
+
+// printf( "\n\n\nToString " );
+// printf( "Sig digits [%d] EncodedDigits [%d] sign [%d] sizeof struct [%d]\n",
+// bcd.cSigDigits - 52 , bcd.EncDigits, bcd.Sign, sizeof( xbBcdStruct ));
+
+// this routine converts a bcd numeric key value to a base 10 number in a string
+
+
+ xbBool bHasDot = false;
+ xbInt16 iSig = bcd.cSigDigits - 52;
+ xbByteSplit xbs;
+ unsigned char *p = bcd.cData;
+ unsigned char c;
+
+// xbInt16 iEnc = bcd.cEncDigits;
+ xbInt16 iEnc = GetEncDigitsNoSign();
+
+ // set the sign
+ // if( bcd.Sign )
+ if( bcd.cEncDigits >> 7 )
+ sStringOut = "-";
+ else
+ sStringOut = "";
+
+ // do add any needed zeroes after the decimal
+ if( iSig <= 0 ){
+ if( iEnc > 0 ){
+ sStringOut.Append( "." );
+ bHasDot = true;
+ }
+ for( xbInt16 i = iSig; i < 0; i++ )
+ sStringOut.Append( "0" );
+ }
+
+ // do the encoded digits
+ while( iEnc > 0 ){
+ if( iSig == 0 && !bHasDot )
+ sStringOut.Append( "." );
+ c = *p++;
+ memcpy( &xbs, &c, 1 );
+ c = xbs.c2 + 0x30;
+ sStringOut.Append((char) c );
+ iSig--;
+ iEnc--;
+ if( iEnc > 0 ){
+ if( iSig == 0 && !bHasDot )
+ sStringOut.Append( "." );
+ c = xbs.c1 + 0x30;
+ sStringOut.Append((char) c );
+ iSig--;
+ iEnc--;
+ }
+ }
+ // do the trailing zeroes
+ while( iSig-- > 0 )
+ sStringOut.Append( "0" );
+ if( sStringOut == "" )
+ sStringOut = "0";
+
+}
+
+/***********************************************************************/
+xbInt16 xbBcd::Compare( xbDouble d ){
+ xbBcd bcdIn( d );
+
+ xbString s;
+ bcdIn.ToString( s );
+ return Compare( bcdIn );
+}
+
+/***********************************************************************/
+xbInt16 xbBcd::Compare( const xbBcd &bcdIn ){
+ // if this == bcdIn return 0
+ // if this < bcdIn return -1
+ // if this > bcdIn return 1
+
+
+ xbInt16 iRc = 0;
+// if( bcd.Sign != bcdIn.GetSign() ){
+// bcd.Sign > 0 ? iRc = -1 : iRc = 1;
+
+ if( (unsigned)(bcd.cEncDigits >> 7 ) != bcdIn.GetSign() ){
+ (bcd.cEncDigits >> 7 ) > 0 ? iRc = -1 : iRc = 1;
+ return iRc;
+ }
+
+ if( (unsigned) bcd.cSigDigits != bcdIn.GetSigDigits()){
+ // if( !bcd.Sign ){ // positive numbers
+ if( !(bcd.cEncDigits >> 7 )){ // positive numbers
+ if( (unsigned) bcd.cSigDigits > bcdIn.GetSigDigits())
+ return 1;
+ else
+ return -1;
+ } else { // negative numbers
+ if( (unsigned) bcd.cSigDigits > bcdIn.GetSigDigits())
+ return -1;
+ else
+ return 1;
+ }
+ }
+
+// iRc = xbXBase::xbMemcmp( bcd.cData, bcdIn.GetData(), (size_t)((bcd.cEncDigits + 1) / 2) );
+ iRc = xbXBase::xbMemcmp( bcd.cData, bcdIn.GetData(), (size_t)((GetEncDigitsNoSign() + 1) / 2) );
+ if( iRc == 0 )
+ return 0;
+ // else if((!bcd.Sign && iRc > 0) || (bcd.Sign && iRc < 0 ))
+ else if((!(bcd.cEncDigits >> 7) && iRc > 0) || ((bcd.cEncDigits >> 7) && iRc < 0 ))
+ return 1;
+ else
+ return -1;
+}
+
+/***********************************************************************/
+unsigned char xbBcd::GetEncDigitsNoSign() const {
+ unsigned char c = bcd.cEncDigits << 1;
+ return c >> 3;
+}
+/***********************************************************************/
+unsigned xbBcd::GetSign() const {
+ //return bcd.Sign;
+ return (unsigned) bcd.cEncDigits >> 7;
+}
+/***********************************************************************/
+unsigned xbBcd::GetSigDigits() const {
+ return bcd.cSigDigits;
+}
+/***********************************************************************/
+unsigned xbBcd::GetActualSigDigits() const {
+ return bcd.cSigDigits - (xbUInt32) 52;
+}
+/***********************************************************************/
+const unsigned char * xbBcd::GetData() const {
+ const unsigned char *p = bcd.cData;
+ return p;
+}
+/***********************************************************************/
+const void * xbBcd::GetBcd() const {
+ return &bcd;
+}
+} /* namespace */
+///@endcond DOXYOFF
+#endif /* XB_INDEX_SUPPORT */
+
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/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_sql.cpp b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_sql.cpp
new file mode 100755
index 0000000..695baa2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_sql.cpp
@@ -0,0 +1,111 @@
+/* xb_ex_sql.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 implementation of initial sql functions into the library
+
+*/
+
+#include <xbase.h>
+using namespace xb;
+
+int main( int argCnt, char **av )
+{
+ xbInt16 iRc;
+ xbXBase x; /* initialize xbase */
+
+#ifdef XB_LOGGING_SUPPORT
+ x.EnableMsgLogging();
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+#endif
+
+ xbSql sql( &x );
+ xbString sSql;
+
+
+ sSql.Sprintf( "USE %s", PROJECT_DATA_DIR);
+ iRc = sql.ExecuteNonQuery( sSql );
+ if( iRc != XB_NO_ERROR ){
+ std::cout << "USE PROJECT_DATA_DIR error" << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ } else {
+ std::cout << sSql << " successful" << std::endl;
+ }
+
+ sSql = "DROP TABLE IF EXISTS TESTTBL.DBF";
+ iRc = sql.ExecuteNonQuery( sSql );
+ if( iRc != XB_NO_ERROR ){
+ std::cout << "DROP TABLE error" << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ } else {
+ std::cout << "DROP TABLE successful" << std::endl;
+ }
+
+ std::cout << "Drop table completed\n";
+
+ sSql = "CREATE TABLE TESTTBL.DBF( CHRFLD CHAR(60), DTFLD DATE, INTFLD INTEGER, SMINTFLD SMALLINT, NUMFLD NUMERIC(9,4), DECFLD DECIMAL(9,4), FLTFLD FLOAT(9,4) VCHARFLD VARCHAR, LGFLD LOGICAL)";
+ iRc = sql.ExecuteNonQuery( sSql );
+ if( iRc != XB_NO_ERROR ){
+ std::cout << "CREATE TABLE error" << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ } else {
+ std::cout << "CREATE TABLE successful" << std::endl;
+ }
+
+ sSql = "CREATE INDEX TAG1 ON TESTTBL.DBF( CHRFLD )";
+ iRc = sql.ExecuteNonQuery( sSql );
+ if( iRc != XB_NO_ERROR ){
+ std::cout << "CREATE INDEX error" << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ } else {
+ std::cout << "CREATE INDEX successful" << std::endl;
+ }
+
+
+ sSql = "INSERT INTO TESTTBL.DBF ( CHRFLD ) VALUES ( 'z' )";
+ iRc = sql.ExecuteNonQuery( sSql );
+ if( iRc != XB_NO_ERROR ){
+ std::cout << "INSERT error" << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ } else {
+ std::cout << "INSERT successful" << std::endl;
+ }
+
+ char c;
+ xbString s;
+ for( xbUInt16 i = 0; i < 3 && iRc == XB_NO_ERROR; i++ ){
+ for( xbUInt16 j = 0; j < 5 && iRc == XB_NO_ERROR; j++ ){
+ c = j + 65;
+ s = c;
+ s.PadRight( c, (xbUInt32) i + 1 );
+ sSql.Sprintf( "INSERT INTO TESTTBL.DBF ( CHRFLD ) VALUES ( '%s' )", s.Str());
+ std::cout << sSql.Str() << std::endl;
+ iRc = sql.ExecuteNonQuery( sSql );
+ if( iRc != XB_NO_ERROR ){
+ std::cout << "INSERT error" << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+ }
+ }
+
+ x.CloseAllTables();
+ return 0;
+}
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/1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h
new file mode 100755
index 0000000..4ab8892
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h
@@ -0,0 +1,100 @@
+/* xbase.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
+
+*/
+
+#include <xbconfig.h>
+#include <stdio.h>
+#include <errno.h>
+#include <time.h>
+#include <math.h>
+
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+
+// #ifdef STDC_HEADERS
+#ifdef HAVE_STDARGS_H
+#include <stdargs.h>
+#endif
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+
+#ifdef HAVE_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_VARARGS_H
+#ifndef HAVE_STDARG_H
+#include <varargs.h>
+#endif
+#endif
+
+#ifdef HAVE_WINDOWS_H
+#include <windows.h>
+#include <io.h>
+#endif
+
+#include <iomanip>
+
+#include <xbretcod.h>
+#include <xbtypes.h>
+#include <xbstring.h>
+#include <xbssv.h>
+#include <xbdate.h>
+#include <xbtblmgr.h>
+#include <xbxbase.h>
+#include <xblnknod.h>
+#include <xblnklst.h>
+#include <xblnklstord.h>
+#include <xbfile.h>
+#include <xblog.h>
+#include <xbmemo.h>
+#include <xbbcd.h>
+#include <xbuda.h>
+#include <xbexpnode.h>
+#include <xbexp.h>
+
+#include <xbtag.h>
+#include <xbblkread.h>
+#include <xbdbf.h> /* dbf base class */
+#include <xbindex.h> /* index base class */
+#include <xbfilter.h>
+#include <xbsql.h>
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h
new file mode 100755
index 0000000..8c931d3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h
@@ -0,0 +1,93 @@
+/* xbbcd.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014, 2018, 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
+
+*/
+
+#ifndef __XB_BCD_H__
+#define __XB_BCD_H__
+#ifdef XB_INDEX_SUPPORT
+
+///@cond DOXYOFF
+
+namespace xb{
+
+// structure for bcd value
+// next structure superceeded. Different compilers allocate different
+// sizes to structures with bit fields, can't count on the size
+
+/*
+struct XBDLLEXPORT xbBcdStrucOld {
+ unsigned SigDigits : 8; // significant digit count
+ unsigned Filler : 2; // always set to 1
+ unsigned EncDigits : 5; // encoded digit count
+ unsigned Sign : 1; // +/- sign
+ unsigned char Data[10];
+};
+*/
+
+struct XBDLLEXPORT xbBcdStruct {
+ unsigned char cSigDigits; // significant digit count
+ unsigned char cEncDigits; // encoded digit count
+ unsigned char cData[10]; // data
+};
+
+struct XBDLLEXPORT xbByteSplit {
+ unsigned c1 : 4;
+ unsigned c2 : 4;
+};
+
+class XBDLLEXPORT xbBcd {
+ public:
+
+ xbBcd( const xbString &sIn );
+ xbBcd( xbDouble dIn );
+ xbBcd( const void *vBcd12In );
+ void Set( xbDouble dIn );
+ void Set( const void *cBcd12In );
+ void Set( const xbString &sIn );
+
+
+ void ToString( xbString &sOut );
+ void ToDouble( xbDouble &dOut );
+ void ToBcd( xbBcdStruct &bcdOut );
+ void ToChar( char *cOut );
+
+ // const unsigned char * GetBcd() const;
+ void StringToBcd( const xbString &sStringIn );
+
+ xbInt16 Compare( const xbBcd &bcdIn );
+ xbInt16 Compare( xbDouble d );
+
+ const unsigned char *GetData() const;
+ const void * GetBcd() const;
+
+
+ private:
+ void ctor();
+ unsigned char GetEncDigitsNoSign() const;
+ unsigned GetSign() const;
+ unsigned GetSigDigits() const;
+ unsigned GetActualSigDigits() const;
+
+
+// xbBcdStruc bcdOld;
+ xbBcdStruct bcd;
+};
+
+} /* namespace xb */
+
+
+///@endcond DOXYOFF
+
+#endif /* XB_INDEX_SUPPORT */
+#endif /* __XB_BCD_H__ */
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h
new file mode 100755
index 0000000..353c618
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h
@@ -0,0 +1,70 @@
+/* xbblkread.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_BLKREAD_H__
+#define __XB_BLKREAD_H__
+
+namespace xb{
+#ifdef XB_BLOCKREAD_SUPPORT
+
+
+
+//! @brief xbBlockRead class.
+/*!
+The xbBlockRead class can be used to read blocks of records at one time
+rather than one record at a time for perfomance improvements when reading a DBF file sequentially.<br>
+
+*/
+
+
+class XBDLLEXPORT xbBlockRead {
+
+ public:
+ xbBlockRead( xbDbf * d );
+ ~xbBlockRead();
+
+ #ifdef XB_DEBUG_SUPPORT
+ void DumpReadBlockInternals();
+ #endif
+
+ xbInt16 Init( xbUInt32 ulBlkSize = 0 );
+
+ xbUInt32 GetBlockFirstRecNo() const;
+ xbUInt32 GetBlockRecCnt() const;
+ xbUInt32 GetBlockSize() const;
+
+ xbInt16 GetRecord( xbUInt32 ulRecNo ); // retrieve a data record from a block to RecBuf
+ xbInt16 SetBlockSize( xbUInt32 ulBlkSize );
+
+
+ private:
+
+ xbInt16 GetBlockForRecNo( xbUInt32 ulRecNo ); // retrieve block from disk for a given record number
+
+ char *pBlock; // block pointer
+ xbUInt32 ulBlkSize; // block size in bytes
+ xbUInt32 ulFirstBlkRec; // first recod number in the block
+ xbUInt32 ulRecCnt; // number of records in block
+ xbUInt32 ulMaxRecs; // max number of records block can handle
+ xbBool bEof; // EOF flag
+ xbDbf *dbf; // reference to associated dbf file
+// xbXBase *xbase; // reference to main xbXBase structure
+ time_t tFmTime; // file modify time at time of block read
+
+};
+
+#endif // XB_BLOCKREAD
+} /* namespace */
+#endif /* __XB_BLOCKREAD_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/1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h
new file mode 100755
index 0000000..635d117
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h
@@ -0,0 +1,78 @@
+/* xbfilter.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
+
+This class manages the user data area (UDA)
+
+*/
+
+
+#ifndef __XB_XBFILTER_H__
+#define __XB_XBFILTER_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+
+#ifdef XB_FILTER_SUPPORT
+
+
+namespace xb{
+
+//#ifdef XB_INDEX_SUPPORT
+//class XBDLLEXPORT xbIx;
+//#endif // XB_INDEX_SUPPORT
+
+
+class XBDLLEXPORT xbFilter {
+
+ public:
+ xbFilter( xbDbf *dbf );
+ ~xbFilter();
+ xbInt16 Set( xbString &sFilterExpression );
+ xbInt16 Set( const char *sFilterExpression );
+ xbInt16 GetFirstRecord( xbInt16 iOpt = 1 );
+ xbInt16 GetNextRecord ( xbInt16 iOpt = 1 );
+ xbInt16 GetPrevRecord ( xbInt16 iOpt = 1 );
+ xbInt16 GetLastRecord ( xbInt16 iOpt = 1 );
+ void SetLimit( xbInt32 ulLimit );
+ xbInt32 GetLimit() const;
+ void ResetQryCnt();
+ xbInt32 GetQryCnt() const;
+
+ #ifdef XB_INDEX_SUPPORT
+ xbInt16 GetFirstRecordIx( xbInt16 iOpt = 1 );
+ xbInt16 GetNextRecordIx ( xbInt16 iOpt = 1 );
+ xbInt16 GetPrevRecordIx ( xbInt16 iOpt = 1 );
+ xbInt16 GetLastRecordIx ( xbInt16 iOpt = 1 );
+ #endif // XB_INDEX_SUPPORT
+
+
+ private:
+// xbXBase *xbase;
+ xbDbf *dbf;
+ xbExp *exp;
+
+ xbInt32 lLimit; // max number rows returned
+ xbInt32 lCurQryCnt; // current count of rows returned, neg# is moving from bottom to top
+ // pos# is moving from top to bottom
+ #ifdef XB_INDEX_SUPPORT
+ xbIx *pIx; // if index is set, the class uses the index tag, otherwise table
+ void *vpTag;
+ #endif // XB_INDEX_SUPPORT
+
+
+};
+} /* namespace */
+#endif /* XB_FILTER_SUPPORT */
+#endif /* __XBFILTER_H__ */ \ No newline at end of file
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/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h.nope b/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h.nope
new file mode 100755
index 0000000..b42f76e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h.nope
@@ -0,0 +1,605 @@
+/* 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 Reindex( void **vpTag ) = 0;
+ 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 ) {};
+
+
+ #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( xbUInt32 ulRecNo );
+ 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 xbBool GetIndexUpdated() const = 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 xbInt16 KeyUpdated( void *vpTag ) const = 0;
+ virtual void NodeFree( xbIxNode * ixNode );
+ virtual xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 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
+// xbInt16 iKeyUpdated; // key updated? set in method KeyUpdated, checked in AddKey and DeleteKey routines
+ 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 DeleteTag( 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 Reindex( void **vpTag );
+ 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
+
+ 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 );
+// xbBool GetIndexUpdated() const;
+ 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 );
+// xbBool KeyFiltered( void *vpTag ) const;
+// xbInt16 KeyUpdated( void *vpTag ) const;
+ xbInt16 ReadHeadBlock(xbInt16 iOpt); // read the header node of the disk NDX file
+ 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 );
+ // void SetCurNode( void *vpTag, xbIxNode *np );
+ 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
+// xbBool iKeyUpdated; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines
+ // 0 - no update
+ // 1 - Add
+ // 2 - Update
+ // 3 - Delete
+// xbBool bKeyFiltered; // key filtered? True if included key, False if excluded key. Set in method CreateKey, checked in AddKey and DeleteKey routines
+ 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();
+ 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 DeleteTag( void *vpTag );
+ xbInt16 FindKey( void *vpTag, const void *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
+ xbInt16 FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw );
+ xbInt16 GetFirstKey( void *vpTag, xbInt16 lRetrieveSw );
+ xbString &GetKeyExpression( const void *vpTag ) const;
+ xbString &GetKeyFilter( const void *vpTag ) const;
+ char GetKeyType( const void *vpTag ) const;
+ xbInt16 GetLastKey( void *vpTag, xbInt16 lRetrieveSw );
+ xbInt16 GetNextKey( void *vpTag, xbInt16 lRetrieveSw );
+ xbInt16 GetPrevKey( void *vpTag, xbInt16 lRetrieveSw );
+ xbBool GetReuseEmptyNodesSw() const;
+ xbBool GetSortOrder( void *vpTag ) const;
+ void *GetTag( xbInt16 iTagNo ) const;
+ void *GetTag( xbString &sTagName ) const;
+ xbInt16 GetTagCount() const;
+
+ xbString &GetTagName( void *vpTag ) const;
+ const char * GetTagName( void *vpTag, xbInt16 iOpt ) const;
+ void GetTagName( void *vpTag, xbString &sTagName );
+
+ xbInt16 GetUnique( void *vpTag ) const;
+ xbInt16 Reindex( void **vpTag );
+ xbInt16 SetCurTag( xbInt16 iTagNo );
+ xbInt16 SetCurTag( xbString &sTagName );
+ void SetReuseEmptyNodesSw( xbBool bReuse );
+
+ void TestStub( char *s, void *vpTag );
+
+ protected:
+ friend class xbDbf;
+
+ xbInt16 AddKey( void *vpTag, xbUInt32 ulRecNo );
+ xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );
+ xbInt16 CheckForDupKey( void *vpTag );
+ xbInt16 Close();
+ 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 GetKeySts( void *vpTag ) const;
+ xbInt16 GetLastKey( xbUInt32 ulBlockNo, void *vpTag, xbInt16 lRetrieveSw );
+ void *GetTagTblPtr() const;
+ 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
+ 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
+
+ private:
+ xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );
+ void AppendNodeChain( void *vpTag, xbIxNode *npNode );
+ xbUInt32 BlockToPage( xbUInt32 ulBlockNo );
+ void CalcBtreePointers();
+ char CalcTagKeyFmt( xbExp &exp );
+ char CalcTagFwdThread1();
+ char CalcTagFwdThread2();
+ 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 );
+ xbInt16 HarvestTagNodes( xbMdxTag *mpTag, xbBool bRecycleRoot = 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
+
+ // 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
+
+
+
+ xbMdxTag *mdxTagTbl;
+
+ 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.
+
+};
+#endif /* XB_MDX_SUPPORT */
+
+
+} /* namespace xb */
+#endif /* XB_INDEX_SUPPORT */
+#endif /* __XB_INDEX_H__ */
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h
new file mode 100755
index 0000000..eaec587
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h
@@ -0,0 +1,257 @@
+/* xblnklst.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_XBLNKLST_H__
+#define __XB_XBLNKLST_H__
+
+#ifdef XB_LINKLIST_SUPPORT
+
+namespace xb{
+
+
+template<class xbNodeType>
+class XBDLLEXPORT xbLinkList {
+ public:
+ xbLinkList();
+ ~xbLinkList();
+
+ xbLinkListNode<xbNodeType> *GetHeadNode() const;
+ xbLinkListNode<xbNodeType> *GetEndNode() const;
+ xbLinkListNode<xbNodeType> *GetNodeForNo( xbUInt32 ulNodeNo ) const;
+
+ void Clear();
+ xbUInt32 GetNodeCnt () const;
+ xbInt16 InsertAtEnd ( const xbNodeType &xbLLN );
+ xbInt16 InsertAtFront ( const xbNodeType &xbLLN );
+ xbInt16 RemoveByVal ( const xbNodeType &xbLLN );
+ xbInt16 RemoveFromEnd ();
+ xbInt16 RemoveFromEnd ( xbNodeType &xbLLN );
+ xbInt16 RemoveFromFront( xbNodeType &xbLLN );
+ xbInt16 SearchFor ( const xbNodeType &xbLLN );
+
+ private:
+ xbUInt32 ulNodeCnt;
+ xbLinkListNode<xbNodeType> *llStartPtr;
+ xbLinkListNode<xbNodeType> *llEndPtr;
+};
+
+template<class xbNodeType>
+xbLinkList<xbNodeType>::xbLinkList(){
+ ulNodeCnt = 0;
+ llStartPtr = NULL;
+ llEndPtr = NULL;
+}
+
+template<class xbNodeType>
+xbLinkList<xbNodeType>::~xbLinkList(){
+ Clear();
+}
+
+template<class xbNodeType>
+void xbLinkList<xbNodeType>::Clear(){
+ xbLinkListNode<xbNodeType> *cPtr = llStartPtr, *tPtr;
+ for( xbUInt32 i = 0; i < ulNodeCnt; i++ ){
+ tPtr = cPtr;
+ cPtr = cPtr->GetNextNode();
+ delete tPtr;
+ }
+ ulNodeCnt = 0;
+ llStartPtr = NULL;
+ llEndPtr = NULL;
+}
+
+
+template<class xbNodeType>
+xbLinkListNode<xbNodeType> *xbLinkList<xbNodeType>::GetHeadNode() const{
+ return llStartPtr;
+}
+
+template<class xbNodeType>
+xbLinkListNode<xbNodeType> *xbLinkList<xbNodeType>::GetEndNode() const{
+ return llEndPtr;
+}
+
+
+template<class xbNodeType>
+xbLinkListNode<xbNodeType> *xbLinkList<xbNodeType>::GetNodeForNo( xbUInt32 ulNo ) const{
+
+ xbLinkListNode<xbNodeType> *cPtr = llStartPtr;
+ xbUInt32 i;
+ for( i = 0; i < ulNo && i < ulNodeCnt; i++ )
+ cPtr = cPtr->GetNextNode();
+
+ if( i == ulNo )
+ return cPtr;
+ else
+ return 0;
+}
+
+
+
+template<class xbNodeType>
+xbUInt32 xbLinkList<xbNodeType>::GetNodeCnt() const{
+ return ulNodeCnt;
+}
+
+template<class xbNodeType>
+xbInt16 xbLinkList<xbNodeType>::InsertAtFront( const xbNodeType & ntKey ){
+
+ xbLinkListNode<xbNodeType> *p = new xbLinkListNode<xbNodeType>( ntKey );
+ if( p == 0 )
+ return XB_NO_MEMORY;
+
+ if( ulNodeCnt > 0 ){
+ llStartPtr->SetPrevNode( p );
+ p->SetNextNode( llStartPtr );
+ } else {
+ llEndPtr = p;
+ }
+
+ llStartPtr = p;
+ ulNodeCnt++;
+ return XB_NO_ERROR;
+}
+
+template<class xbNodeType>
+xbInt16 xbLinkList<xbNodeType>::InsertAtEnd( const xbNodeType & ntKey ){
+
+ xbLinkListNode<xbNodeType> *p = new xbLinkListNode<xbNodeType>( ntKey );
+ if( p == 0 )
+ return XB_NO_MEMORY;
+
+ if( ulNodeCnt > 0 ){
+ llEndPtr->SetNextNode( p );
+ p->SetPrevNode( llEndPtr );
+ llEndPtr = p;
+ } else {
+ llStartPtr = p;
+ }
+
+ llEndPtr = p;
+ ulNodeCnt++;
+ return XB_NO_ERROR;
+}
+
+
+
+template<class xbNodeType>
+xbInt16 xbLinkList<xbNodeType>::RemoveByVal( const xbNodeType & ntKey ){
+ // Remove the first instance of ntKey from the node chain
+ xbLinkListNode<xbNodeType> *currPtr = llStartPtr;
+ xbLinkListNode<xbNodeType> *prevPtr = NULL;
+
+ for( xbUInt32 i = 0; i < ulNodeCnt; i++ ){
+ if( currPtr->GetKey() == ntKey ){
+ if( prevPtr == NULL ){ //then this is the first node
+ llStartPtr = currPtr->GetNextNode();
+ if( llStartPtr ) // if more than one link in the linked list
+ llStartPtr->SetPrevNode( NULL );
+ delete currPtr;
+ ulNodeCnt--;
+ return i + 1;
+ }
+ else {
+ prevPtr->SetNextNode( currPtr->GetNextNode());
+ if( currPtr->GetNextNode())
+ currPtr->GetNextNode()->SetPrevNode( prevPtr );
+ delete currPtr;
+ ulNodeCnt--;
+ return i + 1;
+ }
+ }
+ prevPtr = currPtr;
+ currPtr = currPtr->GetNextNode();
+ }
+ return XB_NOT_FOUND;
+}
+
+
+template<class xbNodeType>
+xbInt16 xbLinkList<xbNodeType>::RemoveFromFront( xbNodeType & ntKey ){
+
+ if( ulNodeCnt <= 0 )
+ return XB_INVALID_NODELINK;
+ xbLinkListNode<xbNodeType> *p = llStartPtr;
+ llStartPtr = p->GetNextNode();
+ if( llStartPtr )
+ llStartPtr->SetPrevNode( NULL );
+ ntKey = p->GetKey();
+ delete p;
+ ulNodeCnt--;
+ return XB_NO_ERROR;
+}
+
+
+template<class xbNodeType>
+xbInt16 xbLinkList<xbNodeType>::RemoveFromEnd( xbNodeType & ntKey ){
+
+ if( ulNodeCnt <= 0 )
+ return XB_INVALID_NODELINK;
+ xbLinkListNode<xbNodeType> *p = llEndPtr;
+ if( p->GetPrevNode()){
+ llEndPtr = p->GetPrevNode();
+ llEndPtr->SetNextNode( NULL );
+ } else {
+ // there are no more nodes
+ llStartPtr = NULL;
+ llEndPtr = NULL;
+ }
+ ntKey = p->GetKey();
+ delete p;
+ ulNodeCnt--;
+ return XB_NO_ERROR;
+}
+
+
+template<class xbNodeType>
+xbInt16 xbLinkList<xbNodeType>::RemoveFromEnd(){
+
+ if( ulNodeCnt <= 0 )
+ return XB_INVALID_NODELINK;
+ xbLinkListNode<xbNodeType> *p = llEndPtr;
+ if( p->GetPrevNode()){
+ llEndPtr = p->GetPrevNode();
+ llEndPtr->SetNextNode( NULL );
+ } else {
+ // there are no more nodes
+ llStartPtr = NULL;
+ llEndPtr = NULL;
+ }
+ delete p->GetKey();
+ delete p;
+ ulNodeCnt--;
+ return XB_NO_ERROR;
+}
+
+
+template<class xbNodeType>
+xbInt16 xbLinkList<xbNodeType>::SearchFor( const xbNodeType & ntKey ){
+
+ xbLinkListNode<xbNodeType> *cPtr = llStartPtr;
+ for( xbUInt32 i = 0; i < ulNodeCnt; i++ ){
+ if( cPtr->GetKey() == ntKey )
+ return i+1;
+ cPtr = cPtr->GetNextNode();
+ }
+ return XB_NO_ERROR;
+
+}
+} // namespace
+
+#endif // XB_LINKLIST_SUPPORT
+#endif // XB_XBLNKLST_H__
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h
new file mode 100755
index 0000000..d319c31
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h
@@ -0,0 +1,367 @@
+/* xblnklstord.h
+
+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
+
+*/
+
+
+// Ordered link list
+
+
+
+#ifndef __XB_XBLNKLSTORD_H__
+#define __XB_XBLNKLSTORD_H__
+
+#ifdef XB_LINKLIST_SUPPORT
+
+
+namespace xb{
+
+
+template<class xbNodeType>
+class XBDLLEXPORT xbLinkListOrd {
+ public:
+ xbLinkListOrd();
+ ~xbLinkListOrd();
+
+ void Clear();
+ xbLinkListNode<xbNodeType> *GetHeadNode() const;
+ xbLinkListNode<xbNodeType> *GetEndNode() const;
+ xbLinkListNode<xbNodeType> *GetNodeForKey( const xbString &sKey ) const;
+
+ xbInt16 GetDataForKey ( const xbNodeType &ntKey, xbString &sData );
+
+ xbBool GetDupKeys ();
+
+ xbUInt32 GetNodeCnt () const;
+ xbUInt32 GetNodeCnt ( const xbString &sNodeKey ) const;
+ xbInt16 InsertKey ( const xbNodeType &ntKey );
+ xbInt16 InsertKey ( const xbNodeType &ntKey, const xbString &sData );
+ xbInt16 InsertKey ( const xbNodeType &ntKey, xbUInt32 ulData );
+
+ xbBool KeyExists ( const xbNodeType &ntKey ) const;
+ xbInt16 RemoveKey ( const xbNodeType &ntKey );
+ xbInt16 RemoveFromEnd ( xbNodeType &ntKey );
+ xbInt16 RemoveFromFront( xbNodeType &ntKey );
+ xbInt16 RemoveFromFront();
+ void SetDupKeys ( xbBool bAllowDupKeys );
+ xbInt16 UpdateForKey ( const xbNodeType &ntKey, const xbString &sData );
+
+
+ private:
+ xbUInt32 ulNodeCnt;
+ xbBool bAllowDupKeys;
+ xbLinkListNode<xbNodeType> *llStartPtr;
+ xbLinkListNode<xbNodeType> *llEndPtr;
+
+};
+
+
+template<class xbNodeType>
+xbLinkListOrd<xbNodeType>::xbLinkListOrd(){
+ bAllowDupKeys = xbTrue; // default setting - allow duplicate keys
+ ulNodeCnt = 0;
+ llStartPtr = NULL;
+ llEndPtr = NULL;
+}
+
+template<class xbNodeType>
+xbLinkListOrd<xbNodeType>::~xbLinkListOrd(){
+ Clear();
+}
+
+template<class xbNodeType>
+void xbLinkListOrd<xbNodeType>::Clear(){
+ xbLinkListNode<xbNodeType> *cPtr = llStartPtr, *tPtr;
+ for( xbUInt32 i = 0; i < ulNodeCnt; i++ ){
+ tPtr = cPtr;
+ cPtr = cPtr->GetNextNode();
+
+ // next line might cause seg faults
+ // delete tPtr->GetData();
+
+ delete tPtr;
+ }
+ ulNodeCnt = 0;
+ llStartPtr = NULL;
+ llEndPtr = NULL;
+}
+
+template<class xbNodeType>
+xbLinkListNode<xbNodeType> * xbLinkListOrd<xbNodeType>::GetHeadNode() const{
+ return llStartPtr;
+}
+
+template<class xbNodeType>
+xbLinkListNode<xbNodeType> * xbLinkListOrd<xbNodeType>::GetEndNode() const{
+ return llEndPtr;
+}
+
+template<class xbNodeType>
+xbUInt32 xbLinkListOrd<xbNodeType>::GetNodeCnt() const{
+ return ulNodeCnt;
+}
+
+template<class xbNodeType>
+xbUInt32 xbLinkListOrd<xbNodeType>::GetNodeCnt( const xbString &sNodeKey ) const{
+
+ // won't work if nodekey is not a string
+ xbLinkListNode<xbNodeType> *currPtr = llStartPtr;
+ // skip to sNodeKey
+ while( currPtr && ( sNodeKey > currPtr->GetKey())) {
+ currPtr = currPtr->GetNextNode();
+ }
+ // count entries for sNodeKey
+ xbInt16 iKeyCnt = 0;
+ while( currPtr && ( sNodeKey == currPtr->GetKey())) {
+ iKeyCnt++;
+ currPtr = currPtr->GetNextNode();
+ }
+ return iKeyCnt;
+}
+
+
+template<class xbNodeType>
+xbInt16 xbLinkListOrd<xbNodeType>::InsertKey( const xbNodeType &ntKey ){
+ xbString s;
+ return InsertKey( ntKey, s );
+}
+
+
+
+
+template<class xbNodeType>
+xbInt16 xbLinkListOrd<xbNodeType>::InsertKey( const xbNodeType &ntKey, xbUInt32 ul ){
+
+ xbString s;
+ s.Sprintf( "%ld", ul );
+ return InsertKey( ntKey, s );
+}
+
+
+template<class xbNodeType>
+xbInt16 xbLinkListOrd<xbNodeType>::InsertKey( const xbNodeType &ntKey, const xbString &sData ){
+
+ xbLinkListNode<xbNodeType> *p = new xbLinkListNode<xbNodeType>( ntKey, sData );
+ if( p == 0 )
+ return XB_NO_MEMORY;
+
+ if( ulNodeCnt > 0 ){
+ xbLinkListNode<xbNodeType> *currPtr = llStartPtr;
+ xbLinkListNode<xbNodeType> *prevPtr = NULL;
+
+ // find location in the chain
+ while( currPtr && ntKey > currPtr->GetKey() ){
+ prevPtr = currPtr;
+ currPtr = currPtr->GetNextNode();
+ }
+ if( currPtr && ntKey == currPtr->GetKey() && bAllowDupKeys == 0 ){
+ delete p;
+ return XB_KEY_NOT_UNIQUE;
+ }
+
+ if( currPtr == NULL ){
+ // std::cout << "at the end of the chain\n";
+ llEndPtr = p;
+ prevPtr->SetNextNode( p );
+ p->SetPrevNode( prevPtr );
+
+ } else if( currPtr->GetPrevNode() == NULL ){
+ // std::cout << "at the beginning of the chain\n";
+ p->SetNextNode( llStartPtr );
+ llStartPtr->SetPrevNode( p );
+ llStartPtr = p;
+
+ } else {
+ // std::cout << "in the middle of the chain\n";
+ p->SetNextNode( currPtr );
+ p->SetPrevNode( currPtr->GetPrevNode());
+ currPtr->SetPrevNode( p );
+ prevPtr->SetNextNode( p );
+ }
+ } else {
+ // std::cout << "first addition to the chain\n";
+ llStartPtr = p;
+ llEndPtr = p;
+ }
+ ulNodeCnt++;
+ return XB_NO_ERROR;
+}
+
+template<class xbNodeType>
+xbInt16 xbLinkListOrd<xbNodeType>::RemoveKey( const xbNodeType &ntKey ){
+ // Remove the first instance of ntKey from the node chain
+ xbLinkListNode<xbNodeType> *currPtr = llStartPtr;
+ xbLinkListNode<xbNodeType> *prevPtr = NULL;
+
+ while( currPtr && ntKey > currPtr->GetKey() ){
+ prevPtr = currPtr;
+ currPtr = currPtr->GetNextNode();
+ }
+
+ if( currPtr && ntKey == currPtr->GetKey()){
+// ntKey = currPtr->GetKey();
+ if( prevPtr == NULL ){ // this is the first node
+ llStartPtr = currPtr->GetNextNode();
+ // next line fails
+ if( llStartPtr ){
+ llStartPtr->SetPrevNode( NULL );
+ }
+ delete currPtr;
+ ulNodeCnt--;
+ return XB_NO_ERROR;
+ } else if( currPtr->GetNextNode() == NULL ){ // this is the last node
+ llEndPtr = prevPtr;
+ prevPtr->SetNextNode( NULL );
+ delete currPtr;
+ ulNodeCnt--;
+ return XB_NO_ERROR;
+ } else {
+
+ prevPtr->SetNextNode( currPtr->GetNextNode());
+ currPtr->GetNextNode()->SetPrevNode( prevPtr );
+ delete currPtr;
+ ulNodeCnt--;
+ return XB_NO_ERROR;
+ }
+ } else {
+ return XB_NOT_FOUND;
+ }
+}
+
+template<class xbNodeType>
+xbInt16 xbLinkListOrd<xbNodeType>::RemoveFromFront( xbNodeType &ntKey ){
+
+ if( ulNodeCnt <= 0 )
+ return XB_INVALID_NODELINK;
+ xbLinkListNode<xbNodeType> *p = llStartPtr;
+ llStartPtr = p->GetNextNode();
+ if( llStartPtr )
+ llStartPtr->SetPrevNode( NULL );
+ ntKey = p->GetKey();
+ delete p;
+ ulNodeCnt--;
+ return XB_NO_ERROR;
+}
+
+template<class xbNodeType>
+xbInt16 xbLinkListOrd<xbNodeType>::RemoveFromFront(){
+
+ if( ulNodeCnt <= 0 )
+ return XB_INVALID_NODELINK;
+ xbLinkListNode<xbNodeType> *p = llStartPtr;
+ llStartPtr = p->GetNextNode();
+ if( llStartPtr )
+ llStartPtr->SetPrevNode( NULL );
+
+ if( p->GetKey())
+ delete p->GetKey();
+
+ delete p;
+ ulNodeCnt--;
+
+ return XB_NO_ERROR;
+}
+
+
+template<class xbNodeType>
+xbInt16 xbLinkListOrd<xbNodeType>::RemoveFromEnd( xbNodeType &ntKey ){
+
+ if( ulNodeCnt <= 0 )
+ return XB_INVALID_NODELINK;
+ xbLinkListNode<xbNodeType> *p = llEndPtr;
+ llEndPtr = p->GetPrevNode();
+ llEndPtr->SetNextNode( NULL );
+ ntKey = p->GetKey();
+ delete p;
+ ulNodeCnt--;
+ return XB_NO_ERROR;
+}
+
+template<class xbNodeType>
+xbBool xbLinkListOrd<xbNodeType>::GetDupKeys(){
+ return bAllowDupKeys;
+}
+
+template<class xbNodeType>
+void xbLinkListOrd<xbNodeType>::SetDupKeys( xbBool bAllowDupKeys ){
+ this->bAllowDupKeys = bAllowDupKeys;
+}
+
+
+template<class xbNodeType>
+xbBool xbLinkListOrd<xbNodeType>::KeyExists( const xbNodeType &ntKey ) const {
+
+ xbLinkListNode<xbNodeType> *currPtr = llStartPtr;
+ while( currPtr && ntKey > currPtr->GetKey() ){
+ currPtr = currPtr->GetNextNode();
+ }
+ if( currPtr && ntKey == currPtr->GetKey()){
+ return xbTrue;
+ } else {
+ return xbFalse;
+ }
+}
+
+
+template<class xbNodeType>
+xbInt16 xbLinkListOrd<xbNodeType>::GetDataForKey( const xbNodeType &ntKey, xbString &sData ){
+
+ xbLinkListNode<xbNodeType> *currPtr = llStartPtr;
+ while( currPtr && ntKey > currPtr->GetKey() ){
+ currPtr = currPtr->GetNextNode();
+ }
+
+ if( currPtr && ntKey == currPtr->GetKey()){
+ sData = currPtr->GetData();
+ return XB_NO_ERROR;
+ } else {
+ return XB_NOT_FOUND;
+ }
+}
+
+
+template<class xbNodeType>
+xbInt16 xbLinkListOrd<xbNodeType>::UpdateForKey( const xbNodeType &ntKey, const xbString &sData ){
+
+ if( ulNodeCnt == 0 )
+ return InsertKey( ntKey, sData );
+ xbLinkListNode<xbNodeType> * currPtr = llStartPtr;
+ xbLinkListNode<xbNodeType> * prevPtr = NULL;
+ while( currPtr && ntKey > currPtr->GetKey() ) {
+ prevPtr = currPtr;
+ currPtr = currPtr->GetNextNode();
+ }
+
+ if( currPtr && ntKey == currPtr->GetKey() ) {
+ xbLinkListNode<xbNodeType> *p = new xbLinkListNode<xbNodeType>( ntKey, sData );
+ if( prevPtr )
+ prevPtr->SetNextNode( p );
+ else
+ llStartPtr = p;
+ p->SetNextNode( currPtr->GetNextNode() );
+ p->SetPrevNode( currPtr->GetPrevNode() );
+ delete currPtr;
+ return XB_NO_ERROR;
+ }
+
+ return InsertKey( ntKey, sData );
+
+// return 0;
+}
+
+} // namespace
+
+#endif // XB_LINKLIST_SUPPORT
+#endif // XB_XBLNKLSTORD_H__
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h
new file mode 100755
index 0000000..ef45be8
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h
@@ -0,0 +1,94 @@
+/* xblnknod.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_XBLNKNOD_H__
+#define __XB_XBLNKNOD_H__
+
+
+
+#ifdef XB_LINKLIST_SUPPORT
+
+namespace xb{
+
+template<class xbNodeType>
+class XBDLLEXPORT xbLinkListNode {
+ public:
+ xbLinkListNode( const xbNodeType & );
+ xbLinkListNode( const xbNodeType &, const xbString & );
+ xbNodeType GetKey() const;
+ xbString &GetData();
+ xbLinkListNode<xbNodeType> *GetNextNode() const;
+ xbLinkListNode<xbNodeType> *GetPrevNode() const;
+ void SetNextNode( xbLinkListNode<xbNodeType> *llNext );
+ void SetPrevNode( xbLinkListNode<xbNodeType> *llPrev );
+
+ private:
+ xbNodeType ntKey;
+ xbString sData;
+ xbLinkListNode *llNext;
+ xbLinkListNode *llPrev;
+};
+
+ template<class xbNodeType>
+ xbLinkListNode<xbNodeType>::xbLinkListNode( const xbNodeType &key ){
+ ntKey = key;
+ llNext = NULL;
+ llPrev = NULL;
+ }
+
+ template<class xbNodeType>
+ xbLinkListNode<xbNodeType>::xbLinkListNode( const xbNodeType &key, const xbString &s ){
+ ntKey = key;
+ sData = s;
+ llNext = NULL;
+ llPrev = NULL;
+ }
+
+ template<class xbNodeType>
+ xbNodeType xbLinkListNode<xbNodeType>::GetKey() const {
+ return ntKey;
+ }
+
+ template<class xbNodeType>
+ xbString &xbLinkListNode<xbNodeType>::GetData(){
+ return sData;
+ }
+
+ template<class xbNodeType>
+ xbLinkListNode<xbNodeType> *xbLinkListNode<xbNodeType>::GetNextNode() const {
+ return llNext;
+ }
+
+ template<class xbNodeType>
+ xbLinkListNode<xbNodeType> *xbLinkListNode<xbNodeType>::GetPrevNode() const {
+ return llPrev;
+ }
+
+ template<class xbNodeType>
+ void xbLinkListNode<xbNodeType>::SetNextNode( xbLinkListNode<xbNodeType> *lln ){
+ llNext = lln;
+ }
+
+ template<class xbNodeType>
+ void xbLinkListNode<xbNodeType>::SetPrevNode( xbLinkListNode<xbNodeType> *llp ){
+ llPrev = llp;
+ }
+
+} // namespace
+#endif // XB_LINKLIST_SUPPORT
+#endif // XB_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/1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h
new file mode 100755
index 0000000..ad9aac2
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h
@@ -0,0 +1,224 @@
+/* xbmemo.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_XBMEMO_H__
+#define __XB_XBMEMO_H__
+
+
+// dont use "#pragma interface" with abstract classes
+// #ifdef CMAKE_COMPILER_IS_GNUCC
+// #pragma interface
+// #endif
+
+#ifdef XB_MEMO_SUPPORT
+
+
+
+
+namespace xb{
+
+//! @brief Base class for memo files.
+/*!
+
+The xbMemo class is used as a base class for accessing memo files.
+
+Any DBF file which has any memo fields, will also have a DBT file with the same name.
+Memo fields are stored in the DBT file in 512 or 1024 byte sized blocks.
+
+Calls to the memo routines to read and access memo fields are supported from within
+the dbf class via the GetMemoField and UpdateMemoField routines.
+From an application program point of view, the application program does not need to
+be concerned with the memo classes.<br>
+
+The main difference between the version 3 and version 4 memo files is that
+the version 4 files will reclaim and reuse blocks if available. The version 3
+memo file logic does not.<br>
+
+If you are adding a new style memo table to the logic, you can create a new class
+modeled after xbMemoDbt3 or xbDbtMemo4, using the xbMemo class as a base class.
+
+*/
+
+class XBDLLEXPORT xbMemo : public xbFile {
+ public:
+
+ xbMemo( xbDbf *dbf, xbString const &sFileName );
+
+ /* virtual methods */
+ virtual ~xbMemo();
+ virtual xbInt16 Abort () = 0;
+ virtual xbInt16 CloseMemoFile ();
+ virtual xbInt16 Commit () = 0;
+ virtual xbInt16 CreateMemoFile () = 0;
+
+ virtual xbInt16 DumpMemoHeader () = 0;
+
+
+ virtual xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &sMemoData ) = 0;
+ virtual xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen ) = 0;
+ virtual xbInt16 OpenMemoFile () = 0;
+ virtual xbInt16 GetMemoFileType ();
+ virtual xbInt16 PackMemo ( void (*memoStatusFunc)(xbUInt32 ulItemNum, xbUInt32 ulNumItems)) = 0;
+ virtual xbInt16 UpdateMemoField ( xbInt16 iFieldNo, const xbString &sMemoData ) = 0;
+
+ #ifdef XB_DEBUG_SUPPORT
+ virtual xbInt16 DumpMemoFreeChain() = 0;
+ #endif
+
+ #ifdef XB_LOCKING_SUPPORT
+ virtual xbInt16 LockMemo ( xbInt16 iLockFunction );
+ virtual xbBool GetMemoLocked () const;
+ #endif
+
+
+
+ // *********** FIXME *************
+ // next two methods should be protected but are called in the xb_test_xxxx programs testing routines
+ // so for now, they are kept as public
+ virtual xbInt16 CalcLastDataBlock ( xbUInt32 &lLastDataBlock );
+ virtual xbInt16 GetHdrNextBlock ( xbUInt32 &ulBlockNo );
+
+ protected:
+ friend class xbDbf;
+
+ virtual xbInt16 ReadDbtHeader ( xbInt16 iOption ) = 0;
+ virtual xbInt16 UpdateHeaderName () = 0;
+ virtual xbInt16 UpdateHeadNextNode();
+ virtual xbInt16 Zap () = 0;
+
+ xbDbf *dbf; /* pointer to related dbf instance */
+ char cVersion; /* byte 16 off the header block, 0x03 for V3, version IV - ? */
+ xbInt16 iMemoFileType; /* 3 = version III, 4 = version IV */
+ xbUInt32 ulHdrNextBlock; /* next available block , bytes 0-3 of the memo header */
+ void * mbb; /* memo block buffer */
+
+
+ private:
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bFileLocked; /* memo file locked */
+ #endif
+
+};
+
+
+
+#ifdef XB_DBF3_SUPPORT
+//! @brief Derived class for version 3 memo files.
+/*!
+
+The xbMemoDbt3 class is derived from the xbMome class and is used for accessing the
+older Version 3 memo files.
+
+The main difference between the version 3 and version 4 memo files is that
+the version 4 files will reclaim and reuse blocks if available. The version 3
+memo file logic does not.<br>
+
+*/
+
+
+class XBDLLEXPORT xbMemoDbt3 : public xbMemo {
+ public:
+ xbMemoDbt3( xbDbf *dbf, xbString const &sFileName );
+ ~xbMemoDbt3();
+ virtual xbInt16 Abort ();
+ virtual xbInt16 Commit ();
+ virtual xbInt16 CreateMemoFile ();
+ virtual xbInt16 DumpMemoHeader ();
+ virtual xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &sMemoData );
+ virtual xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen );
+ virtual xbInt16 OpenMemoFile ();
+ virtual xbInt16 PackMemo ( void (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));
+ virtual xbInt16 UpdateMemoField( xbInt16 iFieldNo, const xbString &sMemoData );
+
+ #ifdef XB_DEBUG_SUPPORT
+ virtual xbInt16 DumpMemoFreeChain();
+ #endif
+
+ protected:
+ virtual xbInt16 ReadDbtHeader( xbInt16 iOption );
+ virtual xbInt16 UpdateHeaderName();
+ virtual xbInt16 Zap();
+
+ private:
+};
+#endif
+
+
+#ifdef XB_DBF4_SUPPORT
+
+//! @brief Derived class for version 4 memo files.
+/*!
+
+The xbMemoDbt4 class is derived from the xbMeme class and is used for accessing the
+current Version 4 memo files.
+
+The main difference between the version 3 and version 4 memo files is that
+the version 4 files will reclaim and reuse blocks if available. The version 3
+memo file logic does not.<br>
+*/
+
+class XBDLLEXPORT xbMemoDbt4 : public xbMemo {
+ public:
+ xbMemoDbt4( xbDbf *dbf, xbString const &sFileName );
+ ~xbMemoDbt4();
+ virtual xbInt16 Abort ();
+ virtual xbInt16 Commit ();
+ virtual xbInt16 CreateMemoFile ();
+ virtual xbInt16 DumpMemoHeader ();
+ virtual xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &sMemoData );
+ virtual xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen );
+ virtual xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen, xbUInt32 &lBlockNo );
+ virtual xbInt16 OpenMemoFile ();
+ virtual xbInt16 PackMemo ( void (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));
+ virtual xbInt16 UpdateMemoField ( xbInt16 iFieldNo, const xbString &sMemoData );
+
+ #ifdef XB_DEBUG_SUPPORT
+ virtual xbInt16 DumpMemoFreeChain ();
+ virtual xbInt16 DumpMemoInternals ();
+ virtual xbInt16 ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 &ulNextBlock, xbUInt32 &ulFreeBlockCnt );
+ #endif
+
+ protected:
+ virtual xbInt16 FindBlockSetInChain( xbUInt32 ulBlocksNeeded, xbUInt32 &ulLastDataBlock, xbUInt32 &ulLocation, xbUInt32 &ulPrevNode, xbBool &bFound );
+ virtual xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo );
+ virtual xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastDataBlock );
+ virtual xbInt16 GetBlockSetFromChain( xbUInt32 ulBlocksNeeded, xbUInt32 ulLocation, xbUInt32 ulPrevNode );
+ virtual xbInt16 ReadDbtHeader( xbInt16 iOption );
+ virtual xbInt16 ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );
+ virtual xbInt16 UpdateHeaderName ();
+ virtual xbInt16 WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );
+ virtual xbInt16 Zap();
+
+ private:
+ xbString sDbfFileNameWoExt;
+ xbUInt32 ulNextFreeBlock;
+ xbUInt32 ulFreeBlockCnt;
+ xbInt16 iField1;
+ xbInt16 iStartPos;
+ xbUInt32 ulFieldLen;
+
+ xbLinkList<xbUInt32> llOldBlocks; // list of previously used memo blocks for field, used by Commit() / Abort()
+ xbLinkList<xbUInt32> llNewBlocks; // list of newly updated memo blocks for field, used by Commit() / Abort()
+
+};
+#endif
+
+
+} /* namespace xb */
+#endif /* XB_MEMO_SUPPORT */
+#endif /* __XB_MEMO_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/1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h
new file mode 100755
index 0000000..07ffb70
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h
@@ -0,0 +1,161 @@
+/* xbsql.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
+
+This class manages a list of open tables, open indices are connected to the open tables
+
+*/
+
+
+#ifndef __XB_XBSQL_H__
+#define __XB_XBSQL_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+
+#ifdef XB_SQL_SUPPORT
+
+namespace xb{
+
+
+struct XBDLLEXPORT xbSqlFld{
+ char cType; // F - Database field
+ // L - Literal
+ // E - Expression
+ xbInt16 iFldNo; // Field number if db field
+ xbExp * pExp; // If cType=E, pointer to parsed expression
+ xbString sFldAlias; // Alias name for query display
+ xbSqlFld * Next; // Next field in list
+};
+
+class xbStmt;
+
+
+struct XBDLLEXPORT xbTblJoin { // structure for defining joined tables in the query
+
+ xbString sTableName;
+ xbString sAlias;
+ xbString sJoinExp; // table join expression
+ xbDbf *pDbf; // pointer the the dbf structure for this table
+ xbTag *pTag; // pointer to relevant tag for this table, null for record order
+ xbExp *pLinkExp; // pointer to parsed linkage expression
+ char cJoinType; // M - Master
+ // L - Left or Full Left
+ // R - Right or Full Right
+ // I - Inner
+ // O - Outer or Full Outer Outer
+
+ xbTblJoin *pMaster; // pointer to master table, null if this is the primary master
+ xbLinkList<xbTblJoin *> llSubList; // linked list of subordinate tables
+// xbStmt *pSubQuery; // pointer to sub query
+ xbTblJoin *next; // next tbl
+};
+
+
+class XBDLLEXPORT xbStmt : public xbSsv{
+
+ public:
+ xbStmt( xbXBase *x );
+ ~xbStmt();
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 DumpStmtInternals();
+ xbInt16 Test();
+ #endif
+
+ xbInt16 ExecuteQuery( const xbString &sCmdLine );
+
+// xbInt16 FetchFirst();
+// xbInt16 FetchNext();
+// xbInt16 FetchPrev();
+// xbInt16 FetchLast();
+// xbString &GetField( const xbString sFldName );
+
+ protected:
+
+ private:
+
+ xbInt16 AddQryTbl( const xbString &sTable, const xbString &sAlias, const xbString &sExpression, const char cJoinType );
+ xbInt16 CvtSqlExp2DbaseExp( const xbString &sExpIn, xbString &sExpOut );
+ xbInt16 GetNextFromSeg( const xbString &sLineIn, xbString &sFromSegOut );
+ xbUInt32 GetNextToken( const xbString &sCmdLineIn, xbString &sTokenOut, xbUInt32 ulStartPos );
+ xbInt16 GetParenCnt( const xbString &sToken );
+ xbInt16 ParseFromStmt( const xbString &sFromLine );
+ xbInt16 ParseStmt( const xbString &sCmdLine );
+ xbInt16 ProcessFromSeg( const xbString &sFromStmtSeg );
+ xbInt16 UpdateJoinList( char cType, const xbString &sTableName, const xbString &sAlias, const xbString &sExp, xbDbf *d, xbExp *e ); //, xbTag *t);
+
+ xbXBase *xbase; // pointer to xbase structure
+
+
+ xbTblJoin * pTblList;
+ xbSqlFld *fl; // field list in sql select statement
+ xbString sStmt; // complete query statment
+ xbString sFields; // list of fields
+ xbString sFrom; // from statment
+ xbString sWhere; // where clause
+ xbString sOrderBy; // sort order
+ xbString sGroupBy; // group by
+ xbString sHaving; // having
+ xbUInt32 ulFromPos;
+ xbUInt32 ulWherePos;
+ xbUInt32 ulOrderByPos;
+ xbUInt32 ulGroupByPos;
+ xbUInt32 ulHavingPos;
+
+
+};
+
+
+class XBDLLEXPORT xbSql : public xbSsv {
+ public:
+ // xbSql();
+ xbSql( xbXBase *x );
+ ~xbSql();
+
+ xbInt16 ExecuteNonQuery( const xbString &sCmdLine );
+ xbXBase *GetXbasePtr() const;
+
+ protected:
+
+ private:
+
+ xbInt16 SqlAlterTable( const xbString &sCmdLine );
+ xbInt16 SqlCreateTable( const xbString &sCmdLine );
+ xbInt16 SqlDelete( const xbString &sCmdLine );
+ xbInt16 SqlDropTable( const xbString &sCmdLine );
+
+ #ifdef XB_INDEX_SUPPORT
+ xbInt16 SqlCreateIndex( const xbString &sCmdLine );
+ xbInt16 SqlDropIndex( const xbString &sCmdLine );
+ #endif // XB_INDEX_SUPPORT
+
+// xbInt16 SqlCreateView( const xbString &sCmdLine );
+// xbInt16 SqlDropView( const xbString &sCmdLine );
+// xbInt16 SqlUpdate( const xbString &sCmdLine );
+// xbInt16 SqlSelect( const xbString &sCmdLine );
+
+ void SqlHelp() const;
+ xbInt16 SqlInsert( const xbString &sCmLine );
+ xbInt16 SqlSet( const xbString &sCmdLine );
+ xbInt16 SqlUse( const xbString &sCmdLine );
+
+ xbXBase *xbase;
+ xbUda uda;
+
+};
+
+} /* namespace xb */
+#endif /* XB_SQL_SUPPORT */
+#endif /* __XB_XBSQL_H__ */ \ No newline at end of file
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/1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h
new file mode 100755
index 0000000..9b518a3
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h
@@ -0,0 +1,74 @@
+/* xbtag.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_XBTAG_H__
+#define __XB_XBTAG_H__
+
+//#ifdef CMAKE_COMPILER_IS_GNUCC
+//#pragma interface
+//#endif
+
+namespace xb{
+
+
+#ifdef XB_INDEX_SUPPORT
+
+class XBDLLEXPORT xbIx;
+
+
+
+//! @brief xbTag is used for linking index tags to a table (aka dbf file).
+/*!
+
+ Each dbf file (or table) can have zero, one or many tags.
+ Each tag is maintained in a linked list of xbTags.
+
+ NDX index files contain only one index tag.<br>
+ MDX index files can contain one to 47 index tags. The production MDX file is opened automatically
+ and the tags are added to the tag list.
+
+*/
+
+class XBDLLEXPORT xbTag {
+
+ public:
+ xbTag( xbIx *pIx, void *vpTag, xbString &sType, xbString &sTagName, xbString &sExpression, xbString &sFilter, xbBool bUnique, xbBool bSort );
+
+ xbIx *GetIx() const;
+ void *GetVpTag() const;
+ const xbString &GetType() const;
+ const xbString &GetTagName() const;
+ const xbString &GetExpression() const;
+ const xbString &GetFilter() const;
+ xbBool GetUnique() const;
+ xbBool GetSort() const;
+
+ private:
+ xbIx *pIx;
+ void *vpTag;
+ xbString sType;
+ xbString sTagName;
+ xbString sExpression;
+ xbString sFilter;
+ xbBool bUnique;
+ xbBool bSort; // 0 = Ascending, 1 = Descending
+};
+
+#endif // XB_INDEX_SUPPORT
+
+
+} /* namespace xb */
+#endif /* __XB_TAG_H__ */
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h
new file mode 100755
index 0000000..2c31e45
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h
@@ -0,0 +1,63 @@
+/* xbtblmgr.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
+
+This class manages a list of open tables, open indices are connected to the open tables
+
+*/
+
+
+#ifndef __XB_XBMGR_H__
+#define __XB_XBMGR_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+namespace xb{
+
+class XBDLLEXPORT xbDbf;
+
+/* this structure is a linked list of open tables */
+struct XBDLLEXPORT xbTblList{
+ xbTblList *pNext;
+ xbString *psFqTblName; // Fully qualified name of table - same table can be opened multiple times, but must have unique alias
+ xbString *psTblName; // Table name without path, without extension
+ xbString *psTblAlias; // TblAliasName must be unique, same as TblNAme if Alias not provided
+ xbDbf *pDbf;
+};
+
+class XBDLLEXPORT xbTblMgr : public xbSsv {
+ public:
+ xbTblMgr();
+ ~xbTblMgr();
+ xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sFqTblName );
+ xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sFqTblName, const xbString &sTblAlias );
+ xbInt16 DisplayTableList () const;
+ xbDbf * GetDbfPtr ( const xbString &sTblAlias ) const;
+ xbDbf * GetDbfPtr ( xbInt16 sItemNo ) const;
+ xbTblList * GetTblListEntry ( xbDbf *d );
+ xbInt16 GetOpenTableCount () const;
+ xbInt16 RemoveTblFromTblList ( const xbString &sTblAlias );
+ xbInt16 RemoveTblFromTblList ( xbDbf *d );
+
+ protected:
+
+ private:
+ xbTblList * TblList; // List of open database tables
+ xbInt16 iOpenTableCount; // Number of open tables
+
+};
+
+} /* namespace xb */
+
+#endif /* __XB_XBMGR_H__ */ \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h
new file mode 100755
index 0000000..99b6c22
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h
@@ -0,0 +1,55 @@
+/* xbtypes.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_XTYPES_H__
+#define __XB_XTYPES_H__
+
+namespace xb{
+
+
+typedef float xbFloat;
+typedef double xbDouble;
+typedef short int xbBool;
+typedef xbUInt64 xbOffT;
+
+
+#define xbTrue 1
+#define xbFalse 0
+
+
+#ifdef HAVE__FILENO_F
+ #define xbFileNo _fileno
+#else
+ #define xbFileNo fileno
+#endif
+
+#ifdef XB_LOCKING_SUPPORT
+ #if defined( HAVE_LONG_LONG )
+ #define LK4026531839 4026531839LL
+ #define LK4026531838 4026531838LL
+ #define LK3026531838 3026531838LL
+ #define LK1000000000 1000000000LL
+ #else
+ #define LK4026531839 4026531839L
+ #define LK4026531838 4026531838L
+ #define LK3026531838 3026531838L
+ #define LK1000000000 1000000000L
+ #endif
+#endif
+
+
+
+} /* namespace */
+#endif /* __XB_XTYPES_H__ */
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h b/1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h
new file mode 100755
index 0000000..e5c0e91
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h
@@ -0,0 +1,52 @@
+/* xbuda.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
+
+This class manages the user data area (UDA)
+
+*/
+
+
+#ifndef __XB_XBUDA_H__
+#define __XB_XBUDA_H__
+
+#ifdef CMAKE_COMPILER_IS_GNUCC
+#pragma interface
+#endif
+
+
+#ifdef XB_EXPRESSION_SUPPORT
+
+
+namespace xb{
+
+class XBDLLEXPORT xbUda {
+
+ public:
+ xbUda();
+ ~xbUda();
+
+ xbInt16 AddTokenForKey( const xbString &sKey, const xbString &sToken );
+ void Clear();
+ xbInt16 DelTokenForKey( const xbString &sKey );
+ xbInt16 GetTokenCnt() const;
+ xbInt16 GetTokenForKey( const xbString &sKey, xbString &sData );
+ xbInt16 UpdTokenForKey( const xbString &sKey, const xbString &sToken );
+ void DumpUda() const;
+
+ private:
+ xbLinkListOrd<xbString> llOrd;
+
+};
+} /* namespace */
+#endif /* XB_EXPRESSION_SUPPORT */
+#endif /* __XBUDA_H__ */ \ No newline at end of file
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/1Tdata/xbase/xbase64-4.1.4/src/sql/xbalttbl.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbalttbl.cpp
new file mode 100755
index 0000000..8a36b46
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbalttbl.cpp
@@ -0,0 +1,120 @@
+/* xbslttbl.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::SqlAlterTable( const xbString &sCmdLine ){
+
+ // expected format:
+ // ALTER TABLE tablename.DBF RENAME TO newtablename.DBF
+
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTableName = "";
+ xbUInt32 ulPos = 0;
+ xbString sCmd = sCmdLine;
+ xbString sNode = "";
+
+ xbString sSrcTbl;
+ xbString sTrgTbl;
+ xbDbf * dbf = NULL;
+
+ try{
+
+// std::cout << "xbSql::SqlAlterTable( " << sCmdLine.Str() << " )\n";
+
+ // 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();
+
+ // pull off the source table
+ sSrcTbl.ExtractElement( sCmd, ' ', 1, 0 );
+ sSrcTbl.Trim();
+
+ // pull off the action
+ sNode.ExtractElement( sCmd, ' ', 2, 0 );
+ sNode.Trim();
+ sNode.ToUpperCase();
+ if( sNode != "RENAME" ){
+ iErrorStop = 100;
+ iRc = XB_SYNTAX_ERROR;
+ throw iRc;
+ }
+
+ // pull off "TO"
+ sNode.ExtractElement( sCmd, ' ', 3, 0 );
+ sNode.Trim();
+ sNode.ToUpperCase();
+ if( sNode != "TO" ){
+ iErrorStop = 110;
+ iRc = XB_SYNTAX_ERROR;
+ throw iRc;
+ }
+
+ sTrgTbl.ExtractElement( sCmd, ' ', 4, 0 );
+ sTrgTbl.Trim();
+
+// std::cout << "source table name = " << sSrcTbl.Str() << "\n";
+// std::cout << "target table name = " << sTrgTbl.Str() << "\n";
+
+ // if not open, attempt to open it
+ dbf = xbase->GetDbfPtr( sSrcTbl );
+
+ if( !dbf ){
+ if(( iRc = xbase->OpenHighestVersion( sSrcTbl, "", &dbf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+ if( !dbf ){
+ iErrorStop = 130;
+ iRc = XB_DBF_FILE_NOT_OPEN;
+ throw iRc;
+ }
+
+ if(( iRc = dbf->Rename( sTrgTbl )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlAlterTable() 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/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/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrpix.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrpix.cpp
new file mode 100755
index 0000000..2815264
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrpix.cpp
@@ -0,0 +1,155 @@
+/* xbdrpix.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::SqlDropIndex( const xbString &sCmdLine ){
+
+ // std::cout << "DROP INDEX [" << sCmdLine << "]\n";
+
+ // expected format:
+ // DROP INDEX [IF EXISTS] ixname.ndx ON tablename.dbf
+
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTableName;
+ xbString sIxName;
+ xbUInt32 ulPos;
+ 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 "INDEX"
+ 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 index name
+ sIxName.ExtractElement( sCmd, ' ', 1, 0 );
+ sIxName.Trim();
+
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // go past "ON"
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ sTableName = sCmd;
+ 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 = 110;
+ throw iRc;
+ }
+ }
+ if( dbf == NULL ){
+ iErrorStop = 120;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+
+ #ifdef XB_LOCKING_SUPPORT
+ if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ ulPos = sIxName.Pos( ".NDX" );
+ if( ulPos > 0 ){
+ iRc = dbf->DeleteTag( "NDX", sIxName );
+ if( iRc == XB_FILE_NOT_FOUND && !bIfExists ){
+ iErrorStop = 140;
+ throw( iRc );
+ } else if( iRc != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ } else { // assuming MDX tag
+ iRc = dbf->DeleteTag( "MDX", sIxName );
+ if( iRc == XB_FILE_NOT_FOUND && !bIfExists ){
+ iErrorStop = 160;
+ throw( iRc );
+ } else if( iRc != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlDropIndex() 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/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/1Tdata/xbase/xbase64-4.1.4/src/sql/xbinsert.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbinsert.cpp
new file mode 100755
index 0000000..835f9e6
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbinsert.cpp
@@ -0,0 +1,190 @@
+/* xbinsert.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::SqlInsert( const xbString &sCmdLine ){
+
+ // expected format:
+ // INSERT INTO tablename (field1, field2, field3,...) VALUES ( 'charval', numval, 'what is the correct odbc date format to use? CCYYMMDD');
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTableName;
+ xbDbf * dbf = NULL;
+
+ xbString sWork1;
+ xbString sFieldList;
+ xbString sDataList;
+ xbString sFieldName;
+ xbString sFieldData;
+
+ // queue the memo data to post after the append occurs
+ // dbase does not support usage of memo fields with insert commands
+ xbLinkList <xbInt16> llMemoFieldNos;
+ xbLinkList <xbString> llMemoFieldData;
+
+ try{
+ // retrieve table name
+ sTableName.ExtractElement( sCmdLine, ' ', 3, 0 );
+ sTableName.Trim();
+
+ // if not open, attempt to open it
+ dbf = xbase->GetDbfPtr( sTableName );
+
+ if( !dbf ){
+ if(( iRc = xbase->OpenHighestVersion( sTableName, "", &dbf )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+
+ if( !dbf ){
+ iErrorStop = 110;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+
+ // blank the record buffer
+ dbf->BlankRecord();
+
+ sWork1.ExtractElement( sCmdLine, ')', 1, 0 );
+ sFieldList.ExtractElement( sWork1, '(', 2, 0 );
+
+ sDataList.ExtractElement( sCmdLine, '(', 3, 0 );
+ sDataList.Trim();
+ sDataList.ZapTrailingChar( ')' );
+
+ xbUInt32 iFldCnt = sFieldList.CountChar( ',' );
+ xbUInt32 iDataCnt = sDataList.CountChar( ',', 1 );
+
+ // verify there are the same count in the field list and values list
+ if( iFldCnt != iDataCnt ){
+ iErrorStop = 120;
+ iRc = XB_SYNTAX_ERROR;
+ throw iRc;
+ }
+
+ iFldCnt++;
+ xbInt16 iFldNo = -1;
+ char cFldType = 0x00;
+ for( xbUInt32 i = 1; i <= iFldCnt; i++ ){
+ sFieldName.ExtractElement( sFieldList, ',', i, 0 );
+ sFieldName.Trim();
+ if(( iRc = dbf->GetFieldNo( sFieldName, iFldNo )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ if(( iRc = dbf->GetFieldType( iFldNo, cFldType )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ // get the field data here
+ sFieldData.ExtractElement( sDataList, ',', i, 1 );
+ sFieldData.Trim();
+
+ // remove beginning and ending quotes
+ if(( sFieldData[1] == '\'' && sFieldData[sFieldData.Len()] == '\'') || (sFieldData[1] == '"' && sFieldData[sFieldData.Len()] == '"' )){
+ sFieldData.Remove( sFieldData.Len(), 1 );
+ sFieldData.Remove( 1, 1 );
+ }
+
+ switch( cFldType ){
+ case 'C':
+ case 'N':
+ case 'L':
+ if(( iRc = dbf->PutField( iFldNo, sFieldData )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ break;
+
+ case 'D':
+ // assumes input date format of yyyy-mm-dd
+ if( sFieldData.Len() != 10 || sFieldData[5] != '-' || sFieldData[8] != '-' ){
+ iErrorStop = 160;
+ iRc = XB_INVALID_DATA;
+ throw iRc;
+ }
+ sWork1 = sFieldData;
+ sWork1.Remove( 8, 1 );
+ sWork1.Remove( 5, 1 );
+ if(( iRc = dbf->PutField( iFldNo, sWork1 )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ break;
+
+ case 'M':
+ llMemoFieldNos.InsertAtFront( iFldNo );
+ llMemoFieldData.InsertAtFront( sFieldData );
+ break;
+
+ default:
+ iErrorStop= 180;
+ iRc = XB_INVALID_FIELD_TYPE;
+ throw iRc;
+ }
+ }
+
+ if(( iRc = dbf->AppendRecord()) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ // Add any memo fields
+ xbLinkListNode<xbInt16> * llN = llMemoFieldNos.GetHeadNode();
+ xbLinkListNode<xbString> * llD = llMemoFieldData.GetHeadNode();
+ xbUInt32 ulCnt = llMemoFieldNos.GetNodeCnt();
+ for( xbUInt32 i = 0; i < ulCnt; i++ ){
+ iFldNo = llN->GetKey();
+ sFieldData = llD->GetKey();
+ if(( iRc = dbf->UpdateMemoField( iFldNo, sFieldData )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+ llN = llN->GetNextNode();
+ llD = llD->GetNextNode();
+ }
+
+ if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ xbase->WriteLogMessage( sCmdLine );
+ sMsg.Sprintf( "xbSql::SqlInsert() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s] field = [%s] data = [%s]", iErrorStop, iRc, sTableName.Str(), sFieldName.Str(), sFieldData.Str() );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( dbf )
+ dbf->Abort();
+ }
+ return iRc;
+
+}
+
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/sql/xbselect.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbselect.cpp
new file mode 100755
index 0000000..7f12e99
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbselect.cpp
@@ -0,0 +1,97 @@
+/* xbset.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 xbStmt::ExecuteQuery( const xbString &sCmdLine ){
+
+ std::cout << "xbStmt::ExecuteQuery() - SELECT [" << sCmdLine << "]\n";
+ // expected format:
+ // SELECT
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ // xbUInt32 ulPos;
+
+ try{
+
+ if(( iRc = ParseStmt( sCmdLine )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
+/*
+ xbString sCmd = sCmdLine;
+ sCmd.Trim();
+ sCmd.ZapTrailingChar( ';' );
+ sCmd.Trim();
+
+ // drop off the first node "SET"
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ xbString sNode1 = sCmd;
+ sNode1.ToUpperCase();
+
+ if( sNode1 == "SET" ) {
+ uda.DumpUda();
+
+ } else {
+
+ xbString sKey;
+ sKey.ExtractElement( sCmd, '=', 1, 0 );
+ sKey.Trim();
+
+ xbString sToken;
+ sToken.ExtractElement( sCmd, '=', 2, 0 );
+ sToken.Trim();
+
+
+ if( sToken == '^' ){
+ if(( iRc = uda.DelTokenForKey( sKey )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = uda.UpdTokenForKey( sKey, sToken )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+*/
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::ExecuteQuery() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/sql/xbset.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbset.cpp
new file mode 100755
index 0000000..d0e8821
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbset.cpp
@@ -0,0 +1,90 @@
+/* xbset.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::SqlSet( const xbString &sCmdLine ){
+
+ // std::cout << "SET [" << sCmdLine << "]\n";
+ // expected format:
+ // SET ATTRIBUTE = DATAVALUE
+ // SET ATTRIBUTE = ^ (to delete an entry)
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbUInt32 ulPos;
+
+ try{
+
+ xbString sCmd = sCmdLine;
+ sCmd.Trim();
+ sCmd.ZapTrailingChar( ';' );
+ sCmd.Trim();
+
+ // drop off the first node "SET"
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ xbString sNode1 = sCmd;
+ sNode1.ToUpperCase();
+
+ if( sNode1 == "SET" ) {
+ uda.DumpUda();
+
+ } else {
+
+ xbString sKey;
+ sKey.ExtractElement( sCmd, '=', 1, 0 );
+ sKey.Trim();
+
+ xbString sToken;
+ sToken.ExtractElement( sCmd, '=', 2, 0 );
+ sToken.Trim();
+
+
+ if( sToken == '^' ){
+ if(( iRc = uda.DelTokenForKey( sKey )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = uda.UpdTokenForKey( sKey, sToken )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlSet() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/sql/xbsql.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbsql.cpp
new file mode 100755
index 0000000..12d3379
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbsql.cpp
@@ -0,0 +1,176 @@
+/* xbsql.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{
+
+/***********************************************************************/
+xbSql::xbSql( xbXBase *x ){
+ xbase = x;
+ xbString sIxType;
+
+ #ifdef XB_MDX_SUPPORT
+ sIxType = "MDX";
+ #endif
+
+ #ifdef XB_NDX_SUPPORT
+ if( sIxType == "" )
+ sIxType = "NDX";
+ #endif
+
+ if( sIxType != "" )
+ uda.AddTokenForKey( "IXTYPE", sIxType );
+
+}
+/***********************************************************************/
+xbSql::~xbSql(){
+}
+
+/***********************************************************************/
+xbInt16 xbSql::ExecuteNonQuery( const xbString &sCmdLine ) {
+
+// std::cout << "\n\n\nExecute() " << sCmdLine.Str() << "\n";
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbString sCmd = sCmdLine;
+
+ sCmd.Trim();
+ xbString sNode1;
+ sNode1.ExtractElement( sCmd.Str(), ' ', 1, 0 );
+ sNode1.ToUpperCase();
+ sNode1.Trim();
+
+// std::cout << "node 1 = " << sNode1.Str() << std::endl;
+
+ if( sNode1 == "ALTER" ){
+ xbString sNode2;
+ sNode2.ExtractElement( sCmd.Str(), ' ', 2, 0 );
+ sNode2.ToUpperCase();
+ sNode2.Trim();
+
+ if( sNode2 == "TABLE" )
+ iRc = SqlAlterTable( sCmd );
+ else
+ iRc = XB_INVALID_FUNCTION;
+
+
+
+ } else if( sNode1 == "CREATE" ){
+
+ xbString sNode2;
+ sNode2.ExtractElement( sCmd.Str(), ' ', 2, 0 );
+ sNode2.ToUpperCase();
+ sNode2.Trim();
+ if( sNode2 == "TABLE" )
+ iRc = SqlCreateTable( sCmd );
+
+ #ifdef XB_INDEX_SUPPORT
+ else if( sNode2 == "INDEX" || sNode2 == "UNIQUE" )
+ iRc = SqlCreateIndex( sCmd );
+ #endif // XB_INDEX_SUPPORT
+
+ else
+ iRc = XB_INVALID_FUNCTION;
+
+ } else if( sNode1 == "DROP" ){
+
+ xbString sNode2;
+ sNode2.ExtractElement( sCmd.Str(), ' ', 2, 0 );
+ sNode2.ToUpperCase();
+ sNode2.Trim();
+
+ if( sNode2 == "TABLE" )
+ iRc = SqlDropTable( sCmd );
+
+ #ifdef XB_INDEX_SUPPORT
+ else if( sNode2 == "INDEX" )
+ iRc = SqlDropIndex( sCmd );
+ #endif // XB_INDEX_SUPPORT
+
+ else
+ iRc = XB_INVALID_FUNCTION;
+
+ } else if( sNode1 == "DELETE" || sNode1 == "UNDELETE" ){
+
+ iRc = SqlDelete( sCmd );
+
+
+ } else if( sNode1 == "HELP" )
+ SqlHelp();
+
+ else if( sNode1 == "INSERT" ){
+ iRc = SqlInsert( sCmd );
+
+ // else if( sNode1 == "UPDATE" )
+ // iRc = SqlUpdate( sCmd );
+ }
+
+ else if( sNode1 == "USE" )
+ iRc = SqlUse( sCmd );
+
+ else if( sNode1 == "SET" )
+ iRc = SqlSet( sCmd );
+
+ else
+ return XB_INVALID_FUNCTION;
+
+ return iRc;
+}
+
+/***********************************************************************/
+xbXBase *xbSql::GetXbasePtr() const {
+ return xbase;
+}
+
+
+/***********************************************************************/
+void xbSql::SqlHelp() const {
+ std::cout << "************************" << std::endl;
+ std::cout << "Valid XBase SQL commands" << std::endl << std::endl;
+ std::cout << "HELP" << std::endl;
+
+ std::cout << "ALTER TABLE tablename.DBF RENAME TO newtablename.DBF" << std::endl;
+ std::cout << "CREATE INDEX ixname.NDX ON tablename.dbf ( EXPRESSION ) [ASSOCIATE]" << std::endl;
+ std::cout << "CREATE [UNIQUE] INDEX tagname ON tablename.dbf ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()]" << std::endl;
+ std::cout << "CREATE TABLE tablename.DBF (Field1 CHAR(10), INTFLD1 INTEGER, ... )" << std::endl;
+ std::cout << "DELETE FROM tablename.DBF [WHERE expression]" << std::endl;
+ std::cout << "DROP INDEX [IF EXISTS] ixname.NDX ON tablename.DBF" << std::endl;
+ std::cout << "DROP TABLE [IF EXISTS] tablename.DBF" << std::endl;
+ std::cout << "INSERT INTO tablename (field1, field2, field3,...) VALUES ( 'charval', numval, {MM/DD/YY})" << std::endl;
+ std::cout << "SELECT FIELD1,FIELD2... FROM TABLE.DBF [WHERE expression] [ORDER BY TAG TAGNAME" << std::endl;
+ std::cout << "SET ATTRIBUTE = DATAVALUE" << std::endl;
+ std::cout << "SET ATTRIBUTE = ^ (to delete an entry)" << std::endl;
+ std::cout << "USE /dir/to/dbf/tables" << std::endl;
+ std::cout << "CREATE TABLE" << std::endl << std::endl << std::endl;
+}
+
+/***********************************************************************/
+xbInt16 xbSql::SqlUse( const xbString &sCmdLine ){
+
+ xbString sNode2;
+ sNode2.ExtractElement( sCmdLine.Str(), ' ', 2, 0 );
+ sNode2.Trim();
+ xbase->SetDataDirectory( sNode2 );
+// std::cout << "USE " << sNode2 << std::endl;
+ return XB_NO_ERROR;
+}
+
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/sql/xbstmt.cpp b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbstmt.cpp
new file mode 100755
index 0000000..61c84fd
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/sql/xbstmt.cpp
@@ -0,0 +1,679 @@
+/* xbsql.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{
+
+/***********************************************************************/
+xbStmt::xbStmt( xbXBase *x ){
+ xbase = x;
+ pTblList = NULL;
+ fl = NULL;
+ ulFromPos = 0;
+ ulWherePos = 0;
+ ulOrderByPos = 0;
+ ulGroupByPos = 0;
+ ulHavingPos = 0;
+}
+
+/***********************************************************************/
+xbStmt::~xbStmt(){
+
+ std::cout << "xbStmt::~xbStmt() - need to release all allocated structures and memory here\n";
+
+}
+
+/***********************************************************************/
+xbInt16 xbStmt::CvtSqlExp2DbaseExp( const xbString &sExpIn, xbString &sExpOut ){
+
+ // convert Ansi SQL expression to a DBase compatible expression
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ // convert tablename.fieldname to tablename->fieldname
+ sExpOut = sExpIn[1];
+ xbUInt32 ulPos = 2;
+ while( ulPos < sExpIn.Len() ){
+ if( sExpIn[ulPos] == '.' && sExpIn[ulPos-1] != ' ' && sExpIn[ulPos+1] != ' ' )
+ sExpOut += "->";
+ else
+ sExpOut += sExpIn[ulPos];
+ ulPos++;
+ }
+ sExpOut += sExpIn[ulPos];
+
+ sExpOut.Replace( " AND ", " .AND. ", 0 );
+ sExpOut.Replace( " and ", " .AND. ", 0 );
+ sExpOut.Replace( " OR ", " .OR. ", 0 );
+ sExpOut.Replace( " or ", " .OR. ", 0 );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::CvtSqlExp2DbaseExp() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+
+/***********************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+xbInt16 xbStmt::DumpStmtInternals(){
+
+ std::cout << "************** Dump Statment Internals ***************" << std::endl;
+ std::cout << "Statement [" << sStmt << "]\n";
+ std::cout << "Fields [" << sFields << "]\n";
+ std::cout << "From [" << sFrom << "]\n";
+ std::cout << "Where [" << sWhere << "]\n";
+ std::cout << "Order By [" << sOrderBy << "]\n";
+ std::cout << "Group By [" << sGroupBy << "]\n";
+ std::cout << "Having [" << sHaving << "]\n";
+
+ xbTblJoin *p = pTblList;
+ if( p ){
+ std::cout << "Tbl List\n";
+ std::cout << "Type,Name,Alias,Exp\n";
+ while( p ){
+ std::cout << p->cJoinType << "," << p->sTableName.Str() << "," << p->sAlias.Str() << "," << p->sJoinExp.Str() << "\n";
+ p = p->next;
+ }
+ }
+ std::cout << "*************** End of Internals ************" << std::endl;
+ return 0;
+}
+
+xbInt16 xbStmt::Test(){
+ xbString s;
+
+ s = "(ABC)";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "(ABC) )";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "(";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "( (";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "aaa)";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "aaa";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+
+ return 0;
+
+}
+#endif // XB_DEBUG_SUPPORT
+
+
+/***********************************************************************/
+xbInt16 xbStmt::GetNextFromSeg( const xbString &sLineIn, xbString &sFromSegOut ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iParenCtr = 0;
+ xbUInt32 ulPos = 1;
+ xbUInt32 ulTsp = 0; // token start position
+ xbBool bDone = xbFalse;
+ xbString sToken;
+
+ try{
+ sFromSegOut = "";
+ while( !bDone ){
+ ulTsp = GetNextToken( sLineIn, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+
+ } else {
+ iParenCtr += GetParenCnt( sToken );
+ if( iParenCtr == 0 && ulPos > 1 ){
+ sToken.ToUpperCase();
+ if( sToken == "LEFT" || sToken == "RIGHT" || sToken == "FULL" ||
+ sToken == "INNER" || sToken == "OUTER" || sToken[1] == '(' ){
+ bDone = xbTrue;
+ }
+ }
+ }
+ ulPos += (sToken.Len() + 1);
+ }
+ if( ulTsp > 1 )
+ sFromSegOut.Assign( sLineIn, 1, ulTsp - 2 );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::GetNextFromSeg() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+
+xbUInt32 xbStmt::GetNextToken( const xbString &sCmdLineIn, xbString &sTokenOut, xbUInt32 ulStartPos ){
+
+ // input
+ // sCmdLine - Entire Command line
+ // ulStartPos - Where to start searching for the next token
+ // returns the position of the beginning of the token in the main command line
+
+ xbUInt32 ul = ulStartPos;
+ xbUInt32 ulTokenStartPos = 0;
+ sTokenOut = "";
+
+ while( ul <= sCmdLineIn.Len() && sCmdLineIn[ul] == ' ' )
+ ul++;
+ ulTokenStartPos = ul;
+
+ while( ul <= sCmdLineIn.Len() && sCmdLineIn[ul] != ' ' ){
+ sTokenOut += sCmdLineIn[ul];
+ ul++;
+ }
+
+ return ulTokenStartPos;
+}
+/***********************************************************************/
+xbInt16 xbStmt::GetParenCnt( const xbString &sToken ){
+
+ xbInt16 iParenCnt = 0;
+
+ for( xbUInt32 i = 1; i <= sToken.Len(); i++ ){
+ if( sToken[i] == '(' )
+ iParenCnt++;
+ else if( sToken[i] == ')' )
+ iParenCnt--;
+ }
+ return iParenCnt;
+}
+
+
+/***********************************************************************/
+xbInt16 xbStmt::ParseFromStmt( const xbString &sFromLine ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbBool bDone = xbFalse;
+ xbString sFromSeg;
+ xbString sLine = sFromLine;
+
+ try{
+ std::cout << "ParseFromSeg [" << sFromLine.Str() << "]\n";
+
+ while( !bDone ){
+ if(( iRc = GetNextFromSeg( sLine, sFromSeg)) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if( sFromSeg.Len() == 0 ){
+ bDone = xbTrue;
+ } else {
+ if(( iRc = ProcessFromSeg( sFromSeg )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ sLine.Ltrunc( sFromSeg.Len() );
+ sLine.Ltrim();
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::ParseFromSeg() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+/***********************************************************************/
+xbInt16 xbStmt::ParseStmt( const xbString &sCmdLine ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iParenCnt = 0;
+ xbUInt32 ulStartPos = 7;
+ xbUInt32 ulLen = 0;
+
+
+ xbBool bFromFound = xbFalse;
+ xbBool bWhereFound = xbFalse;
+ xbBool bOrderByFound = xbFalse;
+ xbBool bGroupByFound = xbFalse;
+ xbBool bHavingFound = xbFalse;
+ xbBool bDone = xbFalse;
+
+ xbString sToken;
+
+ sStmt.Set( sCmdLine );
+ sStmt.Trim();
+
+ try{
+
+ std::cout << "ParseStmt - [" << sStmt << "]\n";
+
+ xbUInt32 ulPos = ulStartPos;
+
+ while( !bFromFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "FROM" ){
+ bFromFound = xbTrue;
+ ulFromPos = ulPos;
+ sFrom.Assign( sStmt, ulFromPos );
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+ // look for the where clause
+ if( bFromFound )
+ ulPos = ulFromPos + 5;
+ else
+ ulPos = ulStartPos;
+
+ bDone = xbFalse;
+ while( !bWhereFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "WHERE" ){
+ bWhereFound = xbTrue;
+ ulWherePos = ulPos;
+ sWhere.Assign( sStmt, ulWherePos+6 );
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+
+ // look for the order clause
+ if( bWhereFound )
+ ulPos = ulWherePos + 6;
+ else if( bFromFound )
+ ulPos = ulFromPos + 5;
+ else
+ ulPos = ulStartPos;
+
+ bDone = xbFalse;
+ while( !bOrderByFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "ORDER" ){
+ xbString sToken2;
+ xbUInt32 ulPos2 = GetNextToken( sStmt, sToken2, ulPos + 6 );
+ if( sToken2 != "" ){
+ sToken2.ToUpperCase();
+ if( sToken2 == "BY" ){
+ bOrderByFound = xbTrue;
+ ulOrderByPos = ulPos;
+ sOrderBy.Assign( sStmt, ulPos2 + 3 );
+ }
+ }
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+
+ bDone = xbFalse;
+ while( !bGroupByFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "GROUP" ){
+ xbString sToken2;
+ xbUInt32 ulPos2 = GetNextToken( sStmt, sToken2, ulPos + 6 );
+ if( sToken2 != "" ){
+ sToken2.ToUpperCase();
+ if( sToken2 == "BY" ){
+ bGroupByFound = xbTrue;
+ ulGroupByPos = ulPos;
+ sGroupBy.Assign( sStmt, ulPos2 + 3 );
+ }
+ }
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+ bDone = xbFalse;
+ while( !bHavingFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "HAVING" ){
+ bHavingFound = xbTrue;
+ ulHavingPos = ulPos;
+ sHaving.Assign( sStmt, ulHavingPos + 7 );
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+
+ // do the fields part
+ if( bFromFound )
+ ulLen = ulFromPos - 7;
+ else if( bWhereFound )
+ ulLen = ulWherePos - 7;
+ else if( bOrderByFound )
+ ulLen = ulOrderByPos - 7;
+ else if( bGroupByFound )
+ ulLen = ulGroupByPos - 7;
+ else if( bHavingFound )
+ ulLen = ulHavingPos - 7;
+ else
+ ulLen = sStmt.Len() - 7;
+ sFields.Assign( sStmt, 7, ulLen );
+ sFields.Trim();
+
+ // do the FROM part
+ if( bFromFound ){
+ if( bWhereFound )
+ ulLen = ulWherePos - ulFromPos;
+ else if( bOrderByFound )
+ ulLen = ulOrderByPos - ulFromPos;
+ else if( bGroupByFound )
+ ulLen = ulGroupByPos - ulFromPos;
+ else if( bHavingFound )
+ ulLen = ulHavingPos - ulFromPos;
+ else
+ ulLen = sStmt.Len() - ulFromPos;
+ sFrom.Resize( ulLen );
+ sFrom.Trim();
+
+ }
+
+
+ // do the WHERE part
+ if( bWhereFound ){
+ ulLen = 0;
+ if( bOrderByFound )
+ ulLen = ulOrderByPos - ulWherePos - 6;
+ else if( bGroupByFound )
+ ulLen = ulGroupByPos - ulWherePos - 6;
+ else if( bHavingFound )
+ ulLen = ulHavingPos - ulWherePos - 6;
+
+ if( ulLen > 0 )
+ sWhere.Resize( ulLen );
+ sWhere.Trim();
+ }
+
+ // FIXME if there is more than one space between ORDER and BY then this doesn't work quite right
+ // do the ORDER BY part
+ if( bOrderByFound ){
+ if( bGroupByFound )
+ ulLen = ulGroupByPos - ulOrderByPos - 9;
+ else if( bHavingFound )
+ ulLen = ulHavingPos - ulOrderByPos - 9;
+ else
+ ulLen = sStmt.Len() - ulOrderByPos - 9;
+ sOrderBy.Resize( ulLen );
+ sOrderBy.Trim();
+ }
+
+ // FIXME if there is more than one space between ORDER and BY then this doesn't work quite right
+ // do the GROUP BY part
+ if( bGroupByFound ){
+ if( bHavingFound )
+ ulLen = ulHavingPos - ulGroupByPos - 9;
+ else
+ ulLen = sStmt.Len() - ulGroupByPos - 9;
+ sGroupBy.Resize( ulLen );
+ sGroupBy.Trim();
+ }
+
+ if( bFromFound ){
+ if(( iRc = ParseFromStmt( sFrom )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::ParseStmt() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+
+/***********************************************************************/
+xbInt16 xbStmt::ProcessFromSeg( const xbString &sFromSeg ){
+
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ char cType = ' ';
+ xbString sToken;
+ xbString sTable;
+ xbString sAlias;
+ xbString sWork;
+ xbString sExp;
+ xbUInt32 iPos;
+ xbBool bDone;
+ xbExp * pJoinExp = NULL;
+
+ try{
+
+ std::cout << "ProcessFromSeg for segment [" << sFromSeg.Str() << "]\n";
+
+ GetNextToken( sFromSeg, sToken, 1 );
+ sToken.ToUpperCase();
+
+ std::cout << "sToken1 = [" << sToken.Str() << "]\n";
+
+ if( sToken == "FROM" ){
+ // FROM has to be the first statement, and exist only once
+ if( pTblList ){
+ iErrorStop = 100;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ cType = 'M';
+ } else if( sToken == "LEFT" )
+ cType = 'L';
+ else if( sToken == "RIGHT" )
+ cType = 'R';
+ else if( sToken == "RIGHT" )
+ cType = 'R';
+ else if( sToken == "INNER" )
+ cType = 'I';
+ else if( sToken == "OUTER" || sToken == "FULL" )
+ cType = 'O';
+ else if( sToken[1] == '(' )
+ cType = 'Q';
+ else{
+ iErrorStop = 100;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+
+
+ if( cType == 'M' ){
+ // expecting "FROM table" or "FROM table alias"
+ iPos = GetNextToken( sFromSeg, sToken, 5 );
+ sTable = sToken;
+
+ iPos = GetNextToken( sFromSeg, sToken, iPos + sToken.Len() + 1 );
+ if( sToken.Len() > 0 )
+ sAlias = sToken;
+ else
+ sAlias = "";
+
+ sWork = sToken;
+ sWork.ToUpperCase();
+ iPos = sWork.Pos( ".DBF" );
+ if( iPos == 0 )
+ sTable += ".DBF";
+
+ // std::cout << "table = [" << sTable.Str() << "] alias = [" << sAlias.Str() << "]\n";
+
+ } else if( cType != 'Q' ){
+ sWork = sFromSeg;
+ sWork.ToUpperCase();
+ iPos = sWork.Pos( " ON " );
+ if( iPos == 0 ){
+ iErrorStop = 110;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ bDone = xbFalse;
+
+ sWork.Assign( sFromSeg, iPos + 4 );
+ CvtSqlExp2DbaseExp( sWork, sExp );
+ sExp.Trim();
+ std::cout << "ON = [" << sExp.Str() << "]\n";
+
+
+ // need to get past the keywords LEFT, FULL, OUTER, RIGHT, INNER and get the table name here
+ iPos = sToken.Len() + 1;
+ while( !bDone ){
+ iPos = GetNextToken( sFromSeg, sToken, iPos );
+ sWork = sToken;
+ sWork.ToUpperCase();
+ if( sWork != "LEFT" && sWork != "RIGHT" && sWork != "INNER" && sWork != "OUTER" && sWork != "FULL" && sWork != "JOIN" )
+ bDone = xbTrue;
+ else
+ iPos += (sWork.Len() + 1);
+ }
+
+ sTable = sToken;
+ GetNextToken( sFromSeg, sAlias, iPos + sTable.Len() + 1 );
+ sWork.ToUpperCase();
+ iPos = sWork.Pos( ".DBF" );
+ if( iPos == 0 )
+ sTable += ".DBF";
+ sWork = sAlias;
+ sWork.ToUpperCase();
+ if( sWork == "ON" )
+ sAlias = "";
+ }
+
+
+ // open table
+ //std::cout << "attempting to open table " << sTable.Str() << "\n";
+ xbDbf *d = NULL;
+ if(( iRc = xbase->OpenHighestVersion( sTable, sAlias, &d )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+
+
+ // build out table linkage expression
+ if( cType == 'M' )
+ sExp = "MASTER";
+ else if( cType == 'L' ){
+ pJoinExp = new xbExp( xbase );
+
+ // std::cout << "Parsing expression [" << sExp.Str() << "]\n";
+ if(( iRc = pJoinExp->ParseExpression( d, sExp )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+
+ // attach to correct location in list
+
+
+ // update the UpdateJoinList routine as appropriate
+// if(( iRc = UpdateJoinList( cType, sTable, sAlias, NULL, NULL, NULL, NULL )) != XB_NO_ERROR ){
+
+ if(( iRc = UpdateJoinList( cType, sTable, sAlias, sExp, d, pJoinExp )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::ProcessFromSeg() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+xbInt16 xbStmt::UpdateJoinList( char cType, const xbString &sTableName, const xbString &sAlias, const xbString &sExp, xbDbf *d, xbExp *e ){
+// xbTag *t ){
+
+
+ std::cout << "Update join list for table " << sTableName.Str() << "\n";
+
+ xbTblJoin *pTj;
+ if(( pTj = (xbTblJoin *) calloc( 1, sizeof( xbTblJoin ))) == NULL )
+ return XB_NO_MEMORY;
+
+ pTj->cJoinType = cType;
+ pTj->sTableName.Set( sTableName );
+ pTj->sAlias.Set( sAlias );
+ pTj->sJoinExp.Set( sExp );
+ pTj->pDbf = d;
+ pTj->pLinkExp = e;
+
+/*
+
+ pTj->pTag = t;
+*/
+
+ if( cType == 'M' )
+ pTblList = pTj;
+
+ return 0;
+}
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
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/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_bcd.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_bcd.cpp
new file mode 100755
index 0000000..f735935
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_bcd.cpp
@@ -0,0 +1,127 @@
+/* xb_test_bcd.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
+
+*/
+
+// This program tests the xb bcd functions
+// usage: xb_test_expnode QUITE|NORMAL|VERBOSE
+
+#include "xbase.h"
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+/**************************************************************************/
+
+int main( int argCnt, char **av )
+{
+
+ #ifdef XB_INDEX_SUPPORT
+
+ xbInt16 iRc = 0;
+ xbInt16 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
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+
+ if( iPo > 0 ){
+ std::cout << "XBase bcd testing program.." << std::endl;
+ std::cout << "This program tests the bcd logic." << std::endl;
+ }
+
+ iRc += TestMethod( iPo, "sizeof( xbBcdStruct )", (xbInt32) sizeof( xbBcdStruct ), (xbInt32) 12 );
+
+ xbString s1( -12345.60 );
+ xbBcd bcd1( s1 );
+ xbDouble d1;
+ bcd1.ToDouble( d1 );
+ xbString s2( d1 );
+ bcd1.ToString( s2 );
+
+ iRc += TestMethod( iPo, "String Constructor1", d1, -12345.6 );
+ iRc += TestMethod( iPo, "String Constructor2", s2.Str(), "-12345.6", 8 );
+
+ d1 = 0034.04;
+ xbBcd bcd2( d1 );
+ bcd2.ToString( s2 );
+ iRc += TestMethod( iPo, "xbDouble Constructor1", s2.Str(), "34.04", 5 );
+
+ // test the sign comparison logic
+ xbInt16 iComp = bcd1.Compare( bcd2 );
+ iRc += TestMethod( iPo, "Sign Compare 1", iComp, -1 );
+ iComp = bcd2.Compare( bcd1 );
+ iRc += TestMethod( iPo, "Sign Compare 2", iComp, 1 );
+
+ // bcd length compare scenarios
+ bcd1.Set( 123 );
+ iRc += TestMethod( iPo, "Length Compare 1", bcd1.Compare( 12 ), 1 );
+ iRc += TestMethod( iPo, "Length Compare 2", bcd1.Compare( 1234 ), -1 );
+ bcd1.Set( -456 );
+ iRc += TestMethod( iPo, "Length Compare 3", bcd1.Compare( -12 ), -1 );
+ iRc += TestMethod( iPo, "Length Compare 4", bcd1.Compare( -1234 ), 1 );
+
+ // same length, value compares
+ bcd1.Set( 11 );
+ iRc += TestMethod( iPo, "Value Compare 1", bcd1.Compare( 10 ), 1 );
+
+ bcd1.Set( 111 );
+ iRc += TestMethod( iPo, "Value Compare 2", bcd1.Compare( 110 ), 1 );
+
+
+ bcd1.Set( 111.111 );
+ iRc += TestMethod( iPo, "Value Compare 3", bcd1.Compare( 111.112 ), -1 );
+
+ bcd1.Set( -100 );
+ iRc += TestMethod( iPo, "Value Compare 4", bcd1.Compare( -111 ), 1 );
+ iRc += TestMethod( iPo, "Value Compare 5", bcd1.Compare( -99 ), -1 );
+
+ bcd1.Set( (xbDouble) 0 );
+ iRc += TestMethod( iPo, "Value Compare 6", bcd1.Compare( (xbDouble) 0 ), 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;
+ #else
+ return XB_NO_ERROR;
+ #endif // XB_INDEX_SUPPORT
+
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_blockread.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_blockread.cpp
new file mode 100755
index 0000000..ff55d23
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_blockread.cpp
@@ -0,0 +1,168 @@
+/* xb_test_blockread.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 xbBlockRead
+// usage: xb_test_blockread QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+ xbSchema MyDbfRec[] =
+ {
+ { "NFLD", XB_NUMERIC_FLD, 10, 0 },
+ { "CFLD", XB_CHAR_FLD, 89, 0 },
+ { "",0,0,0 }
+ };
+
+
+int main( int argCnt, char **av )
+{
+ xbInt16 iRc = 0;
+ xbInt16 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;
+ }
+
+ xbXBase x;
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+
+ xbDbf4 dbf( &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();
+
+
+ iRc2 = dbf.CreateTable( "BLOCKRD.DBF", "BlockRead", MyDbfRec, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+ // fill the file with several blocks of data
+ for( xbInt32 i = 0; i < 50; i++ ){
+ iRc2 = dbf.BlankRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "BlankRecord()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = dbf.PutLongField( 0, i+1 );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutLongField()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = dbf.AppendRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "AppendRecord()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = dbf.Commit();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "Commit()", (xbInt32) iRc2, XB_NO_ERROR );
+ }
+
+
+ dbf.SetDefaultBlockReadSize( 2000 );
+
+ // enable block read for this table
+ iRc += TestMethod( iPo, "EnableBlockReadProcessing()", dbf.EnableBlockReadProcessing(), XB_NO_ERROR );
+
+ xbUInt32 ulFld = 0;
+ xbUInt32 ulCtr = 1;
+
+ iRc2 = XB_NO_ERROR;
+ while( iRc2 == XB_NO_ERROR ){
+ // std::cout << ulCtr << "\n";
+ iRc2 += dbf.GetRecord( ulCtr );
+ if( iRc2 != XB_NO_ERROR && iRc != XB_INVALID_RECORD )
+ TestMethod( iPo, "GetRecord()", iRc, XB_NO_ERROR );
+
+ if( iRc2 == XB_NO_ERROR ){
+ dbf.GetULongField( "NFLD", ulFld );
+ if( ulFld != ulCtr ){
+ std::cout << "ulFld = " << ulFld << " ulCtr = " << ulCtr << "\n";
+ iRc += TestMethod( iPo, "Field Compare", (xbDouble) ulFld, (xbDouble) ulCtr );
+ }
+ }
+ ulCtr++;
+ }
+
+ // std::cout << "**********Delete every other record\n";
+ iRc2 = dbf.GetFirstRecord();
+ while( iRc2 == XB_NO_ERROR ){
+ if( (dbf.GetCurRecNo() % 2) != 0 ){
+ dbf.DeleteRecord();
+ dbf.Commit();
+ }
+ iRc2 = dbf.GetNextRecord();
+ }
+
+
+ // test filter for deleted records
+ #ifdef XB_FILTER_SUPPORT
+ xbFilter f( &dbf );
+ xbString sFilt = ".NOT. DELETED()";
+ f.Set( sFilt );
+ iRc2 = f.GetFirstRecord();
+ while( iRc2 == XB_NO_ERROR ){
+ dbf.GetULongField( "NFLD", ulFld );
+ if( (ulFld % 2) != 0 ){
+ iRc += TestMethod( iPo, "Filter GetNextRecord()", ulFld % 2, 0 );
+ }
+ iRc2 = f.GetNextRecord();
+ }
+ #endif // XB_FILTER_SUPPORT
+
+
+ iRc += TestMethod( iPo, "DisableBlockReadProcessing()", dbf.DisableBlockReadProcessing(), XB_NO_ERROR );
+ //iRc2 = dbf.DeleteTable();
+
+ iRc2 = dbf.Close();
+ iRc += TestMethod( iPo, "Close()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+ return iRc;
+}
+
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/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_nomemos.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_nomemos.cpp
new file mode 100755
index 0000000..2dfeb7e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_nomemos.cpp
@@ -0,0 +1,327 @@
+/* xb_test_xbdbf_v3_nomemos.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 xbXdbf
+
+// usage: xb_test_dbf_v3_nomemos 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 */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ po = 0;
+ else if( av[1][0] == 'V' )
+ po = 2;
+ }
+
+
+ xbSchema MyV3Record[] =
+ {
+ { "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 },
+ { "",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 */
+
+ iRc2 = V3Dbf.CreateTable( "TestV3.DBF", "TestV3", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
+
+ iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ if( po == 2 ){
+ std::cout << "There should be one entry in the table list" << std::endl;
+ x.DisplayTableList();
+ }
+
+ xbDbf3 V3Dbf2( &x );
+ // next occurrence should error as a dup
+ x.WriteLogMessage( "Second create attempt, should generate an error." );
+ iRc2 = V3Dbf2.CreateTable( "TestV3.DBF", "TestV3", MyV3Record, XB_DONTOVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( po, "CreateTable()", iRc2, XB_FILE_EXISTS );
+ if( iRc2 != XB_FILE_EXISTS ){
+ x.DisplayError( iRc2 );
+ }
+
+ if( po == 2 ){
+ std::cout << "There should be one entry in the table list" << std::endl;
+ x.DisplayTableList();
+ }
+
+ iRc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetFieldNo()", V3Dbf.GetFieldNo("LASTNAME"), 1 );
+ iRc += TestMethod( po, "GetFieldNo()", V3Dbf.GetFieldNo("MIDDLEINIT"), 2 );
+
+ xbInt16 fldLastName = V3Dbf.GetFieldNo( "LASTNAME" );
+
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( fldLastName, "NELSON" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "FIRSTNAME", "WILLIE" ), XB_NO_ERROR );
+
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "AMOUNT", "12.34" ), XB_NO_ERROR );
+ xbDate d( "19991201" );
+ iRc += TestMethod( po, "PutDateField()", V3Dbf.PutDateField( "STARTDATE", d ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "STARTDATE", "19991301" ), XB_INVALID_DATA );
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "STARTDATE", "19991201" ), XB_NO_ERROR );
+
+
+ iRc += TestMethod( po, "PutLongField()", V3Dbf.PutLongField( "ZIPCODE", 12345 ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutLogicalField()", V3Dbf.PutLogicalField( "SWITCH", "Y" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutFloatField()", V3Dbf.PutFloatField( "TESTNUM", (xbFloat) 1234.5678 ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+ xbString sf;
+ iRc += TestMethod( po, "GetField1()", V3Dbf.GetField( fldLastName, sf, 0 ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetField2()", sf, "NELSON ", 20 );
+ iRc += TestMethod( po, "GetField3()", V3Dbf.GetField( fldLastName, sf ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetField4()", sf, "NELSON ", 20 );
+ iRc += TestMethod( po, "GetField5()", V3Dbf.GetField( "LASTNAME", sf ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetField6()", sf, "NELSON ", 20 );
+ xbInt16 iNoOfDecimals;
+ iRc += TestMethod( po, "GetFieldDecimal()", V3Dbf.GetFieldDecimal( "AMOUNT", iNoOfDecimals ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetFieldDecimal()", iNoOfDecimals, 2 );
+
+ char FieldType;
+ iRc += TestMethod( po, "GetFieldType()", V3Dbf.GetFieldType( "STARTDATE", FieldType ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetFieldType()", FieldType , 'D' );
+
+ xbInt16 iFieldLen;
+ iRc += TestMethod( po, "GetFieldLen()", V3Dbf.GetFieldLen( "STARTDATE", iFieldLen ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetFieldLen()", iFieldLen, 8 );
+
+ xbInt16 fldAMT = V3Dbf.GetFieldNo( "AMOUNT" );
+ iRc += TestMethod( po, "GetRawField1()", V3Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetRawField2()", sf, " 12.34", 9 );
+
+ xbInt32 lZip;
+ iRc += TestMethod( po, "GetLongField()", V3Dbf.GetLongField( "ZIPCODE", lZip ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetLongField()", lZip, 12345 );
+
+ xbString sSwitch;
+ iRc += TestMethod( po, "GetLogicalField()", V3Dbf.GetLogicalField( "SWITCH", sSwitch ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetLogicalField()", sSwitch, "Y", 1 );
+
+ xbFloat fNum;
+ iRc += TestMethod( po, "GetFloatField()", V3Dbf.GetFloatField( "TESTNUM", fNum ), 0 );
+ iRc += TestMethod( po, "GetFloatField()", fNum, (xbFloat) 1234.5678 );
+
+ iRc += TestMethod( po, "GetDateField()", V3Dbf.GetDateField( "STARTDATE", d ), 0 );
+ iRc += TestMethod( po, "GetDateField()", d.Str(), "19991201", 8 );
+
+ // init a second record for more testing
+ iRc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutLogicalField()", V3Dbf.PutLogicalField( "SWITCH", xbTrue ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+ xbBool bSwitch;
+ iRc += TestMethod( po, "GetLogicalField()", V3Dbf.GetLogicalField( "SWITCH", bSwitch ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetLogicalField()", bSwitch, xbTrue );
+
+ // init a third record for more testing
+ iRc += TestMethod( po, "BlankRecord()", V3Dbf.BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutLogicalField()", V3Dbf.PutLogicalField( "SWITCH", xbFalse ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+
+ iRc += TestMethod( po, "GetLogicalField()", V3Dbf.GetLogicalField( "SWITCH", bSwitch ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetLogicalField()", bSwitch, xbFalse );
+
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "TESTNUM", "12345678" ), XB_INVALID_DATA );
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "TESTNUM", "1234567" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "TESTNUM", "1234567.12345" ), XB_INVALID_DATA );
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "TESTNUM", ".12345" ), XB_INVALID_DATA );
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "TESTNUM", ".1234" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "TESTNUM", "12345678.1234" ), XB_INVALID_DATA );
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "TESTNUM", "1234567.1234" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( po, "GetFieldCnt()", V3Dbf.GetFieldCnt(), 9 );
+ iRc += TestMethod( po, "GetTblAlias()", V3Dbf.GetTblAlias(), "TestV3", 6 );
+ iRc += TestMethod( po, "GetDbfStatus()", V3Dbf.GetDbfStatus(), XB_OPEN );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 4 );
+ iRc += TestMethod( po, "GetFirstRecord()", V3Dbf.GetFirstRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 1 );
+ iRc += TestMethod( po, "GetNextRecord()", V3Dbf.GetNextRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 2 );
+ iRc += TestMethod( po, "GetLastRecord()", V3Dbf.GetLastRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 4 );
+ iRc += TestMethod( po, "GetPrevRecord()", V3Dbf.GetPrevRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 3 );
+ iRc += TestMethod( po, "GetRecordLen()", V3Dbf.GetRecordLen(), 80 );
+
+ iRc += TestMethod( po, "GetFirstRecord( XB_ALL_RECS )", V3Dbf.GetFirstRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 1 );
+ iRc += TestMethod( po, "GetNextRecord( XB_ALL_RECS )", V3Dbf.GetNextRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 2 );
+ iRc += TestMethod( po, "GetLastRecord( XB_ALL_RECS )", V3Dbf.GetLastRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 4 );
+ iRc += TestMethod( po, "GetPrevRecord( XB_ALL_RECS )", V3Dbf.GetPrevRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 3 );
+
+ iRc += TestMethod( po, "GetFirstRecord( XB_DELETED_RECS )", V3Dbf.GetFirstRecord( XB_DELETED_RECS ), XB_EOF );
+ iRc += TestMethod( po, "GetLastRecord( XB_DELETED_RECS )", V3Dbf.GetLastRecord( XB_DELETED_RECS ), XB_EOF );
+
+ iRc += TestMethod( po, "GetFirstRecord( XB_ALL_RECS )", V3Dbf.GetFirstRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetNextRecord( XB_DELETED_RECS )", V3Dbf.GetNextRecord( XB_DELETED_RECS ), XB_EOF );
+
+ iRc += TestMethod( po, "GetLastRecord( XB_ALL_RECS )", V3Dbf.GetLastRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetPrevRecord( XB_DELETED_RECS )", V3Dbf.GetPrevRecord( XB_DELETED_RECS ), XB_BOF );
+
+ iRc += TestMethod( po, "DeleteAllRecords()", V3Dbf.DeleteAllRecords(), XB_NO_ERROR );
+
+
+ iRc += TestMethod( po, "GetFirstRecord()", V3Dbf.GetFirstRecord(), XB_EOF );
+ iRc += TestMethod( po, "GetLastRecord()", V3Dbf.GetLastRecord(), XB_EOF );
+
+ iRc += TestMethod( po, "GetFirstRecord( XB_ALL_RECS )", V3Dbf.GetFirstRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 1 );
+
+ iRc += TestMethod( po, "GetNextRecord( XB_ALL_RECS )", V3Dbf.GetNextRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 2 );
+
+ iRc += TestMethod( po, "GetNextRecord()", V3Dbf.GetNextRecord(), XB_EOF );
+
+ iRc += TestMethod( po, "GetLastRecord( XB_ALL_RECS )", V3Dbf.GetLastRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 4 );
+
+ iRc += TestMethod( po, "GetPrevRecord( XB_ALL_RECS )", V3Dbf.GetPrevRecord( XB_ALL_RECS ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetCurRecNo()", (xbInt32) V3Dbf.GetCurRecNo(), 3 );
+
+ iRc += TestMethod( po, "UndeleteAllRecords()", V3Dbf.UndeleteAllRecords(), XB_NO_ERROR );
+
+ char * p = V3Dbf.GetRecordBuf();
+ iRc += TestMethod( po, "GetRecordBuf()", p[0], ' ' );
+
+ if( po == 2 ){
+ V3Dbf.DumpHeader( 3 );
+ V3Dbf.DumpRecord( 4 );
+ }
+
+
+
+ iRc += TestMethod( po, "PutField()", V3Dbf.PutField( "LASTNAME", "CLINTON" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "PutRecord()", V3Dbf.PutRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "UndeleteRecord()", V3Dbf.UndeleteRecord(), XB_NO_ERROR );
+ xbUInt32 ulRecCnt = 0;
+ iRc += TestMethod( po, "GetRecordCnt()", V3Dbf.GetRecordCnt( ulRecCnt ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetRecordCnt()b",(xbInt32) ulRecCnt, 4 );
+ iRc += TestMethod( po, "DeleteAllRecords()", V3Dbf.DeleteAllRecords(), XB_NO_ERROR );
+ iRc += TestMethod( po, "UndeleteAllRecords()", V3Dbf.UndeleteAllRecords(), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 4 ), XB_NO_ERROR );
+ iRc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
+ iRc += TestMethod( po, "Commit()", V3Dbf.Commit(), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetDbfStatus()", V3Dbf.GetDbfStatus(), XB_OPEN );
+
+ if( po == 2 ){
+ V3Dbf.DumpRecord( 4 );
+ }
+
+ xbDbf3 CopyDbf( &x );
+ iRc += TestMethod( po, "CopyDbfStructure()", V3Dbf.CopyDbfStructure( &CopyDbf, "CopyStructureV3NoMemos", "CopyAliasV3NoMemos", XB_OVERLAY, XB_MULTI_USER ), XB_NO_ERROR );
+ iRc += 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();
+ }
+
+ iRc += TestMethod( po, "GetDbfStatus()", CopyDbf.GetDbfStatus(), XB_CLOSED );
+ iRc += TestMethod( po, "Open()", CopyDbf.xbDbf::Open( "CopyStructureV3NoMemos.DBF", "CopyAliasV3NoMemos" ), XB_NO_ERROR );
+
+ if( po == 2 ){
+ std::cout << "There should be two entries in the table list" << std::endl;
+ x.DisplayTableList();
+ }
+
+ iRc += TestMethod( po, "CopyDbf.Close()", CopyDbf.Close(), XB_NO_ERROR );
+
+ #ifdef XB_DEBUG_SUPPORT
+ #ifdef XB_LOCKING_SUPPORT
+ V3Dbf.DumpTableLockStatus();
+ #endif
+ #endif
+
+ iRc += TestMethod( po, "PackTable( 0, 0 )", V3Dbf.Pack(), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetDbfStatus()", V3Dbf.GetDbfStatus(), XB_OPEN );
+
+ iRc += TestMethod( po, "Zap()", V3Dbf.Zap(), XB_NO_ERROR );
+ if( po == 2 )
+ x.DisplayTableList();
+
+ iRc += TestMethod( po, "Close()", V3Dbf.Close(), XB_NO_ERROR );
+ if( po == 2 )
+ x.DisplayTableList();
+
+ if( po > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+
+ V3Dbf.Abort(); // don't crash the program if uncommited updates
+
+#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_v4_memos.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_memos.cpp
new file mode 100755
index 0000000..47a9053
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_memos.cpp
@@ -0,0 +1,357 @@
+/* xb_test_xbdbf_v4_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_v4_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 MyV4Record[] =
+ {
+ { "RECID", XB_NUMERIC_FLD, 8, 0 },
+ { "MEMOFLD1", XB_MEMO_FLD, 10, 0 },
+ { "MEMOFLD2", XB_MEMO_FLD, 10, 0 },
+ { "MEMOFLD3", 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;
+
+ xbDbf4 V4Dbf( &x );
+ rc += TestMethod( po, "SetCreateMemoBlockSize", V4Dbf.SetCreateMemoBlockSize( 1024 ), XB_NO_ERROR );
+ rc2 = V4Dbf.CreateTable( "TestV4_memos.DBF", "TestV4", MyV4Record, XB_OVERLAY, XB_MULTI_USER );
+
+ xbUInt64 ullDbfOrigFileSize = 0;
+ xbUInt64 ullDbtOrigFileSize = 0;
+ rc = V4Dbf.GetFileSize( ullDbfOrigFileSize );
+ rc = V4Dbf.GetMemoPtr()->GetFileSize( ullDbtOrigFileSize );
+
+ rc += TestMethod( po, "CreateTable()", (xbInt32) rc2, XB_NO_ERROR );
+ if( rc2 )
+ x.DisplayError( rc2 );
+ else{
+
+ xbInt16 fldRecId = V4Dbf.GetFieldNo( "RECID" );
+ xbInt16 fldMemo1 = V4Dbf.GetFieldNo( "MEMOFLD1" );
+ xbInt16 fldMemo2 = V4Dbf.GetFieldNo( "MEMOFLD2" );
+ xbInt16 fldMemo3 = V4Dbf.GetFieldNo( "MEMOFLD3" );
+ xbString sData;
+
+
+
+
+ // Record 1
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "1" ), XB_NO_ERROR );
+ sData = "Memo data";
+
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add one block", V4Dbf.GetMemoPtr(), 2, 2, "" );
+
+ sData = "Some other memo data";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add one block", V4Dbf.GetMemoPtr(), 3, 3, "" );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+
+
+
+ // Record 2
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "2" ), XB_NO_ERROR );
+ sData = "Memo data Rec 2 ..[";
+ sData.PadRight( 'Z', 1036 );
+ sData += ']';
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Some other memo data Rec 2 ... [";
+ sData.PadRight( 'W', 1555 );
+ sData += ']';
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add 7 blocks", V4Dbf.GetMemoPtr(), 7, 7, "" );
+
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, "" ), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Delete 2 blocks", V4Dbf.GetMemoPtr(), 3, 7, "3,2,7" );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+ // Record 3
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "3" ), XB_NO_ERROR );
+ sData = "Memo data r3f1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add one block", V4Dbf.GetMemoPtr(), 4, 7, "4,1,7" );
+ sData = "Memo data r3f2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add one block", V4Dbf.GetMemoPtr(), 7, 7, "" );
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, "" ), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Delete one block", V4Dbf.GetMemoPtr(), 3, 7, "3,1,7" );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+ // Record 4
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "4" ), XB_NO_ERROR );
+ sData = "Memo data Rec 4 fld1 ..[";
+ sData.PadRight( 'Q', 1036 );
+ sData += ']';
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Update Memo Field", V4Dbf.GetMemoPtr(), 3, 9, "3,1,9" );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+ // go back a record and delete a memo field and test if all blocks filled in
+ rc += TestMethod( po, "GetPrevRecord()", V4Dbf.GetPrevRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, "" ), XB_NO_ERROR );
+ rc += TestMethod( po, "Commit()", V4Dbf.Commit(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Delete one block", V4Dbf.GetMemoPtr(), 3, 9, "3,2,9" );
+
+ // Record 5
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "5" ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+ // Zap a table with memo fields
+ rc += TestMethod( po, "Zap()", V4Dbf.Zap(), XB_NO_ERROR );
+ xbUInt32 ulRecCnt = 0;
+ rc += TestMethod( po, "GetRecCount()", V4Dbf.GetRecordCnt( ulRecCnt ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetRecCount()b", (xbInt32) ulRecCnt, 0 );
+
+ // Add records back into the table, and verify the block chains created as designed
+ // Record 1
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "1" ), XB_NO_ERROR );
+ sData = "Memo data rec 1 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Update Memo Field", V4Dbf.GetMemoPtr(), 2, 2, "" );
+
+ // Revise the memo field
+ sData = "Updated memo data rec1 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "Commit()", V4Dbf.Commit(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "UpdateMemoField", V4Dbf.GetMemoPtr(), 2, 2, "" );
+
+ sData = "Memo data rec 1 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "Commit()", V4Dbf.Commit(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "UpdateMemoField", V4Dbf.GetMemoPtr(), 3, 3, "" );
+
+ // Record 2
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "2" ), XB_NO_ERROR );
+ sData = "Memo data rec 2 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 2 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add one block", V4Dbf.GetMemoPtr(), 5, 5, "" );
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, "" ), XB_NO_ERROR );
+ rc += TestMethod( po, "Commit()", V4Dbf.Commit(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "UpdateMemoField", V4Dbf.GetMemoPtr(), 3, 5, "3,1,5" );
+
+ sData = "Test the abort code";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "Abort()", V4Dbf.Abort(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "UpdateMemoField", V4Dbf.GetMemoPtr(), 3, 5, "3,1,5" );
+
+ sData = "Test mulitple updates before commit";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Test mulitple updates before commit2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "UpdateMemoField", V4Dbf.GetMemoPtr(), 5, 5, "" );
+ sData = "Test mulitple updates before commit3";
+
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "Commit()", V4Dbf.Commit(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "UpdateMemoField", V4Dbf.GetMemoPtr(), 5, 5, "" );
+
+// V4Dbf.GetMemoPtr()->DumpMemoInternals();
+
+ rc += TestMethod( po, "Zap(0)", V4Dbf.Zap(), XB_NO_ERROR );
+
+ xbUInt64 ullDbfPostZapFileSize = 0;
+ xbUInt64 ullDbtPostZapFileSize = 0;
+ rc += V4Dbf.GetFileSize( ullDbfPostZapFileSize );
+ rc += V4Dbf.GetMemoPtr()->GetFileSize( ullDbtPostZapFileSize );
+
+ rc += TestMethod( po, "Zap()", ullDbfPostZapFileSize, ullDbfOrigFileSize );
+ rc += TestMethod( po, "Memo->Zap()", ullDbtPostZapFileSize, ullDbtOrigFileSize );
+ rc += TestDbt4Method( po, "Zap() block check", V4Dbf.GetMemoPtr(), 1, 1, "" );
+
+ rc += TestMethod( po, "GetRecCount()", V4Dbf.GetRecordCnt( ulRecCnt ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetRecCount()", (xbInt32) ulRecCnt, 0 );
+
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "1" ), XB_NO_ERROR );
+ sData = "Memo data rec 1 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 1 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 1 memo 3";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo3, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+
+ sData = "Memo data rec 1 memo 1 A";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 1 memo 2 A";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 1 memo 3A ";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo3, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "Commit()", V4Dbf.Commit(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Update Memo Field", V4Dbf.GetMemoPtr(), 4, 4, "" );
+
+ // Record 2
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "2" ), XB_NO_ERROR );
+ sData = "Memo data rec 2 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 2 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add two blocks", V4Dbf.GetMemoPtr(), 6, 6, "" );
+
+ // Record 3
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "3" ), XB_NO_ERROR );
+ sData = "Memo data rec 3 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 3 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add two blocks", V4Dbf.GetMemoPtr(), 8, 8, "" );
+
+ // Record 4
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "4" ), XB_NO_ERROR );
+ sData = "Memo data rec 4 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 4 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add two blocks", V4Dbf.GetMemoPtr(), 10, 10, "" );
+
+ // Record 5
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "5" ), XB_NO_ERROR );
+ sData = "Memo data rec 5 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 5 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add two blocks", V4Dbf.GetMemoPtr(), 12, 12, "" );
+
+ // Record 6
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "6" ), XB_NO_ERROR );
+ sData = "Memo data rec 6 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 6 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add two blocks", V4Dbf.GetMemoPtr(), 14, 14, "" );
+
+ // Record 7
+ rc += TestMethod( po, "BlankRecord()", V4Dbf.BlankRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldRecId, "7" ), XB_NO_ERROR );
+ sData = "Memo data rec 6 memo 1";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo1, sData ), XB_NO_ERROR );
+ sData = "Memo data rec 6 memo 2";
+ rc += TestMethod( po, "UpdateMemoField()", V4Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
+ rc += TestMethod( po, "AppendRecord()", V4Dbf.AppendRecord(), XB_NO_ERROR );
+ rc += TestDbt4Method( po, "Add two blocks", V4Dbf.GetMemoPtr(), 16, 16, "" );
+
+ // delete records 1, 3, 5, 7
+ rc += TestMethod( po, "GetRecord()", V4Dbf.GetRecord( 1 ), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V4Dbf.DeleteRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetRecord()", V4Dbf.GetRecord( 3 ), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V4Dbf.DeleteRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetRecord()", V4Dbf.GetRecord( 5 ), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V4Dbf.DeleteRecord(), XB_NO_ERROR );
+ rc += TestMethod( po, "GetRecord()", V4Dbf.GetRecord( 7 ), XB_NO_ERROR );
+ rc += TestMethod( po, "DeleteRecord()", V4Dbf.DeleteRecord(), XB_NO_ERROR );
+
+ rc += TestMethod( po, "Pack()", V4Dbf.Pack(), XB_NO_ERROR );
+
+ xbString sDir;
+ V4Dbf.GetFileDirPart( sDir );
+ xbString sDbfName;
+ xbString sDbtName;
+ sDbfName.Sprintf( "%snew4name.DBF", sDir.Str());
+ sDbtName.Sprintf( "%snew4name.DBT", sDir.Str());
+
+// std::cout << "remove [" << sDbfName.Str() << "\n";
+// std::cout << "remove [" << sDbtName.Str() << "\n";
+
+ V4Dbf.xbRemove( sDbfName );
+ V4Dbf.xbRemove( sDbtName );
+
+ x.DisplayTableList();
+
+ rc += TestMethod( po, "Rename()", V4Dbf.Rename( "new4name.DBF" ), XB_NO_ERROR );
+
+ x.DisplayTableList();
+
+
+ rc += TestMethod( po, "Close()", V4Dbf.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/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/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expnode.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expnode.cpp
new file mode 100755
index 0000000..cbd79c9
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expnode.cpp
@@ -0,0 +1,123 @@
+/* xb_test_expnode.cpp
+
+XBase 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
+
+*/
+
+// This program tests the xb expression node functions
+// usage: xb_test_expnode QUITE|NORMAL|VERBOSE
+
+#include "xbase.h"
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+
+/**************************************************************************/
+
+int main( int argCnt, char **av )
+{
+ xbInt16 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
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+ InitTime();
+
+ if( po > 0 ){
+ std::cout << "XBase Expression Node testing program.." << std::endl;
+ std::cout << "This program tests the XBase expression node logic." << std::endl;
+ }
+
+ xbString s1 = "TestNode1";
+ xbExpNode *n1 = new xbExpNode();
+ n1->SetNodeText( s1 );
+ n1->SetNodeType( XB_EXP_OPERATOR );
+ n1->SetReturnType( XB_EXP_LOGICAL );
+
+ iRc += TestMethod( po, "GetNodeType()", n1->GetNodeType(), 'O' );
+ iRc += TestMethod( po, "GetReturnType()", n1->GetReturnType(), 'L' );
+
+ xbString s2 = "TestNode2";
+ xbExpNode *n2 = new xbExpNode( s2, XB_EXP_FUNCTION, XB_EXP_CHAR );
+
+ xbString s3 = "TestNode3";
+ xbExpNode *n3 = new xbExpNode( s3, XB_EXP_CONSTANT, XB_EXP_NUMERIC );
+
+ xbString s4 = "TestNode4";
+ xbExpNode *n4 = new xbExpNode( s4, XB_EXP_OPERATOR, XB_EXP_DATE );
+
+ xbString s5 = "TestNode5";
+ xbExpNode *n5 = new xbExpNode( s5, XB_EXP_FIELD, XB_EXP_LOGICAL );
+
+ n1->AddChild( n2 );
+ n1->AddChild( n3 );
+ n1->AddChild( n4 );
+ n1->AddChild( n5 );
+
+ iRc += TestMethod( po, "GetChildCnt()", (xbInt32) n1->GetChildCnt(), 4 );
+
+ n1->SetResult( s1 );
+ iRc += TestMethod( po, "SetResult() / GetStringResult()", s1, n1->GetStringResult(), 9 );
+
+ xbBool bVal = xbTrue;
+ n1->SetResult( bVal );
+ iRc += TestMethod( po, "SetResult() / GetBoolResult()", xbTrue, n1->GetBoolResult() );
+
+ xbDouble d = 123456.789;
+ n1->SetResult( d );
+ iRc += TestMethod( po, "SetResult() / GetNumericResult()", d, n1->GetNumericResult() );
+
+ #ifdef XB_DEBUG_SUPPORT
+ if( po > 0 ){
+ n1->DumpNode( xbTrue );
+ n1->GetChild( 0 )->DumpNode( xbTrue );
+ n1->GetChild( 1 )->DumpNode( xbTrue );
+ n1->GetChild( 2 )->DumpNode( xbTrue );
+ n1->GetChild( 3 )->DumpNode( xbTrue );
+ }
+ #endif
+
+ delete n1;
+
+ 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_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/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_filter.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_filter.cpp
new file mode 100755
index 0000000..000e196
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_filter.cpp
@@ -0,0 +1,193 @@
+/* xb_test_filter.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2020,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 xbIxFilter
+
+// usage: xb_test_filter 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 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 MyV4Record[] =
+ {
+ { "CFLD", XB_CHAR_FLD, 6, 0 },
+ { "NFLD", XB_NUMERIC_FLD, 6, 0 },
+ { "ZFLD", XB_CHAR_FLD, 1, 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;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ x.SetLogSize( 1000000 );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+
+ char c;
+ xbString s;
+ xbInt32 lRecCnt = 0;
+ iRc = 0;
+
+ if( iPo > 0 )
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+
+ #ifdef XB_DBF4_SUPPORT
+ xbDbf *MyFile = new xbDbf4( &x );
+ #else
+ xbDbf *MyFile = new xbDbf3( &x );
+ #endif
+
+ iRc2 = MyFile->CreateTable( "TestFilt.DBF", "TestFilter", MyV4Record, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+
+
+ #ifdef XB_NDX_SUPPORT
+ xbIx *ixPtr;
+ void *ndx;
+ iRc2 = MyFile->CreateTag( "NDX", "TestFilt.NDX", "CFLD", "", 0, 0, XB_OVERLAY, &ixPtr, &ndx );
+ iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+ #endif // XB_NDX_SUPPORT
+
+
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ for( xbUInt16 i = 0; i < 5 && iRc == XB_NO_ERROR; i++ ){
+ // for( xbUInt16 j = 0; j < 26 && iRc == XB_NO_ERROR; j++ ){
+ for( xbInt16 j = 25; j >= 0 && iRc == XB_NO_ERROR; j-- ){
+ c = j + 65;
+ s = c;
+ s.PadRight( c, (xbUInt32) i + 1 );
+ MyFile->BlankRecord();
+ MyFile->PutField( "CFLD", s );
+ MyFile->PutLongField( "NFLD", ++lRecCnt );
+ iRc = MyFile->AppendRecord();
+ }
+ }
+
+ #ifdef XB_INDEX_SUPPORT
+ iRc += TestMethod( iPo, "SetCurTag()", MyFile->SetCurTag( "" ), XB_NO_ERROR );
+ #endif // XB_INDEX_SUPPORT
+
+ xbFilter f1( MyFile );
+ xbString sMyFilterExpression = "LEFT( CFLD, 2 ) = 'YY'";
+ iRc += TestMethod( iPo, "Set()", f1.Set( sMyFilterExpression ), XB_NO_ERROR );
+
+ #ifdef XB_INDEX_SUPPORT
+ iRc += TestMethod( iPo, "SetCurTag()", MyFile->SetCurTag( "" ), XB_NO_ERROR );
+ #endif // XB_INDEX_SUPPORT
+
+ iRc += TestMethod( iPo, "Set()", f1.Set( sMyFilterExpression ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetFirstRecord()", f1.GetFirstRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 28 );
+ iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 54 );
+ iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 80 );
+ iRc += TestMethod( iPo, "GetLast()", f1.GetLastRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 106 );
+ iRc += TestMethod( iPo, "GetPrev()", f1.GetPrevRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 80 );
+
+ sMyFilterExpression = "LEFT( CFLD, 2 ) = 'CC'";
+ iRc += TestMethod( iPo, "Set()", f1.Set( sMyFilterExpression ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetFirstRecord()", f1.GetFirstRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 50 );
+ iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 76 );
+ iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 102 );
+ iRc += TestMethod( iPo, "GetLast()", f1.GetLastRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 128 );
+ iRc += TestMethod( iPo, "GetPrev()", f1.GetPrevRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 102 );
+
+
+ #ifdef XB_NDX_SUPPORT
+ f1.SetLimit( 0 );
+
+ // change things up a bit
+ iRc += TestMethod( iPo, "GetRecord()", MyFile->GetRecord( 32 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutField()", MyFile->PutField( "ZFLD", "Z" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetRecord()", MyFile->GetRecord( 52 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutField()", MyFile->PutField( "ZFLD", "Z" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetRecord()", MyFile->GetRecord( 76 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutField()", MyFile->PutField( "ZFLD", "Z" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetRecord()", MyFile->GetRecord( 103 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutField()", MyFile->PutField( "ZFLD", "Z" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Commit()", MyFile->Commit(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "SetCurTag()", MyFile->SetCurTag( "TestFilt" ), XB_NO_ERROR );
+ sMyFilterExpression = "ZFLD = 'Z'";
+ iRc += TestMethod( iPo, "Set()", f1.Set( sMyFilterExpression ), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "GetFirstRecordIx()", f1.GetFirstRecordIx(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 52 );
+ iRc += TestMethod( iPo, "GetNextRecordIx()", f1.GetNextRecordIx(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 103 );
+ iRc += TestMethod( iPo, "GetNextRecordIx()", f1.GetNextRecordIx(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 76 );
+ iRc += TestMethod( iPo, "GetLastRecordIx()", f1.GetLastRecordIx(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 32 );
+ iRc += TestMethod( iPo, "GetPrevRecordIx()", f1.GetPrevRecordIx(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 76 );
+
+ #endif // XB_NDX_SUPPORT
+
+
+ iRc += TestMethod( iPo, "Close()", MyFile->Close(), XB_NO_ERROR );
+ delete MyFile;
+
+ 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_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/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_linklist.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_linklist.cpp
new file mode 100755
index 0000000..288ee99
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_linklist.cpp
@@ -0,0 +1,342 @@
+/* xb_test_linklist.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 xblnklst and xblnknod
+// usage: xb_test_linklist 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();
+
+ xbLinkList<xbString> ll;
+ ll.InsertAtFront( "A" );
+ ll.InsertAtFront( "B" );
+ ll.InsertAtFront( "C" );
+ ll.InsertAtFront( "D" );
+ ll.InsertAtFront( "E" );
+ ll.InsertAtFront( "F" );
+ ll.InsertAtFront( "G" );
+ ll.InsertAtFront( "H" );
+ ll.InsertAtFront( "I" );
+ ll.InsertAtFront( "J" );
+ ll.InsertAtFront( "K" );
+ ll.InsertAtFront( "L" );
+ ll.InsertAtFront( "M" );
+ ll.InsertAtFront( "N" );
+ ll.InsertAtFront( "O" );
+
+ xbLinkListNode<xbString> * llN = ll.GetHeadNode();
+ xbString s;
+ xbString s2;
+ xbUInt32 ulCnt = ll.GetNodeCnt();
+ for( xbUInt32 i = 0; i < ulCnt; i++ ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetNextNode();
+ }
+ rc += TestMethod( po, "InsertAtFront()", s, "ONMLKJIHGFEDCBA", 15 );
+
+ s = "";
+ llN = ll.GetHeadNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetNextNode();
+ }
+ rc += TestMethod( po, "GetNextNode()", s, "ONMLKJIHGFEDCBA", 15 );
+
+ s = "";
+ llN = ll.GetEndNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetPrevNode();
+ }
+ rc += TestMethod( po, "GetNextNode()", s, "ABCDEFGHIJKLMNO", 15 );
+
+
+ ll.RemoveFromFront( s );
+ rc += TestMethod( po, "RemoveFromFront()", s, "O", 1 );
+
+ llN = ll.GetHeadNode();
+ ulCnt = ll.GetNodeCnt();
+ rc += TestMethod( po, "RemoveFromFront()", (xbInt32) ulCnt, 14 );
+
+ s = "";
+ for( xbUInt32 i = 0; i < ulCnt; i++ ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetNextNode();
+ }
+ rc += TestMethod( po, "RemoveFromFront()", s, "NMLKJIHGFEDCBA", 14 );
+
+
+ s = "";
+ llN = ll.GetHeadNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetNextNode();
+ }
+ rc += TestMethod( po, "RemoveFromFront()", s, "NMLKJIHGFEDCBA", 14 );
+
+
+ s = "";
+ llN = ll.GetEndNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetPrevNode();
+ }
+ rc += TestMethod( po, "RemoveFromFront()", s, "ABCDEFGHIJKLMN", 14 );
+
+
+ ll.RemoveFromEnd( s );
+ rc = TestMethod( po, "RemoveFromEnd()", s, "A", 1 );
+ ulCnt = ll.GetNodeCnt();
+ rc += TestMethod( po, "RemoveFromFront()", (xbInt32) ulCnt, 13 );
+
+ s = "";
+ llN = ll.GetHeadNode();
+ for( xbUInt32 i = 0; i < ulCnt; i++ ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetNextNode();
+ }
+ rc += TestMethod( po, "RemoveFromEnd()", s, "NMLKJIHGFEDCB", 13 );
+
+ s = "";
+ llN = ll.GetHeadNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetNextNode();
+ }
+ rc += TestMethod( po, "RemoveFromEnd()", s, "NMLKJIHGFEDCB", 13 );
+
+ s = "";
+ llN = ll.GetEndNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetPrevNode();
+ }
+ rc += TestMethod( po, "RemoveFromEnd()", s, "BCDEFGHIJKLMN", 13 );
+
+ s = "J";
+ ll.RemoveByVal( s );
+ rc += TestMethod( po, "RemoveByVal()", s, "J", 1 );
+ ulCnt = ll.GetNodeCnt();
+ rc += TestMethod( po, "RemoveByVal()", (xbInt32) ulCnt, 12 );
+
+ llN = ll.GetHeadNode();
+ s = "";
+ for( xbUInt32 i = 0; i < ulCnt; i++ ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetNextNode();
+ }
+ rc += TestMethod( po, "RemoveByVal()", s, "NMLKIHGFEDCB", 12 );
+
+ s = "";
+ llN = ll.GetHeadNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetNextNode();
+ }
+ rc += TestMethod( po, "RemoveByVal()", s, "NMLKIHGFEDCB", 12 );
+
+ s = "";
+ llN = ll.GetEndNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ s.Sprintf( "%s%s", s.Str(), s2.Str() );
+ llN = llN->GetPrevNode();
+ }
+ rc += TestMethod( po, "RemoveByVal()", s, "BCDEFGHIKLMN", 12 );
+
+
+// ordered link list
+ xbLinkListOrd<xbString> llO;
+ llO.SetDupKeys( 0 );
+ rc += TestMethod( po, "InsertKey( J )", llO.InsertKey( "J" ), 0);
+ rc += TestMethod( po, "InsertKey( J )", llO.InsertKey( "J" ), XB_KEY_NOT_UNIQUE );
+ rc += TestMethod( po, "InsertKey( M )", llO.InsertKey( "M" ), 0 );
+ rc += TestMethod( po, "InsertKey( C )", llO.InsertKey( "C" ), 0 );
+ rc += TestMethod( po, "InsertKey( F )", llO.InsertKey( "F" ), 0 );
+ rc += TestMethod( po, "InsertKey( Q )", llO.InsertKey( "Q" ), 0 );
+ rc += TestMethod( po, "InsertKey( A )", llO.InsertKey( "A" ), 0 );
+ rc += TestMethod( po, "InsertKey( T )", llO.InsertKey( "T" ), 0 );
+
+ if( po > 1 ){
+ std::cout << "dumping node chain from beginning to end\n";
+ llN = llO.GetHeadNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ std::cout << "node = " << s2.Str() << "\n";
+ llN = llN->GetNextNode();
+ }
+
+ std::cout << "dumping node chain from beginning to beginning\n";
+ llN = llO.GetHeadNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ std::cout << "node = " << s2.Str() << "\n";
+ llN = llN->GetPrevNode();
+ }
+
+ std::cout << "dumping node chain from end to end\n";
+ llN = llO.GetEndNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ std::cout << "node = " << s2.Str() << "\n";
+ llN = llN->GetNextNode();
+ }
+
+ std::cout << "dumping node chain from end to beginning\n";
+ llN = llO.GetEndNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ std::cout << "node = " << s2.Str() << "\n";
+ llN = llN->GetPrevNode();
+ }
+
+
+ }
+
+ // xbLinkListNode<xbString> * psN;
+ s2 = "A";
+ rc += TestMethod( po, "KeyExists('A')", llO.KeyExists( s2 ), xbTrue );
+ rc += TestMethod( po, "RemoveKey('A')", llO.RemoveKey( s2 ), 0 );
+ s2 = "J";
+ rc += TestMethod( po, "RemoveKey('J')", llO.RemoveKey( s2 ), 0 );
+ s2 = "T";
+ rc += TestMethod( po, "RemoveKey('T')", llO.RemoveKey( s2 ), 0 );
+ rc += TestMethod( po, "RemoveKey('T')", llO.RemoveKey( s2 ), XB_NOT_FOUND );
+ rc += TestMethod( po, "KeyExists('T')", llO.KeyExists( s2 ), xbFalse );
+
+
+
+ xbLinkListOrd<xbUInt32> lloi;
+ lloi.SetDupKeys( 0 );
+ xbUInt32 i = 3;
+
+ rc += TestMethod( po, "InsertKey( 1 )", lloi.InsertKey( i ), 0 );
+ rc += TestMethod( po, "RemoveKey( 1 )", lloi.RemoveKey( i ), 0 );
+ rc += TestMethod( po, "RemoveKey( 1 )", lloi.RemoveKey( i ), XB_NOT_FOUND );
+
+
+ if( po > 1 ){
+ std::cout << "dumping node chains after delete\n";
+ std::cout << "dumping node chain from beginning to end\n";
+ llN = llO.GetHeadNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ std::cout << "node = " << s2.Str() << "\n";
+ llN = llN->GetNextNode();
+ }
+
+ std::cout << "dumping node chain from beginning to beginning\n";
+ llN = llO.GetHeadNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ std::cout << "node = " << s2.Str() << "\n";
+ llN = llN->GetPrevNode();
+ }
+
+ std::cout << "dumping node chain from end to end\n";
+ llN = llO.GetEndNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ std::cout << "node = " << s2.Str() << "\n";
+ llN = llN->GetNextNode();
+ }
+
+ std::cout << "dumping node chain from end to beginning\n";
+ llN = llO.GetEndNode();
+ while( llN ){
+ s2 = llN->GetKey();
+ std::cout << "node = " << s2.Str() << "\n";
+ llN = llN->GetPrevNode();
+ }
+ }
+
+
+ xbLinkListOrd<xbUInt32> ll32;
+ // xbLinkListNode<xbUInt32> * ll32n;
+
+// for( xbUInt32 ul = 0; ul < 1; ul++ )
+// ll32.InsertKey( ul, ul );
+
+
+ xbUInt32 ul3 = 0;
+// ll32.InsertKey( 1, "1" );
+
+ ll32.InsertKey( ul3, ul3 );
+
+ ll.Clear();
+
+
+
+#ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
+ x.WriteLogMessage( sMsg );
+#endif
+
+ if( po > 0 || rc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", rc * -1 );
+
+ return rc;
+}
+
+
+
+
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/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_uda.cpp b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_uda.cpp
new file mode 100755
index 0000000..18693b5
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_uda.cpp
@@ -0,0 +1,97 @@
+/* xb_test_uda.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 uda (user data area) functions
+
+// usage: xb_test_uda 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 */
+
+ 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
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+
+ xbUda uda;
+ iRc += TestMethod( po, "GetTokencCnt()", uda.GetTokenCnt(), 0 );
+ xbString s1;
+ xbString s2;
+ iRc += TestMethod( po, "AddTokenForKey()", uda.AddTokenForKey( "B", "BBBB" ), XB_NO_ERROR );
+ s1 = "C";
+ iRc += TestMethod( po, "AddTokenForKey()", uda.AddTokenForKey( s1, "CCCC" ), XB_NO_ERROR );
+ s2 = "DDDD";
+ iRc += TestMethod( po, "AddTokenForKey()", uda.AddTokenForKey( "D", s2 ), XB_NO_ERROR );
+
+ s1 = "A";
+ s2 = "AAAA";
+ iRc += TestMethod( po, "AddTokenForKey()", uda.AddTokenForKey( s1, s2 ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AddTokenForKey()", uda.AddTokenForKey( "AA", "AAAAA" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AddTokenForKey()", uda.AddTokenForKey( "BB", "BBBBB" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AddTokenForKey()", uda.AddTokenForKey( "CC", "CCCCC" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "AddTokenForKey()", uda.AddTokenForKey( "DD", "DDDDD" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetTokencCnt()", uda.GetTokenCnt(), 8);
+
+ iRc += TestMethod( po, "UpdTokenForKey()", uda.UpdTokenForKey( "BB", "9999" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "UpdTokenForKey()", uda.DelTokenForKey( "CC" ), XB_NO_ERROR );
+ iRc += TestMethod( po, "GetTokencCnt()", uda.GetTokenCnt(), 7 );
+
+#ifdef XB_DEBUG_SUPPORT
+ uda.DumpUda();
+#endif // XB_DEBUG_SUPPORT
+
+ uda.Clear();
+ iRc += TestMethod( po, "GetTokencCnt()", uda.GetTokenCnt(), 0 );
+
+#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_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/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_copydbf.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_copydbf.cpp
new file mode 100755
index 0000000..2466b1b
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_copydbf.cpp
@@ -0,0 +1,100 @@
+/* xb_copydbf.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 <xbase.h>
+using namespace xb;
+
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_copydbf [-h] [-?] [--help] [-v] [--version] -s source.DBF -t target.DBF" << std::endl << std::endl;
+ std::cout << "This program copies the structure of a table defined in source.DBF to target.DBF. Data and indices are not included.";
+ std::cout << 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;
+ xbInt16 iRc;
+ xbDbf *dSrc = NULL;
+ xbDbf *dTrg = NULL;
+
+ xbString sParm;
+ xbString sSrcDbf;
+ xbString sTrgDbf;
+
+ 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, "-s", sSrcDbf ) || sSrcDbf == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-t", sTrgDbf ) || sTrgDbf == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.EnableMsgLogging();
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", argv[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if(( iRc = x.OpenHighestVersion( sSrcDbf, "", &dSrc )) != XB_NO_ERROR ){
+ std::cout << "Could not open file iRc = " << iRc << " file = " << sSrcDbf.Str() << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+ #ifdef XB_DBF4_SUPPORT
+ dTrg = new xbDbf4( &x );
+ #else
+ dTrg = new xbDbf3( &x );
+ #endif
+
+ if(( iRc = dSrc->CopyDbfStructure( dTrg, sTrgDbf, sTrgDbf, XB_DONTOVERLAY, XB_SINGLE_USER )) != XB_NO_ERROR ){
+ std::cout << "Could not copy file " << sTrgDbf.Str() << " Error = " << iRc << "\n";
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+ x.CloseAllTables();
+ return 0;
+}
+
+
+
+
+
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/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_deletall.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_deletall.cpp
new file mode 100755
index 0000000..3a8f6e4
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_deletall.cpp
@@ -0,0 +1,85 @@
+/* xb_deletall.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2017,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
+
+
+
+This program sets the delete flag on all records in a dbf file
+
+*/
+
+
+#include <xbase.h>
+
+
+using namespace xb;
+
+
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_deleteall [-h] [-?] [--help] [-v] [--version] -i myfile" << std::endl << std::endl;
+ std::cout << "This program flags all the records in a DBF table for deletion. To physically remove the deleted records, see program xb_pack.";
+ std::cout << 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;
+ xbDbf *MyFile = NULL;
+ xbFile f( &x );
+ xbInt16 iRc = 0;
+
+ xbString sParm;
+
+ 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, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file RC = " << iRc << " file = " << sParm.Str() << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+ iRc = MyFile->DeleteAllRecords();
+ if( iRc != XB_NO_ERROR ) {
+ std::cout << "Error Deleting all records - database ==> " << sParm.Str() << "\n";
+ std::cout << "Return Code = " << iRc;
+ x.DisplayError( iRc );
+ return 1;
+ }
+ MyFile->Close();
+ delete MyFile;
+ return 0;
+} \ No newline at end of file
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumpdbt.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumpdbt.cpp
new file mode 100755
index 0000000..05b7209
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumpdbt.cpp
@@ -0,0 +1,109 @@
+/* xb_dumpdbt.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2017,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_dumpdbt [-h] [-?] [--help] [-v] [--version] -i filename.DBF" << std::endl << std::endl;
+ std::cout << "This program dumps memo record data from an xbase formatted DBT file to stdout." << 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[] )
+{
+
+
+ #ifdef XB_MEMO_SUPPORT
+ xbXBase x;
+ xbInt16 iRc;
+ char cFieldType;
+ xbDbf *MyFile = NULL;
+ xbUInt32 ulMemoFieldLen;
+ xbString sFldName;
+ xbInt32 lBlockPtr;
+ xbString sMemoFldData;
+
+ xbString sParm;
+ 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, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file iRc = " << iRc << " file = " << sParm.Str() << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+ if( MyFile->GetMemoFieldCnt() == 0 ) {
+ std::cout << "No memo fields exist in " << sParm.Str() << std::endl;
+ } else {
+
+ xbUInt32 ulRecCnt = 0;
+ iRc = MyFile->GetRecordCnt( ulRecCnt );
+
+ for( xbUInt32 ul = 1; ul <= ulRecCnt; ul++ ){
+ MyFile->GetRecord( ul );
+ std::cout << "\nRecord # " << MyFile->GetCurRecNo();
+ if( MyFile->RecordDeleted())
+ std::cout << " (deleted) ";
+
+ for( int j = 0; j < MyFile->GetFieldCnt(); j++ ) {
+ MyFile->GetFieldType( j, cFieldType );
+
+ if( cFieldType == 'M' ) {
+ MyFile->GetMemoFieldLen( j, ulMemoFieldLen );
+ MyFile->GetFieldName( j, sFldName );
+ MyFile->GetLongField( j, lBlockPtr );
+ std::cout << "\nMemo field [" << sFldName.Str()
+ << "] length = [" << ulMemoFieldLen;
+ std::cout << "] Head Block = [" << lBlockPtr << "]\n";
+
+ MyFile->GetMemoField( j, sMemoFldData );
+ std::cout << sMemoFldData.Str() << "\n";
+ }
+ }
+ }
+ std::cout << "\n";
+ MyFile->Close();
+ delete MyFile;
+ }
+ #else
+ std::cout << "\nXB_MEMO_SUPPORT is OFF\n";
+ #endif
+
+ return 0;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumprecs.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumprecs.cpp
new file mode 100755
index 0000000..cf6e33c
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumprecs.cpp
@@ -0,0 +1,98 @@
+/* xb_dumprecs.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 <xbase.h>
+using namespace xb;
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_dumprecs [-h] [-?] [--help] [-v] [--version] -i filename.DBF" << std::endl << std::endl;
+ std::cout << "This program dumps data records in an xbase formatted DBF file to stdout in csv format." << std::endl;
+ std::cout << "Memo data (variable length) is not included in this export. See program xb_dumpdpt for memo data." << 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;
+
+
+ xbInt16 iRc;
+ x.EnableMsgLogging();
+ x.SetLogSize( 1000000L );
+
+ xbString sParm;
+ 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, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ xbDbf *MyFile = NULL;
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file RC = " << iRc << " file = " << sParm.Str() << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+ // std::cout << "Processing file sequentially from beginning..." << std::endl;
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ MyFile->EnableBlockReadProcessing();
+ #endif
+
+ xbUInt32 j = 0;
+ xbUInt32 ulRecCnt = 0;
+
+ iRc = MyFile->GetRecordCnt( ulRecCnt );
+
+ if( iRc < XB_NO_ERROR )
+ return iRc;
+ while( j < ulRecCnt ){
+ if( j == 0 )
+ iRc = MyFile->DumpRecord(++j, 2, 2 ); // header + data
+ else
+ iRc = MyFile->DumpRecord(++j, 2, 1 ); // data only
+ if( iRc != XB_NO_ERROR ){
+ x.DisplayError( iRc );
+ return 1;
+ }
+ }
+ std::cout << j << " Records processed." << std::endl;
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ MyFile->DisableBlockReadProcessing();
+ #endif
+
+ MyFile->Close();
+
+ return 0;
+}
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/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_pack.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_pack.cpp
new file mode 100755
index 0000000..0cbba7e
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_pack.cpp
@@ -0,0 +1,84 @@
+/* xb_pack.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2017,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_pack [-h] [-?] [--help] [-v] [--version] -i filename.DBF" << std::endl << std::endl;
+ std::cout << "This program removes data records that are flagged for deletion in a DBF file and rebuilds indices." << 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;
+ xbInt16 iRc;
+ xbDbf * MyFile = NULL;
+
+ xbString sParm;
+ 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, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file iRc = " << iRc << " file = " << sParm.Str() << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+ if(( iRc = MyFile->Pack()) != XB_NO_ERROR ) {
+ std::cout << "\nError packing DBF database ==> " << sParm.Str() << std::endl;
+ std::cout << " Return Code = " << iRc << std::endl;
+ return 1;
+ }
+
+ #ifdef XB_INDEX_SUPPORT
+ if(( iRc = MyFile->Reindex( 1 )) != XB_NO_ERROR ) {
+ std::cout << "\nError reindexing DBF database ==> " << sParm.Str() << std::endl;
+ std::cout << " Return Code = " << iRc << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+ #endif // XB_INDEX_SUPPORT
+
+ MyFile->Close();
+ delete MyFile;
+
+ std::cout << "\nPack Database complete...\n\n";
+ return 0;
+}
+
+
+
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_tblinfo.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_tblinfo.cpp
new file mode 100755
index 0000000..241642a
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_tblinfo.cpp
@@ -0,0 +1,104 @@
+/* xb_tblinfo.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,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_tblinfo [-h] [-?] [--help] [-v] [--version] -i filename.DBF" << std::endl << std::endl;
+ std::cout << "This program dumps table definition information from a DBF file and associated indices." << 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;
+ xbInt16 iRc;
+ xbString sTagName;
+ xbDbf *MyFile = NULL;
+
+ x.EnableMsgLogging();
+ x.SetLogSize( 1000000L );
+
+ xbString sParm;
+ 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, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file iRc = " << iRc << " file = " << sParm.Str() << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+ MyFile->DumpHeader( 4 );
+
+
+
+ #ifdef XB_INDEX_SUPPORT
+ xbIxList *ixl;
+ xbIx *ixp;
+ xbString sFileType;
+
+ #ifdef XB_MDX_SUPPORT
+ ixl = MyFile->GetIxList();
+ while( ixl ){
+ ixp = ixl->ix;
+ ixp->GetFileType( sFileType );
+ if( sFileType == "MDX" )
+ ixp->DumpHeader( 1, 3 );
+ ixl = ixl->next;
+ }
+ #endif // XB_MDX_SUPPORT
+
+
+ #ifdef XB_NDX_SUPPORT
+ ixl = MyFile->GetIxList();
+ while( ixl ){
+ ixp = ixl->ix;
+ ixp->GetFileType( sFileType );
+ if( sFileType == "NDX" )
+ ixp->DumpHeader( 1, 3 );
+ ixl = ixl->next;
+ }
+ #endif // XB_NDX_SUPPORT
+
+ #endif // XB_INDEX_SUPPORT
+
+ MyFile->Close();
+ delete MyFile;
+ return 0;
+}
diff --git a/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_undelall.cpp b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_undelall.cpp
new file mode 100755
index 0000000..5fb1323
--- /dev/null
+++ b/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_undelall.cpp
@@ -0,0 +1,82 @@
+/* xb_undelall.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2017,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 removes the delete flag on all records flagged for deletion in a DBF file
+
+*/
+
+
+#include <xbase.h>
+
+
+using namespace xb;
+
+
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_undelall [-h] [-?] [--help] [-v] [--version] -i myfile" << std::endl << std::endl;
+ std::cout << "This program removes the deletion flags all the records in a DBF table that are flagged for deletion.";
+ std::cout << 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;
+ xbDbf *MyFile = NULL;
+ xbInt16 iRc = 0;
+
+ xbString sParm;
+
+ 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, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file RC = " << iRc << " file = " << sParm.Str() << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+ iRc = MyFile->UndeleteAllRecords();
+ if( iRc != XB_NO_ERROR ) {
+ std::cout << "Error Undeleting all records - database ==> " << sParm.Str() << "\n";
+ std::cout << " Return Code = " << iRc;
+ return 1;
+ }
+ MyFile->Close();
+ delete MyFile;
+ return 0;
+} \ No newline at end of file