summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2023-01-29 15:45:51 +0100
committerJörg Frings-Fürst <debian@jff-webhosting.net>2023-01-29 15:45:51 +0100
commit517ad9d4b6eae320b708d03a9340a22893b0cab7 (patch)
tree37cf1907008821b4155cf90718b8d7b00a9d3461
parent4875a3dd9b183dcd2256e2abfc4ccf7484c233b4 (diff)
New upstream version 4.0.3upstream/4.0.3
-rwxr-xr-xAUTHORSbin7413760 -> 1619 bytes
-rwxr-xr-xINSTALL2
-rwxr-xr-xNEWS30
-rwxr-xr-xREADME9
-rwxr-xr-xTODO2
-rwxr-xr-xbuild/borland5.5/CMakeLists.txt65
-rwxr-xr-xbuild/cmake/CMakeLists.txt65
-rwxr-xr-xbuild/linux32/CMakeLists.txt65
-rwxr-xr-xbuild/linux64/CMakeLists.txt64
-rwxr-xr-xbuild/mac64/CMakeLists.txt65
-rwxr-xr-xbuild/win32vs/CMakeLists.txt65
-rwxr-xr-xbuild/win64vs/CMakeLists.txt65
-rw-r--r--data/CopyStructureV3NoMemos.DBFbin321 -> 0 bytes
-rw-r--r--data/CopyStructureV4NoMemos.DBFbin353 -> 0 bytes
-rw-r--r--data/ExpTest.DBFbin232 -> 0 bytes
-rw-r--r--data/Functest.DBFbin156 -> 0 bytes
-rw-r--r--data/LockTest.DBFbin114 -> 0 bytes
-rw-r--r--data/LockTest.DBTbin1024 -> 0 bytes
-rw-r--r--data/TMDXDB01.DBFbin58962 -> 0 bytes
-rw-r--r--data/TMDXDB01.MDXbin135168 -> 0 bytes
-rw-r--r--data/TestFilt.DBFbin1950 -> 0 bytes
-rw-r--r--data/TestFilt.NDXbin4096 -> 0 bytes
-rw-r--r--data/TestNdx.DBFbin283 -> 0 bytes
-rw-r--r--data/TestNdx.INF5
-rw-r--r--data/TestNdxC.NDXbin1024 -> 0 bytes
-rw-r--r--data/TestNdxD.NDXbin19456 -> 0 bytes
-rw-r--r--data/TestNdxN.NDXbin19456 -> 0 bytes
-rw-r--r--data/TestSQL.DBFbin287 -> 0 bytes
-rw-r--r--data/TestSQL.DBTbin2048 -> 0 bytes
-rw-r--r--data/TestV3.DBFbin321 -> 0 bytes
-rw-r--r--data/TestV3_memos.DBFbin216 -> 0 bytes
-rw-r--r--data/TestV3_memos.DBTbin6144 -> 0 bytes
-rw-r--r--data/TestV4.DBFbin542 -> 0 bytes
-rw-r--r--data/TestV4_memos.DBFbin278 -> 0 bytes
-rw-r--r--data/TestV4_memos.DBTbin7168 -> 0 bytes
-rw-r--r--data/xbfile.txt1
-rw-r--r--docs/doxygen/html/classxb_1_1xbDate.html60
-rw-r--r--docs/doxygen/html/classxb_1_1xbDbf.html363
-rw-r--r--docs/doxygen/html/classxb_1_1xbFile.html110
-rw-r--r--docs/doxygen/html/classxb_1_1xbSsv.html44
-rw-r--r--docs/doxygen/html/classxb_1_1xbString.html72
-rw-r--r--docs/doxygen/html/classxb_1_1xbTblMgr.html80
-rw-r--r--docs/doxygen/html/classxb_1_1xbXBase.html88
-rw-r--r--docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html6
-rw-r--r--docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html8
-rw-r--r--docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html2
-rw-r--r--docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html2
-rw-r--r--docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html2
-rw-r--r--docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html4
-rw-r--r--docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html2
-rw-r--r--docs/doxygen/html/files.html56
-rw-r--r--docs/doxygen/html/functions_b.html1
-rw-r--r--docs/doxygen/html/functions_d.html4
-rw-r--r--docs/doxygen/html/functions_func_b.html1
-rw-r--r--docs/doxygen/html/functions_func_d.html4
-rw-r--r--docs/doxygen/html/functions_func_g.html3
-rw-r--r--docs/doxygen/html/functions_func_m.html2
-rw-r--r--docs/doxygen/html/functions_func_o.html2
-rw-r--r--docs/doxygen/html/functions_func_r.html2
-rw-r--r--docs/doxygen/html/functions_g.html3
-rw-r--r--docs/doxygen/html/functions_m.html2
-rw-r--r--docs/doxygen/html/functions_o.html2
-rw-r--r--docs/doxygen/html/functions_r.html2
-rw-r--r--docs/doxygen/html/functions_x.html2
-rw-r--r--docs/doxygen/html/globals.html12
-rw-r--r--docs/doxygen/html/globals_func.html12
-rw-r--r--docs/doxygen/html/menudata.js6
-rw-r--r--docs/doxygen/html/search/all_0.js2
-rw-r--r--docs/doxygen/html/search/all_1.js5
-rw-r--r--docs/doxygen/html/search/all_12.js3
-rw-r--r--docs/doxygen/html/search/all_15.js189
-rw-r--r--docs/doxygen/html/search/all_2.js45
-rw-r--r--docs/doxygen/html/search/all_3.js31
-rw-r--r--docs/doxygen/html/search/all_5.js9
-rw-r--r--docs/doxygen/html/search/all_6.js33
-rw-r--r--docs/doxygen/html/search/all_b.js4
-rw-r--r--docs/doxygen/html/search/all_d.js2
-rw-r--r--docs/doxygen/html/search/all_f.js11
-rw-r--r--docs/doxygen/html/search/files_0.js2
-rw-r--r--docs/doxygen/html/search/files_1.js99
-rw-r--r--docs/doxygen/html/search/functions_0.js2
-rw-r--r--docs/doxygen/html/search/functions_1.js5
-rw-r--r--docs/doxygen/html/search/functions_12.js3
-rw-r--r--docs/doxygen/html/search/functions_15.js2
-rw-r--r--docs/doxygen/html/search/functions_3.js4
-rw-r--r--docs/doxygen/html/search/functions_5.js9
-rw-r--r--docs/doxygen/html/search/functions_6.js33
-rw-r--r--docs/doxygen/html/search/functions_b.js4
-rw-r--r--docs/doxygen/html/search/functions_d.js2
-rw-r--r--docs/doxygen/html/search/functions_f.js6
-rw-r--r--docs/doxygen/html/search/searchdata.js2
-rw-r--r--docs/doxygen/html/structxb_1_1xbSchema.html2
-rw-r--r--docs/doxygen/html/structxb_1_1xbTblList.html2
-rw-r--r--docs/doxygen/html/tstfuncs_8cpp.html50
-rw-r--r--docs/doxygen/html/xb__cfg__check_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__copydbf_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__dbfutil_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__deletall_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__dumpdbt_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__dumphdr_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__dumpix_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__dumprecs_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__date_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__sql_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__string_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__execsql_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__pack_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__tblinfo_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__bcd_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__date_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__expnode_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__expression_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__file_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__filter_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__funcs_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__linklist_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__lock2_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__lock_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__log_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__mdx_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__ndx_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__sql_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__string_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__tblmgr_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__uda_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__test__xbase_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__undelall_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__zap_8cpp.html2
-rw-r--r--docs/doxygen/html/xbalttbl_8cpp.html80
-rw-r--r--docs/doxygen/html/xbase_8h.html2
-rw-r--r--docs/doxygen/html/xbase_8h_source.html68
-rw-r--r--docs/doxygen/html/xbbcd_8cpp.html2
-rw-r--r--docs/doxygen/html/xbbcd_8h.html2
-rw-r--r--docs/doxygen/html/xbbcd_8h_source.html50
-rw-r--r--docs/doxygen/html/xbcrix_8cpp.html2
-rw-r--r--docs/doxygen/html/xbcrtbl_8cpp.html2
-rw-r--r--docs/doxygen/html/xbdate_8cpp.html2
-rw-r--r--docs/doxygen/html/xbdate_8h.html2
-rw-r--r--docs/doxygen/html/xbdate_8h_source.html2
-rw-r--r--docs/doxygen/html/xbdbf3_8cpp.html2
-rw-r--r--docs/doxygen/html/xbdbf4_8cpp.html2
-rw-r--r--docs/doxygen/html/xbdbf_8cpp.html2
-rw-r--r--docs/doxygen/html/xbdbf_8h.html2
-rw-r--r--docs/doxygen/html/xbdbf_8h_source.html674
-rw-r--r--docs/doxygen/html/xbdelete_8cpp.html80
-rw-r--r--docs/doxygen/html/xbdrpix_8cpp.html2
-rw-r--r--docs/doxygen/html/xbdrptbl_8cpp.html2
-rw-r--r--docs/doxygen/html/xbexp_8cpp.html2
-rw-r--r--docs/doxygen/html/xbexp_8h.html2
-rw-r--r--docs/doxygen/html/xbexp_8h_source.html2
-rw-r--r--docs/doxygen/html/xbexpnode_8cpp.html2
-rw-r--r--docs/doxygen/html/xbexpnode_8h.html2
-rw-r--r--docs/doxygen/html/xbexpnode_8h_source.html2
-rw-r--r--docs/doxygen/html/xbfields_8cpp.html2
-rw-r--r--docs/doxygen/html/xbfile_8cpp.html2
-rw-r--r--docs/doxygen/html/xbfile_8h.html2
-rw-r--r--docs/doxygen/html/xbfile_8h_source.html81
-rw-r--r--docs/doxygen/html/xbfilter_8cpp.html2
-rw-r--r--docs/doxygen/html/xbfilter_8h.html2
-rw-r--r--docs/doxygen/html/xbfilter_8h_source.html2
-rw-r--r--docs/doxygen/html/xbfuncs_8cpp.html2
-rw-r--r--docs/doxygen/html/xbindex_8h.html2
-rw-r--r--docs/doxygen/html/xbindex_8h_source.html2
-rw-r--r--docs/doxygen/html/xbinsert_8cpp.html2
-rw-r--r--docs/doxygen/html/xbixbase_8cpp.html2
-rw-r--r--docs/doxygen/html/xbixmdx_8cpp.html2
-rw-r--r--docs/doxygen/html/xbixndx_8cpp.html2
-rw-r--r--docs/doxygen/html/xblnklst_8h.html2
-rw-r--r--docs/doxygen/html/xblnklst_8h_source.html2
-rw-r--r--docs/doxygen/html/xblnklstord_8h.html2
-rw-r--r--docs/doxygen/html/xblnklstord_8h_source.html2
-rw-r--r--docs/doxygen/html/xblnknod_8h.html2
-rw-r--r--docs/doxygen/html/xblnknod_8h_source.html2
-rw-r--r--docs/doxygen/html/xblog_8cpp.html2
-rw-r--r--docs/doxygen/html/xblog_8h.html2
-rw-r--r--docs/doxygen/html/xblog_8h_source.html2
-rw-r--r--docs/doxygen/html/xbmemo3_8cpp.html2
-rw-r--r--docs/doxygen/html/xbmemo4_8cpp.html2
-rw-r--r--docs/doxygen/html/xbmemo_8cpp.html2
-rw-r--r--docs/doxygen/html/xbmemo_8h.html2
-rw-r--r--docs/doxygen/html/xbmemo_8h_source.html265
-rw-r--r--docs/doxygen/html/xbretcod_8h.html2
-rw-r--r--docs/doxygen/html/xbretcod_8h_source.html2
-rw-r--r--docs/doxygen/html/xbset_8cpp.html2
-rw-r--r--docs/doxygen/html/xbsql_8cpp.html2
-rw-r--r--docs/doxygen/html/xbsql_8h.html2
-rw-r--r--docs/doxygen/html/xbsql_8h_source.html57
-rw-r--r--docs/doxygen/html/xbssv_8cpp.html2
-rw-r--r--docs/doxygen/html/xbssv_8h.html2
-rw-r--r--docs/doxygen/html/xbssv_8h_source.html197
-rw-r--r--docs/doxygen/html/xbstring_8cpp.html2
-rw-r--r--docs/doxygen/html/xbstring_8h.html2
-rw-r--r--docs/doxygen/html/xbstring_8h_source.html97
-rw-r--r--docs/doxygen/html/xbtag_8cpp.html2
-rw-r--r--docs/doxygen/html/xbtag_8h.html2
-rw-r--r--docs/doxygen/html/xbtag_8h_source.html2
-rw-r--r--docs/doxygen/html/xbtblmgr_8cpp.html2
-rw-r--r--docs/doxygen/html/xbtblmgr_8h.html2
-rw-r--r--docs/doxygen/html/xbtblmgr_8h_source.html43
-rw-r--r--docs/doxygen/html/xbtypes_8h.html2
-rw-r--r--docs/doxygen/html/xbtypes_8h_source.html2
-rw-r--r--docs/doxygen/html/xbuda_8cpp.html2
-rw-r--r--docs/doxygen/html/xbuda_8h.html2
-rw-r--r--docs/doxygen/html/xbuda_8h_source.html2
-rw-r--r--docs/doxygen/html/xbxbase_8cpp.html2
-rw-r--r--docs/doxygen/html/xbxbase_8h.html2
-rw-r--r--docs/doxygen/html/xbxbase_8h_source.html2
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDate.pdfbin4739 -> 4739 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDate.tex20
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDbf.pdfbin4914 -> 4914 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDbf.tex255
-rw-r--r--docs/doxygen/latex/classxb_1_1xbFile.pdfbin4915 -> 4915 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbFile.tex46
-rw-r--r--docs/doxygen/latex/classxb_1_1xbSsv.pdfbin6100 -> 6100 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbSsv.tex20
-rw-r--r--docs/doxygen/latex/classxb_1_1xbString.tex36
-rw-r--r--docs/doxygen/latex/classxb_1_1xbTblMgr.pdfbin5490 -> 5490 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbTblMgr.tex28
-rw-r--r--docs/doxygen/latex/classxb_1_1xbXBase.pdfbin5492 -> 5492 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbXBase.tex28
-rw-r--r--docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex8
-rw-r--r--docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex10
-rw-r--r--docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex4
-rw-r--r--docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex4
-rw-r--r--docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex4
-rw-r--r--docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex6
-rw-r--r--docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex4
-rw-r--r--docs/doxygen/latex/files.tex200
-rw-r--r--docs/doxygen/latex/refman.tex6
-rw-r--r--docs/doxygen/latex/structxb_1_1xbSchema.tex2
-rw-r--r--docs/doxygen/latex/structxb_1_1xbTblList.tex2
-rw-r--r--docs/doxygen/latex/tstfuncs_8cpp.tex12
-rw-r--r--docs/doxygen/latex/xb__cfg__check_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__copydbf_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__dbfutil_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__deletall_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__dumpdbt_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__dumphdr_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__dumpix_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__dumprecs_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__date_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__sql_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__string_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__execsql_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__pack_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__tblinfo_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__bcd_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__date_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__expnode_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__expression_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__file_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__filter_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__funcs_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__linklist_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__lock2_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__lock_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__log_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__mdx_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__ndx_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__sql_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__string_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__tblmgr_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__uda_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__test__xbase_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__undelall_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__zap_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbalttbl_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbase_8h.tex4
-rw-r--r--docs/doxygen/latex/xbase_8h_source.tex68
-rw-r--r--docs/doxygen/latex/xbbcd_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbbcd_8h.tex4
-rw-r--r--docs/doxygen/latex/xbbcd_8h_source.tex50
-rw-r--r--docs/doxygen/latex/xbcrix_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbcrtbl_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbdate_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbdate_8h.tex4
-rw-r--r--docs/doxygen/latex/xbdate_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbdbf3_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbdbf4_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbdbf_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbdbf_8h.tex4
-rw-r--r--docs/doxygen/latex/xbdbf_8h_source.tex663
-rw-r--r--docs/doxygen/latex/xbdelete_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbdrpix_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbdrptbl_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbexp_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbexp_8h.tex4
-rw-r--r--docs/doxygen/latex/xbexp_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbexpnode_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbexpnode_8h.tex4
-rw-r--r--docs/doxygen/latex/xbexpnode_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbfields_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbfile_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbfile_8h.tex4
-rw-r--r--docs/doxygen/latex/xbfile_8h_source.tex79
-rw-r--r--docs/doxygen/latex/xbfilter_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbfilter_8h.tex4
-rw-r--r--docs/doxygen/latex/xbfilter_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbfuncs_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbindex_8h.tex4
-rw-r--r--docs/doxygen/latex/xbindex_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbinsert_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbixbase_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbixmdx_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbixndx_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xblnklst_8h.tex4
-rw-r--r--docs/doxygen/latex/xblnklst_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xblnklstord_8h.tex4
-rw-r--r--docs/doxygen/latex/xblnklstord_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xblnknod_8h.tex4
-rw-r--r--docs/doxygen/latex/xblnknod_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xblog_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xblog_8h.tex4
-rw-r--r--docs/doxygen/latex/xblog_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbmemo3_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbmemo4_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbmemo_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbmemo_8h.tex4
-rw-r--r--docs/doxygen/latex/xbmemo_8h_source.tex265
-rw-r--r--docs/doxygen/latex/xbretcod_8h.tex4
-rw-r--r--docs/doxygen/latex/xbretcod_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbset_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbsql_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbsql_8h.tex4
-rw-r--r--docs/doxygen/latex/xbsql_8h_source.tex57
-rw-r--r--docs/doxygen/latex/xbssv_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbssv_8h.tex4
-rw-r--r--docs/doxygen/latex/xbssv_8h_source.tex193
-rw-r--r--docs/doxygen/latex/xbstring_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbstring_8h.tex4
-rw-r--r--docs/doxygen/latex/xbstring_8h_source.tex97
-rw-r--r--docs/doxygen/latex/xbtag_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbtag_8h.tex4
-rw-r--r--docs/doxygen/latex/xbtag_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbtblmgr_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbtblmgr_8h.tex4
-rw-r--r--docs/doxygen/latex/xbtblmgr_8h_source.tex43
-rw-r--r--docs/doxygen/latex/xbtypes_8h.tex4
-rw-r--r--docs/doxygen/latex/xbtypes_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbuda_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbuda_8h.tex4
-rw-r--r--docs/doxygen/latex/xbuda_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbxbase_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbxbase_8h.tex4
-rw-r--r--docs/doxygen/latex/xbxbase_8h_source.tex2
-rwxr-xr-xdocs/howto/AddNewMemoFileType.txt9
-rwxr-xr-xdocs/html/Xbase64ClassDiagram.jpgbin0 -> 93778 bytes
-rwxr-xr-xdocs/html/gpl-3.0.txt674
-rwxr-xr-xdocs/html/index.htm33
-rwxr-xr-xdocs/html/index.html43
-rwxr-xr-xdocs/html/xbab.html (renamed from docs/html/xbbib.htm)8
-rwxr-xr-xdocs/html/xbac.html102
-rwxr-xr-xdocs/html/xbad.html27
-rwxr-xr-xdocs/html/xbae.html94
-rwxr-xr-xdocs/html/xbaf.html (renamed from docs/html/xbc15.htm)29
-rwxr-xr-xdocs/html/xbc1.html (renamed from docs/html/xbc1.htm)22
-rwxr-xr-xdocs/html/xbc10.html (renamed from docs/html/xbc10.htm)0
-rwxr-xr-xdocs/html/xbc11.html (renamed from docs/html/xbc11.htm)0
-rwxr-xr-xdocs/html/xbc12.html (renamed from docs/html/xbc12.htm)28
-rwxr-xr-xdocs/html/xbc13.html (renamed from docs/html/xbc13.htm)0
-rwxr-xr-xdocs/html/xbc14.htm12
-rwxr-xr-xdocs/html/xbc14.html113
-rwxr-xr-xdocs/html/xbc15.html51
-rwxr-xr-xdocs/html/xbc2.html (renamed from docs/html/xbc2.htm)0
-rwxr-xr-xdocs/html/xbc3.html (renamed from docs/html/xbc3.htm)0
-rwxr-xr-xdocs/html/xbc4.html (renamed from docs/html/xbc4.htm)5
-rwxr-xr-xdocs/html/xbc5.html (renamed from docs/html/xbc5.htm)17
-rwxr-xr-xdocs/html/xbc6.html (renamed from docs/html/xbc6.htm)18
-rwxr-xr-xdocs/html/xbc7.html (renamed from docs/html/xbc7.htm)0
-rwxr-xr-xdocs/html/xbc8.html (renamed from docs/html/xbc8.htm)2
-rwxr-xr-xdocs/html/xbc9.html (renamed from docs/html/xbc9.htm)1
-rw-r--r--logs/Linux_x64.xbLog.txt254
-rwxr-xr-xsql/droptbl.sql (renamed from sql/del.sql)0
-rwxr-xr-xsrc/core/xbbcd.cpp39
-rwxr-xr-xsrc/core/xbdbf.cpp770
-rwxr-xr-xsrc/core/xbdbf3.cpp272
-rwxr-xr-xsrc/core/xbdbf4.cpp357
-rwxr-xr-xsrc/core/xbexp.cpp125
-rwxr-xr-xsrc/core/xbfields.cpp56
-rwxr-xr-xsrc/core/xbfile.cpp103
-rwxr-xr-xsrc/core/xbfilter.cpp111
-rwxr-xr-xsrc/core/xbixbase.cpp17
-rwxr-xr-xsrc/core/xbixmdx.cpp64
-rwxr-xr-xsrc/core/xbixndx.cpp251
-rwxr-xr-xsrc/core/xbmemo.cpp12
-rwxr-xr-xsrc/core/xbmemo3.cpp109
-rwxr-xr-xsrc/core/xbmemo4.cpp245
-rwxr-xr-xsrc/core/xbssv.cpp2
-rwxr-xr-xsrc/core/xbstring.cpp55
-rwxr-xr-xsrc/core/xbtblmgr.cpp31
-rwxr-xr-xsrc/core/xbxbase.cpp53
-rwxr-xr-xsrc/examples/xb_ex_expression.cpp230
-rwxr-xr-xsrc/examples/xb_ex_string.cpp73
-rwxr-xr-xsrc/examples/xb_ex_v4_create_dbf.cpp42
-rwxr-xr-xsrc/examples/xb_ex_v4_upd_dbf.cpp173
-rwxr-xr-xsrc/include/xbase.h2
-rwxr-xr-xsrc/include/xbbcd.h2
-rwxr-xr-xsrc/include/xbconfig.h.in2
-rwxr-xr-xsrc/include/xbdbf.h51
-rwxr-xr-xsrc/include/xbfile.h1
-rwxr-xr-xsrc/include/xbmemo.h41
-rwxr-xr-xsrc/include/xbsql.h26
-rwxr-xr-xsrc/include/xbssv.h3
-rwxr-xr-xsrc/include/xbstring.h5
-rwxr-xr-xsrc/include/xbtblmgr.h17
-rwxr-xr-xsrc/sql/xbalttbl.cpp125
-rwxr-xr-xsrc/sql/xbcrix.cpp60
-rwxr-xr-xsrc/sql/xbcrtbl.cpp2
-rwxr-xr-xsrc/sql/xbdelete.cpp148
-rwxr-xr-xsrc/sql/xbdrpix.cpp38
-rwxr-xr-xsrc/sql/xbinsert.cpp32
-rwxr-xr-xsrc/sql/xbselect.cpp92
-rwxr-xr-xsrc/sql/xbsql.cpp62
-rwxr-xr-xsrc/tests/tstfuncs.cpp18
-rwxr-xr-xsrc/tests/xb_test_dbf_v3_memos.cpp34
-rwxr-xr-xsrc/tests/xb_test_dbf_v3_nomemos.cpp4
-rwxr-xr-xsrc/tests/xb_test_dbf_v4_memos.cpp26
-rwxr-xr-xsrc/tests/xb_test_dbf_v4_nomemos.cpp8
-rwxr-xr-xsrc/tests/xb_test_expression.cpp14
-rwxr-xr-xsrc/tests/xb_test_file.cpp24
-rwxr-xr-xsrc/tests/xb_test_filter.cpp100
-rwxr-xr-xsrc/tests/xb_test_funcs.cpp4
-rwxr-xr-xsrc/tests/xb_test_mdx.cpp17
-rwxr-xr-xsrc/tests/xb_test_ndx.cpp92
-rwxr-xr-xsrc/tests/xb_test_ndx2.cpp145
-rwxr-xr-xsrc/tests/xb_test_sql.cpp95
-rwxr-xr-xsrc/tests/xb_test_string.cpp15
-rwxr-xr-xsrc/tests/xb_test_tblmgr.cpp14
-rwxr-xr-xsrc/tests/xb_test_xbase.cpp14
-rwxr-xr-xsrc/utils/checkndx.cpp71
-rwxr-xr-xsrc/utils/dbfxtrct.cpp182
-rwxr-xr-xsrc/utils/preamble.txt19
-rwxr-xr-xsrc/utils/reindex.cpp83
-rwxr-xr-xsrc/utils/xb_dbfutil.cpp87
-rwxr-xr-xsrc/utils/xb_pack.cpp13
-rwxr-xr-xsrc/utils/xb_tblinfo.cpp18
452 files changed, 7945 insertions, 5156 deletions
diff --git a/AUTHORS b/AUTHORS
index 16b8731..55cd46a 100755
--- a/AUTHORS
+++ b/AUTHORS
Binary files differ
diff --git a/INSTALL b/INSTALL
index 31815e0..20ced28 100755
--- a/INSTALL
+++ b/INSTALL
@@ -3,4 +3,4 @@ Basic Installation
See Chapter 1 in the manual on getting started.
-docs/html/xbc1.htm
+docs/html/xbc1.html
diff --git a/NEWS b/NEWS
index 66fd658..60fdc49 100755
--- a/NEWS
+++ b/NEWS
@@ -1,13 +1,29 @@
-Xbase64 (Nov 27, 2022)
+Xbase64 (Dec 26, 2022)
------------------------
-The library has been refreshed with release 4.0.1
+
+
+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 Rerwrite of core library.
+
+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.
@@ -20,7 +36,13 @@ The library has been refreshed with release 4.0.1
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.
diff --git a/README b/README
index 5ba316c..bea1789 100755
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
- Xbase64 Version 4.0.1
- 11/28/22
+ Xbase64 Version 4.0.3
+ 12/26/22
WHAT IS IT?
@@ -35,12 +35,11 @@ DIRECTORY LAYOUT
Starting point
--------------
- docs/html/index.htm
+ docs/html/index.html
-Please email comments, bug reports, and patches to Gary Kunkel
-xdb-dev@lists.sourceforge.net
+Please email comments, bug reports, and patches to xdb-dev@lists.sourceforge.net
diff --git a/TODO b/TODO
index f700fb0..13310dd 100755
--- a/TODO
+++ b/TODO
@@ -18,7 +18,7 @@ Xbase64 TODO's (not necessarily in this order!)
4) Transaction support
- Create a logging routine -
+ Create a logging routine
put hooks in the PutRecord function to log data
diff --git a/build/borland5.5/CMakeLists.txt b/build/borland5.5/CMakeLists.txt
index 0a192b8..516b9c9 100755
--- a/build/borland5.5/CMakeLists.txt
+++ b/build/borland5.5/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 3 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
@@ -167,7 +167,7 @@ option( XB_EXPRESSION_SUPPORT "Compile Expression support into library"
option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
-option( XB_NDXINF_SUPPORT "Compile NDX INF file 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)
@@ -183,10 +183,10 @@ Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDXINF_SUPPORT " ${XB_NDXINF_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
@@ -313,10 +313,10 @@ IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+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" )
@@ -334,10 +334,26 @@ IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ 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 )
+
+
# Build configuration header file
configure_file (
@@ -420,13 +436,16 @@ IF( XB_MDX_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ 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/xbselect.cpp )
ENDIF( XB_SQL_SUPPORT )
@@ -523,18 +542,19 @@ 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 )
-add_executable( xb_test_ndx2 ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx2.cpp )
-target_link_libraries( xb_test_ndx2 ${EXTRA_LIBS})
-add_test( NAME xbIxNdx2 COMMAND xb_test_ndx2 QUIET )
+ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
IF( XB_MDX_SUPPORT )
+IF( XB_DBF4_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_INDEX_SUPPORT )
@@ -603,10 +623,16 @@ IF( XB_EXAMPLES_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})
- ENDIF( XB_DBF4_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -663,7 +689,11 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
install (TARGETS xb_zap DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
ENDIF( XB_UTILS_SUPPORT )
@@ -694,8 +724,7 @@ install (FILES include/xbconfig.h
DESTINATION include/${CMAKE_PROJECT_NAME})
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
-#SET_TARGET_PROPERTIES( ${CMAKE_PROJECT_NAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
IF( EXISTS /usr/local/lib64 )
install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt
index 0a192b8..516b9c9 100755
--- a/build/cmake/CMakeLists.txt
+++ b/build/cmake/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 3 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
@@ -167,7 +167,7 @@ option( XB_EXPRESSION_SUPPORT "Compile Expression support into library"
option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
-option( XB_NDXINF_SUPPORT "Compile NDX INF file 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)
@@ -183,10 +183,10 @@ Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDXINF_SUPPORT " ${XB_NDXINF_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
@@ -313,10 +313,10 @@ IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+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" )
@@ -334,10 +334,26 @@ IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ 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 )
+
+
# Build configuration header file
configure_file (
@@ -420,13 +436,16 @@ IF( XB_MDX_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ 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/xbselect.cpp )
ENDIF( XB_SQL_SUPPORT )
@@ -523,18 +542,19 @@ 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 )
-add_executable( xb_test_ndx2 ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx2.cpp )
-target_link_libraries( xb_test_ndx2 ${EXTRA_LIBS})
-add_test( NAME xbIxNdx2 COMMAND xb_test_ndx2 QUIET )
+ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
IF( XB_MDX_SUPPORT )
+IF( XB_DBF4_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_INDEX_SUPPORT )
@@ -603,10 +623,16 @@ IF( XB_EXAMPLES_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})
- ENDIF( XB_DBF4_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -663,7 +689,11 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
install (TARGETS xb_zap DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
ENDIF( XB_UTILS_SUPPORT )
@@ -694,8 +724,7 @@ install (FILES include/xbconfig.h
DESTINATION include/${CMAKE_PROJECT_NAME})
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
-#SET_TARGET_PROPERTIES( ${CMAKE_PROJECT_NAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
IF( EXISTS /usr/local/lib64 )
install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
diff --git a/build/linux32/CMakeLists.txt b/build/linux32/CMakeLists.txt
index 0a192b8..516b9c9 100755
--- a/build/linux32/CMakeLists.txt
+++ b/build/linux32/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 3 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
@@ -167,7 +167,7 @@ option( XB_EXPRESSION_SUPPORT "Compile Expression support into library"
option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
-option( XB_NDXINF_SUPPORT "Compile NDX INF file 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)
@@ -183,10 +183,10 @@ Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDXINF_SUPPORT " ${XB_NDXINF_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
@@ -313,10 +313,10 @@ IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+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" )
@@ -334,10 +334,26 @@ IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ 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 )
+
+
# Build configuration header file
configure_file (
@@ -420,13 +436,16 @@ IF( XB_MDX_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ 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/xbselect.cpp )
ENDIF( XB_SQL_SUPPORT )
@@ -523,18 +542,19 @@ 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 )
-add_executable( xb_test_ndx2 ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx2.cpp )
-target_link_libraries( xb_test_ndx2 ${EXTRA_LIBS})
-add_test( NAME xbIxNdx2 COMMAND xb_test_ndx2 QUIET )
+ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
IF( XB_MDX_SUPPORT )
+IF( XB_DBF4_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_INDEX_SUPPORT )
@@ -603,10 +623,16 @@ IF( XB_EXAMPLES_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})
- ENDIF( XB_DBF4_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -663,7 +689,11 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
install (TARGETS xb_zap DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
ENDIF( XB_UTILS_SUPPORT )
@@ -694,8 +724,7 @@ install (FILES include/xbconfig.h
DESTINATION include/${CMAKE_PROJECT_NAME})
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
-#SET_TARGET_PROPERTIES( ${CMAKE_PROJECT_NAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
IF( EXISTS /usr/local/lib64 )
install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
diff --git a/build/linux64/CMakeLists.txt b/build/linux64/CMakeLists.txt
index beac984..516b9c9 100755
--- a/build/linux64/CMakeLists.txt
+++ b/build/linux64/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 3 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
@@ -167,7 +167,7 @@ option( XB_EXPRESSION_SUPPORT "Compile Expression support into library"
option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
-option( XB_NDXINF_SUPPORT "Compile NDX INF file 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)
@@ -183,10 +183,10 @@ Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDXINF_SUPPORT " ${XB_NDXINF_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
@@ -313,10 +313,10 @@ IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+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" )
@@ -334,10 +334,26 @@ IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ 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 )
+
+
# Build configuration header file
configure_file (
@@ -420,13 +436,16 @@ IF( XB_MDX_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ 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/xbselect.cpp )
ENDIF( XB_SQL_SUPPORT )
@@ -523,18 +542,19 @@ 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 )
-add_executable( xb_test_ndx2 ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx2.cpp )
-target_link_libraries( xb_test_ndx2 ${EXTRA_LIBS})
-add_test( NAME xbIxNdx2 COMMAND xb_test_ndx2 QUIET )
+ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
IF( XB_MDX_SUPPORT )
+IF( XB_DBF4_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_INDEX_SUPPORT )
@@ -603,10 +623,16 @@ IF( XB_EXAMPLES_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})
- ENDIF( XB_DBF4_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -663,7 +689,11 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
install (TARGETS xb_zap DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
ENDIF( XB_UTILS_SUPPORT )
@@ -694,7 +724,7 @@ install (FILES include/xbconfig.h
DESTINATION include/${CMAKE_PROJECT_NAME})
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.0 SOVERSION 0 )
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
IF( EXISTS /usr/local/lib64 )
install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
diff --git a/build/mac64/CMakeLists.txt b/build/mac64/CMakeLists.txt
index 0a192b8..516b9c9 100755
--- a/build/mac64/CMakeLists.txt
+++ b/build/mac64/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 3 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
@@ -167,7 +167,7 @@ option( XB_EXPRESSION_SUPPORT "Compile Expression support into library"
option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
-option( XB_NDXINF_SUPPORT "Compile NDX INF file 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)
@@ -183,10 +183,10 @@ Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDXINF_SUPPORT " ${XB_NDXINF_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
@@ -313,10 +313,10 @@ IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+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" )
@@ -334,10 +334,26 @@ IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ 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 )
+
+
# Build configuration header file
configure_file (
@@ -420,13 +436,16 @@ IF( XB_MDX_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ 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/xbselect.cpp )
ENDIF( XB_SQL_SUPPORT )
@@ -523,18 +542,19 @@ 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 )
-add_executable( xb_test_ndx2 ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx2.cpp )
-target_link_libraries( xb_test_ndx2 ${EXTRA_LIBS})
-add_test( NAME xbIxNdx2 COMMAND xb_test_ndx2 QUIET )
+ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
IF( XB_MDX_SUPPORT )
+IF( XB_DBF4_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_INDEX_SUPPORT )
@@ -603,10 +623,16 @@ IF( XB_EXAMPLES_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})
- ENDIF( XB_DBF4_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -663,7 +689,11 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
install (TARGETS xb_zap DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
ENDIF( XB_UTILS_SUPPORT )
@@ -694,8 +724,7 @@ install (FILES include/xbconfig.h
DESTINATION include/${CMAKE_PROJECT_NAME})
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
-#SET_TARGET_PROPERTIES( ${CMAKE_PROJECT_NAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
IF( EXISTS /usr/local/lib64 )
install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
diff --git a/build/win32vs/CMakeLists.txt b/build/win32vs/CMakeLists.txt
index 0a192b8..516b9c9 100755
--- a/build/win32vs/CMakeLists.txt
+++ b/build/win32vs/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 3 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
@@ -167,7 +167,7 @@ option( XB_EXPRESSION_SUPPORT "Compile Expression support into library"
option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
-option( XB_NDXINF_SUPPORT "Compile NDX INF file 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)
@@ -183,10 +183,10 @@ Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDXINF_SUPPORT " ${XB_NDXINF_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
@@ -313,10 +313,10 @@ IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+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" )
@@ -334,10 +334,26 @@ IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ 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 )
+
+
# Build configuration header file
configure_file (
@@ -420,13 +436,16 @@ IF( XB_MDX_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ 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/xbselect.cpp )
ENDIF( XB_SQL_SUPPORT )
@@ -523,18 +542,19 @@ 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 )
-add_executable( xb_test_ndx2 ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx2.cpp )
-target_link_libraries( xb_test_ndx2 ${EXTRA_LIBS})
-add_test( NAME xbIxNdx2 COMMAND xb_test_ndx2 QUIET )
+ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
IF( XB_MDX_SUPPORT )
+IF( XB_DBF4_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_INDEX_SUPPORT )
@@ -603,10 +623,16 @@ IF( XB_EXAMPLES_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})
- ENDIF( XB_DBF4_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -663,7 +689,11 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
install (TARGETS xb_zap DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
ENDIF( XB_UTILS_SUPPORT )
@@ -694,8 +724,7 @@ install (FILES include/xbconfig.h
DESTINATION include/${CMAKE_PROJECT_NAME})
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
-#SET_TARGET_PROPERTIES( ${CMAKE_PROJECT_NAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
IF( EXISTS /usr/local/lib64 )
install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
diff --git a/build/win64vs/CMakeLists.txt b/build/win64vs/CMakeLists.txt
index 0a192b8..516b9c9 100755
--- a/build/win64vs/CMakeLists.txt
+++ b/build/win64vs/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 3 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
@@ -167,7 +167,7 @@ option( XB_EXPRESSION_SUPPORT "Compile Expression support into library"
option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
-option( XB_NDXINF_SUPPORT "Compile NDX INF file 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)
@@ -183,10 +183,10 @@ Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDXINF_SUPPORT " ${XB_NDXINF_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
@@ -313,10 +313,10 @@ IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_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_DBF_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+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" )
@@ -334,10 +334,26 @@ IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ 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 )
+
+
# Build configuration header file
configure_file (
@@ -420,13 +436,16 @@ IF( XB_MDX_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ 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/xbselect.cpp )
ENDIF( XB_SQL_SUPPORT )
@@ -523,18 +542,19 @@ 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 )
-add_executable( xb_test_ndx2 ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx2.cpp )
-target_link_libraries( xb_test_ndx2 ${EXTRA_LIBS})
-add_test( NAME xbIxNdx2 COMMAND xb_test_ndx2 QUIET )
+ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
IF( XB_MDX_SUPPORT )
+IF( XB_DBF4_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
IF( XB_INDEX_SUPPORT )
@@ -603,10 +623,16 @@ IF( XB_EXAMPLES_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})
- ENDIF( XB_DBF4_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -663,7 +689,11 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
install (TARGETS xb_zap DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
ENDIF( XB_UTILS_SUPPORT )
@@ -694,8 +724,7 @@ install (FILES include/xbconfig.h
DESTINATION include/${CMAKE_PROJECT_NAME})
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
-#SET_TARGET_PROPERTIES( ${CMAKE_PROJECT_NAME} PROPERTIES VERSION 1.0.0 SOVERSION 0 )
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
IF( EXISTS /usr/local/lib64 )
install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
diff --git a/data/CopyStructureV3NoMemos.DBF b/data/CopyStructureV3NoMemos.DBF
deleted file mode 100644
index 341e667..0000000
--- a/data/CopyStructureV3NoMemos.DBF
+++ /dev/null
Binary files differ
diff --git a/data/CopyStructureV4NoMemos.DBF b/data/CopyStructureV4NoMemos.DBF
deleted file mode 100644
index 1e27a29..0000000
--- a/data/CopyStructureV4NoMemos.DBF
+++ /dev/null
Binary files differ
diff --git a/data/ExpTest.DBF b/data/ExpTest.DBF
deleted file mode 100644
index d9eb058..0000000
--- a/data/ExpTest.DBF
+++ /dev/null
Binary files differ
diff --git a/data/Functest.DBF b/data/Functest.DBF
deleted file mode 100644
index f5988c4..0000000
--- a/data/Functest.DBF
+++ /dev/null
Binary files differ
diff --git a/data/LockTest.DBF b/data/LockTest.DBF
deleted file mode 100644
index 26e138a..0000000
--- a/data/LockTest.DBF
+++ /dev/null
Binary files differ
diff --git a/data/LockTest.DBT b/data/LockTest.DBT
deleted file mode 100644
index 9fc546e..0000000
--- a/data/LockTest.DBT
+++ /dev/null
Binary files differ
diff --git a/data/TMDXDB01.DBF b/data/TMDXDB01.DBF
deleted file mode 100644
index 0f1124b..0000000
--- a/data/TMDXDB01.DBF
+++ /dev/null
Binary files differ
diff --git a/data/TMDXDB01.MDX b/data/TMDXDB01.MDX
deleted file mode 100644
index 1e0119d..0000000
--- a/data/TMDXDB01.MDX
+++ /dev/null
Binary files differ
diff --git a/data/TestFilt.DBF b/data/TestFilt.DBF
deleted file mode 100644
index 0691389..0000000
--- a/data/TestFilt.DBF
+++ /dev/null
Binary files differ
diff --git a/data/TestFilt.NDX b/data/TestFilt.NDX
deleted file mode 100644
index e2c76fd..0000000
--- a/data/TestFilt.NDX
+++ /dev/null
Binary files differ
diff --git a/data/TestNdx.DBF b/data/TestNdx.DBF
deleted file mode 100644
index 1b54b95..0000000
--- a/data/TestNdx.DBF
+++ /dev/null
Binary files differ
diff --git a/data/TestNdx.INF b/data/TestNdx.INF
deleted file mode 100644
index cb4ba66..0000000
--- a/data/TestNdx.INF
+++ /dev/null
@@ -1,5 +0,0 @@
-[dbase]
-NDX=TestNdxC.NDX
-NDX1=TestNdxD.NDX
-NDX2=TestNdxN.NDX
-
diff --git a/data/TestNdxC.NDX b/data/TestNdxC.NDX
deleted file mode 100644
index d8afd5f..0000000
--- a/data/TestNdxC.NDX
+++ /dev/null
Binary files differ
diff --git a/data/TestNdxD.NDX b/data/TestNdxD.NDX
deleted file mode 100644
index 647c3b8..0000000
--- a/data/TestNdxD.NDX
+++ /dev/null
Binary files differ
diff --git a/data/TestNdxN.NDX b/data/TestNdxN.NDX
deleted file mode 100644
index 7bc71a3..0000000
--- a/data/TestNdxN.NDX
+++ /dev/null
Binary files differ
diff --git a/data/TestSQL.DBF b/data/TestSQL.DBF
deleted file mode 100644
index 34bb7b2..0000000
--- a/data/TestSQL.DBF
+++ /dev/null
Binary files differ
diff --git a/data/TestSQL.DBT b/data/TestSQL.DBT
deleted file mode 100644
index f457ac8..0000000
--- a/data/TestSQL.DBT
+++ /dev/null
Binary files differ
diff --git a/data/TestV3.DBF b/data/TestV3.DBF
deleted file mode 100644
index 341e667..0000000
--- a/data/TestV3.DBF
+++ /dev/null
Binary files differ
diff --git a/data/TestV3_memos.DBF b/data/TestV3_memos.DBF
deleted file mode 100644
index 4c731d6..0000000
--- a/data/TestV3_memos.DBF
+++ /dev/null
Binary files differ
diff --git a/data/TestV3_memos.DBT b/data/TestV3_memos.DBT
deleted file mode 100644
index 48dc068..0000000
--- a/data/TestV3_memos.DBT
+++ /dev/null
Binary files differ
diff --git a/data/TestV4.DBF b/data/TestV4.DBF
deleted file mode 100644
index 0fbd2cd..0000000
--- a/data/TestV4.DBF
+++ /dev/null
Binary files differ
diff --git a/data/TestV4_memos.DBF b/data/TestV4_memos.DBF
deleted file mode 100644
index bcf0609..0000000
--- a/data/TestV4_memos.DBF
+++ /dev/null
Binary files differ
diff --git a/data/TestV4_memos.DBT b/data/TestV4_memos.DBT
deleted file mode 100644
index c7b5526..0000000
--- a/data/TestV4_memos.DBT
+++ /dev/null
Binary files differ
diff --git a/data/xbfile.txt b/data/xbfile.txt
deleted file mode 100644
index cb8d0ca..0000000
--- a/data/xbfile.txt
+++ /dev/null
@@ -1 +0,0 @@
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB \ No newline at end of file
diff --git a/docs/doxygen/html/classxb_1_1xbDate.html b/docs/doxygen/html/classxb_1_1xbDate.html
index 5e193da..80dcc57 100644
--- a/docs/doxygen/html/classxb_1_1xbDate.html
+++ b/docs/doxygen/html/classxb_1_1xbDate.html
@@ -225,6 +225,10 @@ Public Member Functions</h2></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>
@@ -396,6 +400,58 @@ Static Protected Attributes</h2></td></tr>
</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>
@@ -1808,8 +1864,8 @@ XB_INVALID_DATE </dd></dl>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/include/<a class="el" href="xbdate_8h_source.html">xbdate.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/core/<a class="el" href="xbdate_8cpp.html">xbdate.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/<a class="el" href="xbdate_8h_source.html">xbdate.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/<a class="el" href="xbdate_8cpp.html">xbdate.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbDbf.html b/docs/doxygen/html/classxb_1_1xbDbf.html
index 14e02ca..d532bc4 100644
--- a/docs/doxygen/html/classxb_1_1xbDbf.html
+++ b/docs/doxygen/html/classxb_1_1xbDbf.html
@@ -132,10 +132,12 @@ Public Member Functions</h2></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:ab1f4a515533402f872cedcd0322aabd4"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ab1f4a515533402f872cedcd0322aabd4">DumpHeader</a> (xbInt16 iOption) const</td></tr>
-<tr class="separator:ab1f4a515533402f872cedcd0322aabd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3a6a068addffd06fc9a996639d6ca69e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a3a6a068addffd06fc9a996639d6ca69e">DumpRecord</a> (xbUInt32 ulRecNo, xbInt16 iOutputDest=0, xbInt16 iOutputFmt=0)</td></tr>
-<tr class="separator:a3a6a068addffd06fc9a996639d6ca69e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a309b5b1fb6a5c048c4bfb404d011ac55"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55">DumpHeader</a> (xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a309b5b1fb6a5c048c4bfb404d011ac55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump dbf file header. <a href="classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55">More...</a><br /></td></tr>
+<tr class="separator:a309b5b1fb6a5c048c4bfb404d011ac55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba30399f15885a07f87f904c0d0656fa"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">DumpRecord</a> (xbUInt32 ulRecNo, xbInt16 iOutputDest=0, xbInt16 iOutputFmt=0)</td></tr>
+<tr class="memdesc:aba30399f15885a07f87f904c0d0656fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump record. <a href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">More...</a><br /></td></tr>
+<tr class="separator:aba30399f15885a07f87f904c0d0656fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb9e20c5efacd4fea80f1515abbc6b55"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55">GetAutoCommit</a> () const</td></tr>
<tr class="memdesc:abb9e20c5efacd4fea80f1515abbc6b55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get auto commit setting. <a href="classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55">More...</a><br /></td></tr>
<tr class="separator:abb9e20c5efacd4fea80f1515abbc6b55"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -143,7 +145,7 @@ Public Member Functions</h2></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: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">Get Auto Lock setting. <a href="classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503">More...</a><br /></td></tr>
+<tr class="memdesc:a643a80a3792a52760c8e09ba18719503"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the current index object. <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>
@@ -172,8 +174,6 @@ Public Member Functions</h2></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:a13393704a8a191d4d6555ae31d3c3e92"><td class="memItemLeft" align="right" valign="top">virtual xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a13393704a8a191d4d6555ae31d3c3e92">GetPhysicalIxCnt</a> () const</td></tr>
-<tr class="separator:a13393704a8a191d4d6555ae31d3c3e92"><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>
@@ -183,6 +183,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a26fba086b07caeab95066bf1c8d25161"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">GetRecord</a> (xbUInt32 ulRecNo)</td></tr>
<tr class="memdesc:a26fba086b07caeab95066bf1c8d25161"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get record for specified record number. <a href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">More...</a><br /></td></tr>
<tr class="separator:a26fba086b07caeab95066bf1c8d25161"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0aaa06d6028e75efc6b5131f7356ecce"><td class="memItemLeft" align="right" valign="top">virtual xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce">GetRecordCount</a> ()</td></tr>
+<tr class="memdesc:a0aaa06d6028e75efc6b5131f7356ecce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current number of records in the dbf data file. <a href="classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce">More...</a><br /></td></tr>
+<tr class="separator:a0aaa06d6028e75efc6b5131f7356ecce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac196ad55335e1f4789d698748434dc89"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">GetRecordCnt</a> (xbUInt32 &amp;ulRecCnt)</td></tr>
<tr class="memdesc:ac196ad55335e1f4789d698748434dc89"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current number of records in the dbf data file. <a href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">More...</a><br /></td></tr>
<tr class="separator:ac196ad55335e1f4789d698748434dc89"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -200,12 +203,15 @@ Public Member Functions</h2></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:ac856fc1b110b46aefa1b2f5c0f530aa2"><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#ac856fc1b110b46aefa1b2f5c0f530aa2">MemoFieldsExist</a> () const</td></tr>
-<tr class="separator:ac856fc1b110b46aefa1b2f5c0f530aa2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a97366c7362e409d7f09973a6aef8dad0"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a97366c7362e409d7f09973a6aef8dad0">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName)</td></tr>
-<tr class="separator:a97366c7362e409d7f09973a6aef8dad0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac658818bf9b8f8ff7467d8d80495b324"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ac658818bf9b8f8ff7467d8d80495b324">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="separator:ac658818bf9b8f8ff7467d8d80495b324"><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>
@@ -226,11 +232,13 @@ Public Member Functions</h2></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">Undelete all records. <a href="classxb_1_1xbDbf.html#ae94cb1bf9f75184f39d9e1a80ab49d4a">More...</a><br /></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>
@@ -570,9 +578,6 @@ Public Member Functions</h2></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:ab0b2a2c88947921d98ebcb5b5ec34ed9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab0b2a2c88947921d98ebcb5b5ec34ed9">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, xbInt16 iOption)</td></tr>
-<tr class="memdesc:ab0b2a2c88947921d98ebcb5b5ec34ed9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rename file. <a href="classxb_1_1xbFile.html#ab0b2a2c88947921d98ebcb5b5ec34ed9">More...</a><br /></td></tr>
-<tr class="separator:ab0b2a2c88947921d98ebcb5b5ec34ed9"><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>
@@ -606,6 +611,10 @@ Public Member Functions</h2></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>
@@ -843,6 +852,58 @@ Static Protected Attributes</h2></td></tr>
</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>
@@ -1470,8 +1531,8 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
-<a id="ab1f4a515533402f872cedcd0322aabd4" name="ab1f4a515533402f872cedcd0322aabd4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab1f4a515533402f872cedcd0322aabd4">&#9670;&nbsp;</a></span>DumpHeader()</h2>
+<a id="a309b5b1fb6a5c048c4bfb404d011ac55" name="a309b5b1fb6a5c048c4bfb404d011ac55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a309b5b1fb6a5c048c4bfb404d011ac55">&#9670;&nbsp;</a></span>DumpHeader()</h2>
<div class="memitem">
<div class="memproto">
@@ -1480,7 +1541,7 @@ Static Protected Attributes</h2></td></tr>
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::DumpHeader </td>
+ <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>
@@ -1494,10 +1555,23 @@ Static Protected Attributes</h2></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="a3a6a068addffd06fc9a996639d6ca69e" name="a3a6a068addffd06fc9a996639d6ca69e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3a6a068addffd06fc9a996639d6ca69e">&#9670;&nbsp;</a></span>DumpRecord()</h2>
+<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">
@@ -1506,7 +1580,7 @@ Static Protected Attributes</h2></td></tr>
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::DumpRecord </td>
+ <td class="memname">xbInt16 xb::xbDbf::DumpRecord </td>
<td>(</td>
<td class="paramtype">xbUInt32&#160;</td>
<td class="paramname"><em>ulRecNo</em>, </td>
@@ -1536,6 +1610,23 @@ Static Protected Attributes</h2></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>
@@ -2249,9 +2340,7 @@ Static Protected Attributes</h2></td></tr>
</table>
</div><div class="memdoc">
-<p>Get Auto Lock setting. </p>
-<dl class="section return"><dt>Returns</dt><dd>Auto lock setting.</dd></dl>
-<p>Get a pointer to the current index object.</p>
+<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 the current record number.</p>
<dl class="section return"><dt>Returns</dt><dd>Returns the current record number. </dd></dl>
@@ -4617,31 +4706,6 @@ XB_INVALID_DATA </dd></dl>
</div>
</div>
-<a id="a13393704a8a191d4d6555ae31d3c3e92" name="a13393704a8a191d4d6555ae31d3c3e92"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a13393704a8a191d4d6555ae31d3c3e92">&#9670;&nbsp;</a></span>GetPhysicalIxCnt()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">virtual xbInt32 xb::xbDbf::GetPhysicalIxCnt </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="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>
@@ -4882,6 +4946,34 @@ XB_INVALID_DATA </dd></dl>
</div>
</div>
+<a id="a0aaa06d6028e75efc6b5131f7356ecce" name="a0aaa06d6028e75efc6b5131f7356ecce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0aaa06d6028e75efc6b5131f7356ecce">&#9670;&nbsp;</a></span>GetRecordCount()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 xb::xbDbf::GetRecordCount </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current number of records in the dbf data file. </p>
+<dl class="section return"><dt>Returns</dt><dd>Record count or <a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
<a id="ab50d76c6e29e81e347a6feb04c2f62bb" name="ab50d76c6e29e81e347a6feb04c2f62bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab50d76c6e29e81e347a6feb04c2f62bb">&#9670;&nbsp;</a></span>GetRecordLen()</h2>
@@ -5298,8 +5390,8 @@ XB_INVALID_DATA </dd></dl>
</div>
</div>
-<a id="ac856fc1b110b46aefa1b2f5c0f530aa2" name="ac856fc1b110b46aefa1b2f5c0f530aa2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac856fc1b110b46aefa1b2f5c0f530aa2">&#9670;&nbsp;</a></span>MemoFieldsExist()</h2>
+<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">
@@ -5308,7 +5400,7 @@ XB_INVALID_DATA </dd></dl>
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">virtual <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDbf::MemoFieldsExist </td>
+ <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>
@@ -5321,6 +5413,10 @@ XB_INVALID_DATA </dd></dl>
</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>
@@ -5377,8 +5473,8 @@ XB_INVALID_DATA </dd></dl>
</div>
</div>
-<a id="a97366c7362e409d7f09973a6aef8dad0" name="a97366c7362e409d7f09973a6aef8dad0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a97366c7362e409d7f09973a6aef8dad0">&#9670;&nbsp;</a></span>Open() <span class="overload">[1/3]</span></h2>
+<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">
@@ -5387,7 +5483,7 @@ XB_INVALID_DATA </dd></dl>
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::Open </td>
+ <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>
@@ -5401,10 +5497,20 @@ XB_INVALID_DATA </dd></dl>
</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="ac658818bf9b8f8ff7467d8d80495b324" name="ac658818bf9b8f8ff7467d8d80495b324"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac658818bf9b8f8ff7467d8d80495b324">&#9670;&nbsp;</a></span>Open() <span class="overload">[2/3]</span></h2>
+<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">
@@ -5413,7 +5519,7 @@ XB_INVALID_DATA </dd></dl>
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">virtual xbInt16 xb::xbDbf::Open </td>
+ <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>
@@ -5437,6 +5543,16 @@ XB_INVALID_DATA </dd></dl>
</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>
@@ -6645,6 +6761,32 @@ 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>
@@ -7058,7 +7200,45 @@ xbFalse - Record not deleted. </dd></dl>
</table>
</div><div class="memdoc">
-<p>Undelete all records. </p>
+<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>
@@ -8104,7 +8284,7 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
</div>
</div>
<a id="afc8ce113aa72611a278233f9bb170012" name="afc8ce113aa72611a278233f9bb170012"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afc8ce113aa72611a278233f9bb170012">&#9670;&nbsp;</a></span>xbRename() <span class="overload">[1/2]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#afc8ce113aa72611a278233f9bb170012">&#9670;&nbsp;</a></span>xbRename()</h2>
<div class="memitem">
<div class="memproto">
@@ -8149,59 +8329,6 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
</div>
</div>
-<a id="ab0b2a2c88947921d98ebcb5b5ec34ed9" name="ab0b2a2c88947921d98ebcb5b5ec34ed9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab0b2a2c88947921d98ebcb5b5ec34ed9">&#9670;&nbsp;</a></span>xbRename() <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::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>, </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>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>
- <tr><td class="paramname">iOption</td><td>If Set to 1, assume this is a rename 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="a7996b6e084665c37c3892faea64b3505" name="a7996b6e084665c37c3892faea64b3505"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7996b6e084665c37c3892faea64b3505">&#9670;&nbsp;</a></span>xbRewind()</h2>
@@ -8823,9 +8950,9 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/core/<a class="el" href="xbdbf_8cpp.html">xbdbf.cpp</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/core/<a class="el" href="xbfields_8cpp.html">xbfields.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/<a class="el" href="xbdbf_8cpp.html">xbdbf.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/<a class="el" href="xbfields_8cpp.html">xbfields.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbFile.html b/docs/doxygen/html/classxb_1_1xbFile.html
index c3684e1..b569a52 100644
--- a/docs/doxygen/html/classxb_1_1xbFile.html
+++ b/docs/doxygen/html/classxb_1_1xbFile.html
@@ -300,9 +300,6 @@ Public Member Functions</h2></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:ab0b2a2c88947921d98ebcb5b5ec34ed9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab0b2a2c88947921d98ebcb5b5ec34ed9">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, xbInt16 iOption)</td></tr>
-<tr class="memdesc:ab0b2a2c88947921d98ebcb5b5ec34ed9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Rename file. <a href="classxb_1_1xbFile.html#ab0b2a2c88947921d98ebcb5b5ec34ed9">More...</a><br /></td></tr>
-<tr class="separator:ab0b2a2c88947921d98ebcb5b5ec34ed9"><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>
@@ -336,6 +333,10 @@ Public Member Functions</h2></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>
@@ -429,6 +430,58 @@ Static Protected Attributes</h2></td></tr>
</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>
@@ -3131,7 +3184,7 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
</div>
</div>
<a id="afc8ce113aa72611a278233f9bb170012" name="afc8ce113aa72611a278233f9bb170012"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afc8ce113aa72611a278233f9bb170012">&#9670;&nbsp;</a></span>xbRename() <span class="overload">[1/2]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#afc8ce113aa72611a278233f9bb170012">&#9670;&nbsp;</a></span>xbRename()</h2>
<div class="memitem">
<div class="memproto">
@@ -3168,51 +3221,6 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
</div>
</div>
-<a id="ab0b2a2c88947921d98ebcb5b5ec34ed9" name="ab0b2a2c88947921d98ebcb5b5ec34ed9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab0b2a2c88947921d98ebcb5b5ec34ed9">&#9670;&nbsp;</a></span>xbRename() <span class="overload">[2/2]</span></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>, </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>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>
- <tr><td class="paramname">iOption</td><td>If Set to 1, assume this is a rename 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="a7996b6e084665c37c3892faea64b3505" name="a7996b6e084665c37c3892faea64b3505"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7996b6e084665c37c3892faea64b3505">&#9670;&nbsp;</a></span>xbRewind()</h2>
@@ -3350,8 +3358,8 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/include/<a class="el" href="xbfile_8h_source.html">xbfile.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/core/<a class="el" href="xbfile_8cpp.html">xbfile.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/<a class="el" href="xbfile_8h_source.html">xbfile.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/<a class="el" href="xbfile_8cpp.html">xbfile.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbSsv.html b/docs/doxygen/html/classxb_1_1xbSsv.html
index 38c9d8d..9180d1d 100644
--- a/docs/doxygen/html/classxb_1_1xbSsv.html
+++ b/docs/doxygen/html/classxb_1_1xbSsv.html
@@ -123,6 +123,10 @@ Public Member Functions</h2></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>
@@ -185,6 +189,42 @@ Static Protected Attributes</h2></td></tr>
</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>
@@ -640,8 +680,8 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/include/<a class="el" href="xbssv_8h_source.html">xbssv.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/core/<a class="el" href="xbssv_8cpp.html">xbssv.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/<a class="el" href="xbssv_8h_source.html">xbssv.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/<a class="el" href="xbssv_8cpp.html">xbssv.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbString.html b/docs/doxygen/html/classxb_1_1xbString.html
index 1f771c6..7d509c9 100644
--- a/docs/doxygen/html/classxb_1_1xbString.html
+++ b/docs/doxygen/html/classxb_1_1xbString.html
@@ -192,12 +192,12 @@ Public Member Functions</h2></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:a210707223fffc7b3ab31eca4ef29f731"><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#a210707223fffc7b3ab31eca4ef29f731">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 pos, xbUInt32 n)</td></tr>
-<tr class="memdesc:a210707223fffc7b3ab31eca4ef29f731"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a210707223fffc7b3ab31eca4ef29f731">More...</a><br /></td></tr>
-<tr class="separator:a210707223fffc7b3ab31eca4ef29f731"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab9045442e57293843652dfce6522ff83"><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#ab9045442e57293843652dfce6522ff83">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 n)</td></tr>
-<tr class="memdesc:ab9045442e57293843652dfce6522ff83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#ab9045442e57293843652dfce6522ff83">More...</a><br /></td></tr>
-<tr class="separator:ab9045442e57293843652dfce6522ff83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac6afd224dfbe439ce083c8dd1ad3246c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 pos, xbUInt32 lCopyLen)</td></tr>
+<tr class="memdesc:ac6afd224dfbe439ce083c8dd1ad3246c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c">More...</a><br /></td></tr>
+<tr class="separator:ac6afd224dfbe439ce083c8dd1ad3246c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4f1d709d9f6c56959e8549157b4ee68c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 lCopyLen)</td></tr>
+<tr class="memdesc:a4f1d709d9f6c56959e8549157b4ee68c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c">More...</a><br /></td></tr>
+<tr class="separator:a4f1d709d9f6c56959e8549157b4ee68c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac7a8466b03c04df838bd182ef244f792"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">Copy</a> () const</td></tr>
<tr class="memdesc:ac7a8466b03c04df838bd182ef244f792"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy a string. <a href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">More...</a><br /></td></tr>
<tr class="separator:ac7a8466b03c04df838bd182ef244f792"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -279,6 +279,9 @@ Public Member Functions</h2></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>
@@ -772,8 +775,8 @@ Friends</h2></td></tr>
</div>
</div>
-<a id="ab9045442e57293843652dfce6522ff83" name="ab9045442e57293843652dfce6522ff83"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab9045442e57293843652dfce6522ff83">&#9670;&nbsp;</a></span>Assign() <span class="overload">[3/4]</span></h2>
+<a id="a4f1d709d9f6c56959e8549157b4ee68c" name="a4f1d709d9f6c56959e8549157b4ee68c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4f1d709d9f6c56959e8549157b4ee68c">&#9670;&nbsp;</a></span>Assign() <span class="overload">[3/4]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -810,8 +813,8 @@ Friends</h2></td></tr>
</div>
</div>
-<a id="a210707223fffc7b3ab31eca4ef29f731" name="a210707223fffc7b3ab31eca4ef29f731"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a210707223fffc7b3ab31eca4ef29f731">&#9670;&nbsp;</a></span>Assign() <span class="overload">[4/4]</span></h2>
+<a id="ac6afd224dfbe439ce083c8dd1ad3246c" name="ac6afd224dfbe439ce083c8dd1ad3246c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac6afd224dfbe439ce083c8dd1ad3246c">&#9670;&nbsp;</a></span>Assign() <span class="overload">[4/4]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -2250,6 +2253,51 @@ Friends</h2></td></tr>
</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>
@@ -2787,8 +2835,8 @@ Friends</h2></td></tr>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/include/<a class="el" href="xbstring_8h_source.html">xbstring.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/core/<a class="el" href="xbstring_8cpp.html">xbstring.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/<a class="el" href="xbstring_8h_source.html">xbstring.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/<a class="el" href="xbstring_8cpp.html">xbstring.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbTblMgr.html b/docs/doxygen/html/classxb_1_1xbTblMgr.html
index 1203682..ccd4287 100644
--- a/docs/doxygen/html/classxb_1_1xbTblMgr.html
+++ b/docs/doxygen/html/classxb_1_1xbTblMgr.html
@@ -104,6 +104,8 @@ Public Member Functions</h2></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>
@@ -134,6 +136,10 @@ Public Member Functions</h2></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>
@@ -269,6 +275,58 @@ Static Protected Attributes</h2></td></tr>
</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>
@@ -651,6 +709,24 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="acbf148ddba4297021cfb980a161ebef9" name="acbf148ddba4297021cfb980a161ebef9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbf148ddba4297021cfb980a161ebef9">&#9670;&nbsp;</a></span>GetTblListEntry()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> * xb::xbTblMgr::GetTblListEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
<a id="ac8eaef41acf08911b90f900aac8e70af" name="ac8eaef41acf08911b90f900aac8e70af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8eaef41acf08911b90f900aac8e70af">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[1/2]</span></h2>
@@ -950,8 +1026,8 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/core/<a class="el" href="xbtblmgr_8cpp.html">xbtblmgr.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/<a class="el" href="xbtblmgr_8cpp.html">xbtblmgr.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbXBase.html b/docs/doxygen/html/classxb_1_1xbXBase.html
index 1d2115e..7699920 100644
--- a/docs/doxygen/html/classxb_1_1xbXBase.html
+++ b/docs/doxygen/html/classxb_1_1xbXBase.html
@@ -151,6 +151,8 @@ Public Member Functions</h2></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>
@@ -181,6 +183,10 @@ Public Member Functions</h2></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>
@@ -354,6 +360,58 @@ Friends</h2></td></tr>
</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>
@@ -955,6 +1013,32 @@ Friends</h2></td></tr>
</div>
</div>
+<a id="acbf148ddba4297021cfb980a161ebef9" name="acbf148ddba4297021cfb980a161ebef9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbf148ddba4297021cfb980a161ebef9">&#9670;&nbsp;</a></span>GetTblListEntry()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> * xb::xbTblMgr::GetTblListEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td>
+ <td class="paramname"><em>d</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
<a id="ab35cec5ac8f0fa95f10653ca7ac817f6" name="ab35cec5ac8f0fa95f10653ca7ac817f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab35cec5ac8f0fa95f10653ca7ac817f6">&#9670;&nbsp;</a></span>Open() <span class="overload">[1/2]</span></h2>
@@ -1678,8 +1762,8 @@ Friends</h2></td></tr>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/include/<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/core/<a class="el" href="xbxbase_8cpp.html">xbxbase.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/<a class="el" href="xbxbase_8cpp.html">xbxbase.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html b/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
index acb76a6..6e22ff0 100644
--- a/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
+++ b/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/sql Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -73,10 +73,14 @@ $(function() {
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbalttbl_8cpp.html">xbalttbl.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbcrix_8cpp.html">xbcrix.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbcrtbl_8cpp.html">xbcrtbl.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="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>
diff --git a/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html b/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
index a67b05b..fd2b2f8 100644
--- a/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
+++ b/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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 Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -73,12 +73,6 @@ $(function() {
<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="checkndx_8cpp.html">checkndx.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="dbfxtrct_8cpp.html">dbfxtrct.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="reindex_8cpp.html">reindex.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__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>
diff --git a/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
index e8e40b0..66057d7 100644
--- a/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
+++ b/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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 Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html b/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
index ccb523e..bb40dd2 100644
--- a/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
+++ b/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html b/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
index 3a44668..76eb467 100644
--- a/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
+++ b/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html b/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
index 2d23c9f..03dde8a 100644
--- a/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
+++ b/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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 Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -109,8 +109,6 @@ Files</h2></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</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__ndx2_8cpp.html">xb_test_ndx2.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>
diff --git a/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html b/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
index fe510dd..5553e32 100644
--- a/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
+++ b/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/examples Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/files.html b/docs/doxygen/html/files.html
index de1cd6e..d85fb7b 100644
--- a/docs/doxygen/html/files.html
+++ b/docs/doxygen/html/files.html
@@ -127,13 +127,15 @@ $(function() {
<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="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_22_" 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="xbcrix_8cpp.html" target="_self">xbcrix.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="xbcrtbl_8cpp.html" target="_self">xbcrtbl.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="xbdrpix_8cpp.html" target="_self">xbdrpix.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="xbdrptbl_8cpp.html" target="_self">xbdrptbl.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="xbinsert_8cpp.html" target="_self">xbinsert.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="xbset_8cpp.html" target="_self">xbset.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="xbsql_8cpp.html" target="_self">xbsql.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbalttbl_8cpp.html" target="_self">xbalttbl.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbcrix_8cpp.html" target="_self">xbcrix.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbcrtbl_8cpp.html" target="_self">xbcrtbl.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="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="xbset_8cpp.html" target="_self">xbset.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="xbsql_8cpp.html" target="_self">xbsql.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>
@@ -153,29 +155,25 @@ $(function() {
<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__log_8cpp.html" target="_self">xb_test_log.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__mdx_8cpp.html" target="_self">xb_test_mdx.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__ndx_8cpp.html" target="_self">xb_test_ndx.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__ndx2_8cpp.html" target="_self">xb_test_ndx2.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__sql_8cpp.html" target="_self">xb_test_sql.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__string_8cpp.html" target="_self">xb_test_string.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__tblmgr_8cpp.html" target="_self">xb_test_tblmgr.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__uda_8cpp.html" target="_self">xb_test_uda.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_4_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__xbase_8cpp.html" target="_self">xb_test_xbase.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_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__sql_8cpp.html" target="_self">xb_test_sql.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__string_8cpp.html" target="_self">xb_test_string.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__tblmgr_8cpp.html" target="_self">xb_test_tblmgr.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__uda_8cpp.html" target="_self">xb_test_uda.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__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="checkndx_8cpp.html" target="_self">checkndx.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="dbfxtrct_8cpp.html" target="_self">dbfxtrct.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="reindex_8cpp.html" target="_self">reindex.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__cfg__check_8cpp.html" target="_self">xb_cfg_check.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__copydbf_8cpp.html" target="_self">xb_copydbf.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__dbfutil_8cpp.html" target="_self">xb_dbfutil.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__deletall_8cpp.html" target="_self">xb_deletall.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__dumpdbt_8cpp.html" target="_self">xb_dumpdbt.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__dumphdr_8cpp.html" target="_self">xb_dumphdr.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__dumpix_8cpp.html" target="_self">xb_dumpix.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__dumprecs_8cpp.html" target="_self">xb_dumprecs.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_11_" 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_12_" 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_13_" 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_14_" 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>
-<tr id="row_0_5_15_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__zap_8cpp.html" target="_self">xb_zap.cpp</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__dumphdr_8cpp.html" target="_self">xb_dumphdr.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__dumpix_8cpp.html" target="_self">xb_dumpix.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__dumprecs_8cpp.html" target="_self">xb_dumprecs.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__execsql_8cpp.html" target="_self">xb_execsql.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__pack_8cpp.html" target="_self">xb_pack.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__tblinfo_8cpp.html" target="_self">xb_tblinfo.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_11_" 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>
+<tr id="row_0_5_12_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__zap_8cpp.html" target="_self">xb_zap.cpp</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/docs/doxygen/html/functions_b.html b/docs/doxygen/html/functions_b.html
index 0fc903f..d9dfa32 100644
--- a/docs/doxygen/html/functions_b.html
+++ b/docs/doxygen/html/functions_b.html
@@ -66,6 +66,7 @@ $(function() {
<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>
diff --git a/docs/doxygen/html/functions_d.html b/docs/doxygen/html/functions_d.html
index cdce904..21f0ffb 100644
--- a/docs/doxygen/html/functions_d.html
+++ b/docs/doxygen/html/functions_d.html
@@ -77,8 +77,8 @@ $(function() {
<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#ab1f4a515533402f872cedcd0322aabd4">xb::xbDbf</a></li>
-<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3a6a068addffd06fc9a996639d6ca69e">xb::xbDbf</a></li>
+<li>DumpHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55">xb::xbDbf</a></li>
+<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">xb::xbDbf</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/functions_func_b.html b/docs/doxygen/html/functions_func_b.html
index 2981d25..82917cf 100644
--- a/docs/doxygen/html/functions_func_b.html
+++ b/docs/doxygen/html/functions_func_b.html
@@ -66,6 +66,7 @@ $(function() {
&#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>
diff --git a/docs/doxygen/html/functions_func_d.html b/docs/doxygen/html/functions_func_d.html
index a6f53b2..4f361cd 100644
--- a/docs/doxygen/html/functions_func_d.html
+++ b/docs/doxygen/html/functions_func_d.html
@@ -77,8 +77,8 @@ $(function() {
<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#ab1f4a515533402f872cedcd0322aabd4">xb::xbDbf</a></li>
-<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3a6a068addffd06fc9a996639d6ca69e">xb::xbDbf</a></li>
+<li>DumpHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55">xb::xbDbf</a></li>
+<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">xb::xbDbf</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/functions_func_g.html b/docs/doxygen/html/functions_func_g.html
index b3cf069..736af49 100644
--- a/docs/doxygen/html/functions_func_g.html
+++ b/docs/doxygen/html/functions_func_g.html
@@ -113,16 +113,17 @@ $(function() {
<li>GetOpenMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">xb::xbFile</a></li>
<li>GetOpenTableCount()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">xb::xbTblMgr</a></li>
<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
-<li>GetPhysicalIxCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a13393704a8a191d4d6555ae31d3c3e92">xb::xbDbf</a></li>
<li>GetPrevRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">xb::xbDbf</a></li>
<li>GetRawField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">xb::xbDbf</a></li>
<li>GetRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">xb::xbDbf</a></li>
<li>GetRecordBuf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">xb::xbDbf</a></li>
<li>GetRecordCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">xb::xbDbf</a></li>
+<li>GetRecordCount()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce">xb::xbDbf</a></li>
<li>GetRecordLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">xb::xbDbf</a></li>
<li>GetShareMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">xb::xbFile</a></li>
<li>GetSize()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">xb::xbString</a></li>
<li>GetTblAlias()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">xb::xbDbf</a></li>
+<li>GetTblListEntry()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">xb::xbTblMgr</a></li>
<li>GetULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">xb::xbDbf</a></li>
<li>GetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf</a></li>
<li>GetXbaseFileTypeByte()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">xb::xbFile</a></li>
diff --git a/docs/doxygen/html/functions_func_m.html b/docs/doxygen/html/functions_func_m.html
index be44b4b..cf56d43 100644
--- a/docs/doxygen/html/functions_func_m.html
+++ b/docs/doxygen/html/functions_func_m.html
@@ -66,7 +66,7 @@ $(function() {
&#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#ac856fc1b110b46aefa1b2f5c0f530aa2">xb::xbDbf</a></li>
+<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>
diff --git a/docs/doxygen/html/functions_func_o.html b/docs/doxygen/html/functions_func_o.html
index 059327b..09eacbf 100644
--- a/docs/doxygen/html/functions_func_o.html
+++ b/docs/doxygen/html/functions_func_o.html
@@ -66,7 +66,7 @@ $(function() {
&#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#ac658818bf9b8f8ff7467d8d80495b324">xb::xbDbf</a>, <a class="el" href="classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a">xb::xbXBase</a></li>
+<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>
diff --git a/docs/doxygen/html/functions_func_r.html b/docs/doxygen/html/functions_func_r.html
index 59a8512..87f9921 100644
--- a/docs/doxygen/html/functions_func_r.html
+++ b/docs/doxygen/html/functions_func_r.html
@@ -71,6 +71,8 @@ $(function() {
<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>
diff --git a/docs/doxygen/html/functions_g.html b/docs/doxygen/html/functions_g.html
index 0315594..601e48d 100644
--- a/docs/doxygen/html/functions_g.html
+++ b/docs/doxygen/html/functions_g.html
@@ -113,16 +113,17 @@ $(function() {
<li>GetOpenMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">xb::xbFile</a></li>
<li>GetOpenTableCount()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">xb::xbTblMgr</a></li>
<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
-<li>GetPhysicalIxCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a13393704a8a191d4d6555ae31d3c3e92">xb::xbDbf</a></li>
<li>GetPrevRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">xb::xbDbf</a></li>
<li>GetRawField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">xb::xbDbf</a></li>
<li>GetRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">xb::xbDbf</a></li>
<li>GetRecordBuf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">xb::xbDbf</a></li>
<li>GetRecordCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">xb::xbDbf</a></li>
+<li>GetRecordCount()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce">xb::xbDbf</a></li>
<li>GetRecordLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb">xb::xbDbf</a></li>
<li>GetShareMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">xb::xbFile</a></li>
<li>GetSize()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c">xb::xbString</a></li>
<li>GetTblAlias()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd">xb::xbDbf</a></li>
+<li>GetTblListEntry()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9">xb::xbTblMgr</a></li>
<li>GetULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">xb::xbDbf</a></li>
<li>GetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf</a></li>
<li>GetXbaseFileTypeByte()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">xb::xbFile</a></li>
diff --git a/docs/doxygen/html/functions_m.html b/docs/doxygen/html/functions_m.html
index 03122f3..c4bd343 100644
--- a/docs/doxygen/html/functions_m.html
+++ b/docs/doxygen/html/functions_m.html
@@ -66,7 +66,7 @@ $(function() {
<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#ac856fc1b110b46aefa1b2f5c0f530aa2">xb::xbDbf</a></li>
+<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>
diff --git a/docs/doxygen/html/functions_o.html b/docs/doxygen/html/functions_o.html
index 6c5dcb0..95321c1 100644
--- a/docs/doxygen/html/functions_o.html
+++ b/docs/doxygen/html/functions_o.html
@@ -66,7 +66,7 @@ $(function() {
<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#ac658818bf9b8f8ff7467d8d80495b324">xb::xbDbf</a>, <a class="el" href="classxb_1_1xbXBase.html#aafb1abd6b6124cddf635adaf9f615a4a">xb::xbXBase</a></li>
+<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>
diff --git a/docs/doxygen/html/functions_r.html b/docs/doxygen/html/functions_r.html
index f1e81b2..f3d770b 100644
--- a/docs/doxygen/html/functions_r.html
+++ b/docs/doxygen/html/functions_r.html
@@ -73,6 +73,8 @@ $(function() {
<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>
diff --git a/docs/doxygen/html/functions_x.html b/docs/doxygen/html/functions_x.html
index 122a118..d7e5863 100644
--- a/docs/doxygen/html/functions_x.html
+++ b/docs/doxygen/html/functions_x.html
@@ -74,7 +74,7 @@ $(function() {
<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>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>
diff --git a/docs/doxygen/html/globals.html b/docs/doxygen/html/globals.html
index 91cbdf4..bae955d 100644
--- a/docs/doxygen/html/globals.html
+++ b/docs/doxygen/html/globals.html
@@ -78,11 +78,6 @@ $(function() {
</ul>
-<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
-<li>FileCompare()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#aa5dbb64c6135ac01f79e5b6087270cf5">tstfuncs.cpp</a></li>
-</ul>
-
-
<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
<li>GetNextSqlCmd()&#160;:&#160;<a class="el" href="xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e">xb_execsql.cpp</a></li>
</ul>
@@ -107,7 +102,7 @@ $(function() {
<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
-<li>main()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d">xb_dbfutil.cpp</a>, <a class="el" href="xb__test__ndx2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx2.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="checkndx_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">checkndx.cpp</a>, <a class="el" href="dbfxtrct_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">dbfxtrct.cpp</a>, <a class="el" href="reindex_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">reindex.cpp</a>, <a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_copydbf.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumphdr.cpp</a>, <a class="el" href="xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumpix.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_execsql.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_undelall.cpp</a>, <a class="el" href="xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_zap.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__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.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__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__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.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>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.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></li>
+<li>main()&#160;:&#160;<a class="el" href="xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_deletall.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d">xb_dbfutil.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumphdr.cpp</a>, <a class="el" href="xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumpix.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_execsql.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_undelall.cpp</a>, <a class="el" href="xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_zap.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__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.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__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__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.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>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.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></li>
</ul>
@@ -119,11 +114,6 @@ $(function() {
</ul>
-<h3><a id="index_u" name="index_u"></a>- u -</h3><ul>
-<li>Usage()&#160;:&#160;<a class="el" href="dbfxtrct_8cpp.html#a5ae07f63d6b390e42068d941038dadf2">dbfxtrct.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>
diff --git a/docs/doxygen/html/globals_func.html b/docs/doxygen/html/globals_func.html
index 3ecaa0b..c273ac7 100644
--- a/docs/doxygen/html/globals_func.html
+++ b/docs/doxygen/html/globals_func.html
@@ -78,11 +78,6 @@ $(function() {
</ul>
-<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
-<li>FileCompare()&#160;:&#160;<a class="el" href="tstfuncs_8cpp.html#aa5dbb64c6135ac01f79e5b6087270cf5">tstfuncs.cpp</a></li>
-</ul>
-
-
<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
<li>GetNextSqlCmd()&#160;:&#160;<a class="el" href="xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e">xb_execsql.cpp</a></li>
</ul>
@@ -94,7 +89,7 @@ $(function() {
<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
-<li>main()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d">xb_dbfutil.cpp</a>, <a class="el" href="xb__test__ndx2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx2.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="checkndx_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">checkndx.cpp</a>, <a class="el" href="dbfxtrct_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">dbfxtrct.cpp</a>, <a class="el" href="reindex_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">reindex.cpp</a>, <a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_copydbf.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumphdr.cpp</a>, <a class="el" href="xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumpix.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_execsql.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_undelall.cpp</a>, <a class="el" href="xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_zap.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__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.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__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__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.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>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.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></li>
+<li>main()&#160;:&#160;<a class="el" href="xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_deletall.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d">xb_dbfutil.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumphdr.cpp</a>, <a class="el" href="xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumpix.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_execsql.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_undelall.cpp</a>, <a class="el" href="xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_zap.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__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.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__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__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.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>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.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></li>
</ul>
@@ -103,11 +98,6 @@ $(function() {
<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>
-
-
-<h3><a id="index_u" name="index_u"></a>- u -</h3><ul>
-<li>Usage()&#160;:&#160;<a class="el" href="dbfxtrct_8cpp.html#a5ae07f63d6b390e42068d941038dadf2">dbfxtrct.cpp</a></li>
-</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/doxygen/html/menudata.js b/docs/doxygen/html/menudata.js
index 5c6ed23..7930315 100644
--- a/docs/doxygen/html/menudata.js
+++ b/docs/doxygen/html/menudata.js
@@ -104,25 +104,21 @@ var menudata={children:[
{text:"All",url:"globals.html",children:[
{text:"c",url:"globals.html#index_c"},
{text:"d",url:"globals.html#index_d"},
-{text:"f",url:"globals.html#index_f"},
{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:"t",url:"globals.html#index_t"},
-{text:"u",url:"globals.html#index_u"},
{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:"f",url:"globals_func.html#index_f"},
{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:"t",url:"globals_func.html#index_t"},
-{text:"u",url:"globals_func.html#index_u"}]},
+{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"},
diff --git a/docs/doxygen/html/search/all_0.js b/docs/doxygen/html/search/all_0.js
index 9e288ab..25f7a4e 100644
--- a/docs/doxygen/html/search/all_0.js
+++ b/docs/doxygen/html/search/all_0.js
@@ -5,5 +5,5 @@ var searchData=
['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#a721f69ccc7893842422a043468ffccea',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sTblName)'],['../classxb_1_1xbTblMgr.html#a62f6841849dbe5c1768f7e90f1b7e766',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sTblName, 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#a210707223fffc7b3ab31eca4ef29f731',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 pos, xbUInt32 n)'],['../classxb_1_1xbString.html#ab9045442e57293843652dfce6522ff83',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 n)']]]
+ ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 pos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 lCopyLen)']]]
];
diff --git a/docs/doxygen/html/search/all_1.js b/docs/doxygen/html/search/all_1.js
index d9c0a9c..a3b8ce1 100644
--- a/docs/doxygen/html/search/all_1.js
+++ b/docs/doxygen/html/search/all_1.js
@@ -1,5 +1,6 @@
var searchData=
[
- ['bitset_0',['BitSet',['../classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72',1,'xb::xbSsv']]],
- ['blankrecord_1',['BlankRecord',['../classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6',1,'xb::xbDbf']]]
+ ['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/docs/doxygen/html/search/all_12.js b/docs/doxygen/html/search/all_12.js
index 6c6cb3e..56d429c 100644
--- a/docs/doxygen/html/search/all_12.js
+++ b/docs/doxygen/html/search/all_12.js
@@ -5,6 +5,5 @@ var searchData=
['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']]],
- ['usage_6',['Usage',['../dbfxtrct_8cpp.html#a5ae07f63d6b390e42068d941038dadf2',1,'dbfxtrct.cpp']]]
+ ['undeleterecord_5',['UndeleteRecord',['../classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/all_15.js b/docs/doxygen/html/search/all_15.js
index eb08efa..08832b8 100644
--- a/docs/doxygen/html/search/all_15.js
+++ b/docs/doxygen/html/search/all_15.js
@@ -110,20 +110,20 @@ var searchData=
['xb_5ftest_5flog_2ecpp_107',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
['xb_5ftest_5fmdx_2ecpp_108',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
['xb_5ftest_5fndx_2ecpp_109',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
- ['xb_5ftest_5fndx2_2ecpp_110',['xb_test_ndx2.cpp',['../xb__test__ndx2_8cpp.html',1,'']]],
- ['xb_5ftest_5fsql_2ecpp_111',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
- ['xb_5ftest_5fstring_2ecpp_112',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
- ['xb_5ftest_5ftblmgr_2ecpp_113',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
- ['xb_5ftest_5fuda_2ecpp_114',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
- ['xb_5ftest_5fxbase_2ecpp_115',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
- ['xb_5funbalanced_5fparens_116',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fquotes_117',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
- ['xb_5fundelall_2ecpp_118',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
- ['xb_5funlock_119',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
- ['xb_5fupdated_120',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
- ['xb_5fwrite_121',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
- ['xb_5fwrite_5ferror_122',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
- ['xb_5fzap_2ecpp_123',['xb_zap.cpp',['../xb__zap_8cpp.html',1,'']]],
+ ['xb_5ftest_5fsql_2ecpp_110',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
+ ['xb_5ftest_5fstring_2ecpp_111',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftblmgr_2ecpp_112',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
+ ['xb_5ftest_5fuda_2ecpp_113',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
+ ['xb_5ftest_5fxbase_2ecpp_114',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
+ ['xb_5funbalanced_5fparens_115',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
+ ['xb_5funbalanced_5fquotes_116',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
+ ['xb_5fundelall_2ecpp_117',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
+ ['xb_5funlock_118',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
+ ['xb_5fupdated_119',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
+ ['xb_5fwrite_120',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
+ ['xb_5fwrite_5ferror_121',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
+ ['xb_5fzap_2ecpp_122',['xb_zap.cpp',['../xb__zap_8cpp.html',1,'']]],
+ ['xbalttbl_2ecpp_123',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
['xbase_124',['xbase',['../classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004',1,'xb::xbFile']]],
['xbase_2eh_125',['xbase.h',['../xbase_8h.html',1,'']]],
['xbbcd_126',['xbBcd',['../classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add',1,'xb::xbXBase']]],
@@ -132,7 +132,7 @@ var searchData=
['xbbool_129',['xbBool',['../namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f',1,'xb']]],
['xbcrix_2ecpp_130',['xbcrix.cpp',['../xbcrix_8cpp.html',1,'']]],
['xbcrtbl_2ecpp_131',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
- ['xbdate_132',['xbDate',['../classxb_1_1xbDate.html',1,'xb::xbDate'],['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)']]],
+ ['xbdate_132',['xbDate',['../classxb_1_1xbDate.html',1,'xb::xbDate'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)'],['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()']]],
['xbdate_2ecpp_133',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
['xbdate_2eh_134',['xbdate.h',['../xbdate_8h.html',1,'']]],
['xbdbf_135',['xbDbf',['../classxb_1_1xbDbf.html',1,'xb::xbDbf'],['../classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204',1,'xb::xbDbf::xbDbf()'],['../namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b',1,'xb::xbDbf()']]],
@@ -140,83 +140,84 @@ var searchData=
['xbdbf_2eh_137',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
['xbdbf3_2ecpp_138',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
['xbdbf4_2ecpp_139',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
- ['xbdouble_140',['xbDouble',['../namespacexb.html#a25f47b226ce924a5c78f97989b0744a2',1,'xb']]],
- ['xbdrpix_2ecpp_141',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
- ['xbdrptbl_2ecpp_142',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
- ['xberrormessages_143',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
- ['xbexp_144',['xbExp',['../classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc',1,'xb::xbXBase']]],
- ['xbexp_2ecpp_145',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
- ['xbexp_2eh_146',['xbexp.h',['../xbexp_8h.html',1,'']]],
- ['xbexpnode_2ecpp_147',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
- ['xbexpnode_2eh_148',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
- ['xbfalse_149',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
- ['xbfclose_150',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
- ['xbfeof_151',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
- ['xbfflush_152',['xbFflush',['../classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009',1,'xb::xbFile']]],
- ['xbfgetc_153',['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_154',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
- ['xbfields_2ecpp_155',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
- ['xbfile_156',['xbFile',['../classxb_1_1xbFile.html',1,'xb::xbFile'],['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile::xbFile()']]],
- ['xbfile_2ecpp_157',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
- ['xbfile_2eh_158',['xbfile.h',['../xbfile_8h.html',1,'']]],
- ['xbfileno_159',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
- ['xbfilter_2ecpp_160',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
- ['xbfilter_2eh_161',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
- ['xbfloat_162',['xbFloat',['../namespacexb.html#a83aa6a550398db55973aa9fb4257e66e',1,'xb']]],
- ['xbfopen_163',['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_164',['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_165',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
- ['xbfread_166',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
- ['xbfseek_167',['xbFseek',['../classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d',1,'xb::xbFile']]],
- ['xbftell_168',['xbFtell',['../classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b',1,'xb::xbFile']]],
- ['xbfturnofffilebuffering_169',['xbFTurnOffFileBuffering',['../classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918',1,'xb::xbFile']]],
- ['xbfuncs_2ecpp_170',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
- ['xbfwrite_171',['xbFwrite',['../classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f',1,'xb::xbFile']]],
- ['xbindex_2eh_172',['xbindex.h',['../xbindex_8h.html',1,'']]],
- ['xbinsert_2ecpp_173',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
- ['xbixbase_2ecpp_174',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
- ['xbixmdx_2ecpp_175',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
- ['xbixndx_2ecpp_176',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
- ['xblnklst_2eh_177',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
- ['xblnklstord_2eh_178',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
- ['xblnknod_2eh_179',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
- ['xblog_180',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
- ['xblog_2ecpp_181',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
- ['xblog_2eh_182',['xblog.h',['../xblog_8h.html',1,'']]],
- ['xbmemcmp_183',['xbMemcmp',['../classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66',1,'xb::xbXBase']]],
- ['xbmemo_2ecpp_184',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
- ['xbmemo_2eh_185',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
- ['xbmemo3_2ecpp_186',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
- ['xbmemo4_2ecpp_187',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
- ['xbofft_188',['xbOffT',['../namespacexb.html#ac963d9fde6debb416303cfbed35fb793',1,'xb']]],
- ['xbreaduntil_189',['xbReadUntil',['../classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9',1,'xb::xbFile']]],
- ['xbremove_190',['xbRemove',['../classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48',1,'xb::xbFile::xbRemove()'],['../classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName, xbInt16 iOption)'],['../classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName)']]],
- ['xbrename_191',['xbRename',['../classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012',1,'xb::xbFile::xbRename(const xbString &amp;sOldName, const xbString &amp;sNewName)'],['../classxb_1_1xbFile.html#ab0b2a2c88947921d98ebcb5b5ec34ed9',1,'xb::xbFile::xbRename(const xbString &amp;sOldName, const xbString &amp;sNewName, xbInt16 iOption)']]],
- ['xbretcod_2eh_192',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
- ['xbrewind_193',['xbRewind',['../classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505',1,'xb::xbFile']]],
- ['xbschema_194',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
- ['xbset_2ecpp_195',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
- ['xbsleep_196',['xbSleep',['../classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf',1,'xb::xbXBase']]],
- ['xbsql_2ecpp_197',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
- ['xbsql_2eh_198',['xbsql.h',['../xbsql_8h.html',1,'']]],
- ['xbssv_199',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb::xbSsv'],['../classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b',1,'xb::xbSsv::xbSsv()']]],
- ['xbssv_2ecpp_200',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
- ['xbssv_2eh_201',['xbssv.h',['../xbssv_8h.html',1,'']]],
- ['xbstring_202',['xbString',['../classxb_1_1xbString.html',1,'xb::xbString'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)'],['../classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe',1,'xb::xbString::xbString(xbDouble d)'],['../classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7',1,'xb::xbString::xbString(const char *=&quot;&quot;)'],['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &amp;s)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)']]],
- ['xbstring_2ecpp_203',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
- ['xbstring_2eh_204',['xbstring.h',['../xbstring_8h.html',1,'']]],
- ['xbtag_2ecpp_205',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
- ['xbtag_2eh_206',['xbtag.h',['../xbtag_8h.html',1,'']]],
- ['xbtbllist_207',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
- ['xbtblmgr_208',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb::xbTblMgr'],['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr::xbTblMgr()']]],
- ['xbtblmgr_2ecpp_209',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
- ['xbtblmgr_2eh_210',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
- ['xbtrue_211',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]],
- ['xbtruncate_212',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
- ['xbtypes_2eh_213',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
- ['xbuda_2ecpp_214',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
- ['xbuda_2eh_215',['xbuda.h',['../xbuda_8h.html',1,'']]],
- ['xbxbase_216',['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_217',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
- ['xbxbase_2eh_218',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
+ ['xbdelete_2ecpp_140',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
+ ['xbdouble_141',['xbDouble',['../namespacexb.html#a25f47b226ce924a5c78f97989b0744a2',1,'xb']]],
+ ['xbdrpix_2ecpp_142',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
+ ['xbdrptbl_2ecpp_143',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
+ ['xberrormessages_144',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
+ ['xbexp_145',['xbExp',['../classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc',1,'xb::xbXBase']]],
+ ['xbexp_2ecpp_146',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
+ ['xbexp_2eh_147',['xbexp.h',['../xbexp_8h.html',1,'']]],
+ ['xbexpnode_2ecpp_148',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
+ ['xbexpnode_2eh_149',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
+ ['xbfalse_150',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
+ ['xbfclose_151',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
+ ['xbfeof_152',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
+ ['xbfflush_153',['xbFflush',['../classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009',1,'xb::xbFile']]],
+ ['xbfgetc_154',['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_155',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
+ ['xbfields_2ecpp_156',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
+ ['xbfile_157',['xbFile',['../classxb_1_1xbFile.html',1,'xb::xbFile'],['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile::xbFile()']]],
+ ['xbfile_2ecpp_158',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
+ ['xbfile_2eh_159',['xbfile.h',['../xbfile_8h.html',1,'']]],
+ ['xbfileno_160',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
+ ['xbfilter_2ecpp_161',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
+ ['xbfilter_2eh_162',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
+ ['xbfloat_163',['xbFloat',['../namespacexb.html#a83aa6a550398db55973aa9fb4257e66e',1,'xb']]],
+ ['xbfopen_164',['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_165',['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_166',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
+ ['xbfread_167',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
+ ['xbfseek_168',['xbFseek',['../classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d',1,'xb::xbFile']]],
+ ['xbftell_169',['xbFtell',['../classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b',1,'xb::xbFile']]],
+ ['xbfturnofffilebuffering_170',['xbFTurnOffFileBuffering',['../classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918',1,'xb::xbFile']]],
+ ['xbfuncs_2ecpp_171',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
+ ['xbfwrite_172',['xbFwrite',['../classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f',1,'xb::xbFile']]],
+ ['xbindex_2eh_173',['xbindex.h',['../xbindex_8h.html',1,'']]],
+ ['xbinsert_2ecpp_174',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
+ ['xbixbase_2ecpp_175',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
+ ['xbixmdx_2ecpp_176',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
+ ['xbixndx_2ecpp_177',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
+ ['xblnklst_2eh_178',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
+ ['xblnklstord_2eh_179',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
+ ['xblnknod_2eh_180',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
+ ['xblog_181',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
+ ['xblog_2ecpp_182',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
+ ['xblog_2eh_183',['xblog.h',['../xblog_8h.html',1,'']]],
+ ['xbmemcmp_184',['xbMemcmp',['../classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66',1,'xb::xbXBase']]],
+ ['xbmemo_2ecpp_185',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
+ ['xbmemo_2eh_186',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
+ ['xbmemo3_2ecpp_187',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
+ ['xbmemo4_2ecpp_188',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
+ ['xbofft_189',['xbOffT',['../namespacexb.html#ac963d9fde6debb416303cfbed35fb793',1,'xb']]],
+ ['xbreaduntil_190',['xbReadUntil',['../classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9',1,'xb::xbFile']]],
+ ['xbremove_191',['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_192',['xbRename',['../classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012',1,'xb::xbFile']]],
+ ['xbretcod_2eh_193',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
+ ['xbrewind_194',['xbRewind',['../classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505',1,'xb::xbFile']]],
+ ['xbschema_195',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
+ ['xbset_2ecpp_196',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
+ ['xbsleep_197',['xbSleep',['../classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf',1,'xb::xbXBase']]],
+ ['xbsql_2ecpp_198',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
+ ['xbsql_2eh_199',['xbsql.h',['../xbsql_8h.html',1,'']]],
+ ['xbssv_200',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb::xbSsv'],['../classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b',1,'xb::xbSsv::xbSsv()']]],
+ ['xbssv_2ecpp_201',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
+ ['xbssv_2eh_202',['xbssv.h',['../xbssv_8h.html',1,'']]],
+ ['xbstring_203',['xbString',['../classxb_1_1xbString.html',1,'xb::xbString'],['../classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe',1,'xb::xbString::xbString(xbDouble d)'],['../classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7',1,'xb::xbString::xbString(const char *=&quot;&quot;)'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &amp;s)'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)'],['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)']]],
+ ['xbstring_2ecpp_204',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
+ ['xbstring_2eh_205',['xbstring.h',['../xbstring_8h.html',1,'']]],
+ ['xbtag_2ecpp_206',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
+ ['xbtag_2eh_207',['xbtag.h',['../xbtag_8h.html',1,'']]],
+ ['xbtbllist_208',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
+ ['xbtblmgr_209',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb::xbTblMgr'],['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr::xbTblMgr()']]],
+ ['xbtblmgr_2ecpp_210',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
+ ['xbtblmgr_2eh_211',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
+ ['xbtrue_212',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]],
+ ['xbtruncate_213',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
+ ['xbtypes_2eh_214',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
+ ['xbuda_2ecpp_215',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
+ ['xbuda_2eh_216',['xbuda.h',['../xbuda_8h.html',1,'']]],
+ ['xbxbase_217',['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_218',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
+ ['xbxbase_2eh_219',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
];
diff --git a/docs/doxygen/html/search/all_2.js b/docs/doxygen/html/search/all_2.js
index d45c7fc..83b0227 100644
--- a/docs/doxygen/html/search/all_2.js
+++ b/docs/doxygen/html/search/all_2.js
@@ -6,27 +6,26 @@ var searchData=
['cfieldname_3',['cFieldName',['../structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e',1,'xb::xbSchema']]],
['chardayof_4',['CharDayOf',['../classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c',1,'xb::xbDate']]],
['charmonthof_5',['CharMonthOf',['../classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac',1,'xb::xbDate']]],
- ['checkndx_2ecpp_6',['checkndx.cpp',['../checkndx_8cpp.html',1,'']]],
- ['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']]],
- ['createtable_16',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
- ['createuniquefilename_17',['CreateUniqueFileName',['../classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut)'],['../classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut, xbInt16 iOption)']]],
- ['ctod_18',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
- ['ctransactionflag_19',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
- ['ctype_20',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
- ['cupdatedd_21',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
- ['cupdatemm_22',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
- ['cupdateyy_23',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
- ['cversion_24',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]],
- ['cvthexchar_25',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
- ['cvthexstring_26',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
- ['cvtlonglong_27',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
- ['cvtulonglong_28',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
+ ['chrontime_6',['ChronTime',['../tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7',1,'tstfuncs.cpp']]],
+ ['cindexflag_7',['cIndexFlag',['../classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b',1,'xb::xbDbf']]],
+ ['clangdriver_8',['cLangDriver',['../classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1',1,'xb::xbDbf']]],
+ ['close_9',['Close',['../classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d',1,'xb::xbDbf']]],
+ ['closealltables_10',['CloseAllTables',['../classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b',1,'xb::xbXBase']]],
+ ['commit_11',['Commit',['../classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f',1,'xb::xbDbf']]],
+ ['copy_12',['Copy',['../classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792',1,'xb::xbString']]],
+ ['copydbfstructure_13',['CopyDbfStructure',['../classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264',1,'xb::xbDbf']]],
+ ['countchar_14',['CountChar',['../classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72',1,'xb::xbString::CountChar(char c, xbInt16 iOpt) const'],['../classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f',1,'xb::xbString::CountChar(char c) const']]],
+ ['createtable_15',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
+ ['createuniquefilename_16',['CreateUniqueFileName',['../classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut)'],['../classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut, xbInt16 iOption)']]],
+ ['ctod_17',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
+ ['ctransactionflag_18',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
+ ['ctype_19',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
+ ['cupdatedd_20',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
+ ['cupdatemm_21',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
+ ['cupdateyy_22',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
+ ['cversion_23',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]],
+ ['cvthexchar_24',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
+ ['cvthexstring_25',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
+ ['cvtlonglong_26',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
+ ['cvtulonglong_27',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
];
diff --git a/docs/doxygen/html/search/all_3.js b/docs/doxygen/html/search/all_3.js
index 1eef659..e2fc7b3 100644
--- a/docs/doxygen/html/search/all_3.js
+++ b/docs/doxygen/html/search/all_3.js
@@ -2,20 +2,19 @@ var searchData=
[
['dateisvalid_0',['DateIsValid',['../classxb_1_1xbDate.html#a367f66ef0c03c1747c12a18784554ccb',1,'xb::xbDate']]],
['dayof_1',['DayOf',['../classxb_1_1xbDate.html#ad6417a900ce64a46f8909c0c7a2ddea2',1,'xb::xbDate']]],
- ['dbfxtrct_2ecpp_2',['dbfxtrct.cpp',['../dbfxtrct_8cpp.html',1,'']]],
- ['dblequals_3',['dblEquals',['../tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860',1,'tstfuncs.cpp']]],
- ['dblmax_4',['dblMax',['../tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b',1,'tstfuncs.cpp']]],
- ['dblmin_5',['dblMin',['../tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93',1,'tstfuncs.cpp']]],
- ['deleteall_6',['DeleteAll',['../classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9',1,'xb::xbDbf']]],
- ['deleteallrecords_7',['DeleteAllRecords',['../classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176',1,'xb::xbDbf']]],
- ['deleterecord_8',['DeleteRecord',['../classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db',1,'xb::xbDbf']]],
- ['deletetable_9',['DeleteTable',['../classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397',1,'xb::xbDbf']]],
- ['determinexbasememoversion_10',['DetermineXbaseMemoVersion',['../classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3',1,'xb::xbFile']]],
- ['determinexbasetableversion_11',['DetermineXbaseTableVersion',['../classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66',1,'xb::xbFile']]],
- ['devtester_12',['DevTester',['../xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc',1,'xb_test_expression.cpp']]],
- ['disablemsglogging_13',['DisableMsgLogging',['../classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65',1,'xb::xbXBase']]],
- ['displayerror_14',['DisplayError',['../classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d',1,'xb::xbSsv']]],
- ['displaytablelist_15',['DisplayTableList',['../classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50',1,'xb::xbTblMgr']]],
- ['dumpheader_16',['DumpHeader',['../classxb_1_1xbDbf.html#ab1f4a515533402f872cedcd0322aabd4',1,'xb::xbDbf']]],
- ['dumprecord_17',['DumpRecord',['../classxb_1_1xbDbf.html#a3a6a068addffd06fc9a996639d6ca69e',1,'xb::xbDbf']]]
+ ['dblequals_2',['dblEquals',['../tstfuncs_8cpp.html#a8b8e417213c57f2ea0bcb61a7fb28860',1,'tstfuncs.cpp']]],
+ ['dblmax_3',['dblMax',['../tstfuncs_8cpp.html#a69a6e718e066af7f8392e5f1fea40d1b',1,'tstfuncs.cpp']]],
+ ['dblmin_4',['dblMin',['../tstfuncs_8cpp.html#a4d7b8f3f1ce52c6c0a281f25419f4c93',1,'tstfuncs.cpp']]],
+ ['deleteall_5',['DeleteAll',['../classxb_1_1xbDbf.html#a01c26b67e312be1e674b3da710e031b9',1,'xb::xbDbf']]],
+ ['deleteallrecords_6',['DeleteAllRecords',['../classxb_1_1xbDbf.html#a3067fdfa3a7a5c15651f6e89d1102176',1,'xb::xbDbf']]],
+ ['deleterecord_7',['DeleteRecord',['../classxb_1_1xbDbf.html#acd8c10579229f3a2e2c5fdb7fcef90db',1,'xb::xbDbf']]],
+ ['deletetable_8',['DeleteTable',['../classxb_1_1xbDbf.html#a4085ed4f049d976124d8edc3d3c56397',1,'xb::xbDbf']]],
+ ['determinexbasememoversion_9',['DetermineXbaseMemoVersion',['../classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3',1,'xb::xbFile']]],
+ ['determinexbasetableversion_10',['DetermineXbaseTableVersion',['../classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66',1,'xb::xbFile']]],
+ ['devtester_11',['DevTester',['../xb__test__expression_8cpp.html#aee57237c5f5b9b4d80e84bf530eb42bc',1,'xb_test_expression.cpp']]],
+ ['disablemsglogging_12',['DisableMsgLogging',['../classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65',1,'xb::xbXBase']]],
+ ['displayerror_13',['DisplayError',['../classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d',1,'xb::xbSsv']]],
+ ['displaytablelist_14',['DisplayTableList',['../classxb_1_1xbTblMgr.html#a5eebffb9e8cc64141e35c2622045cb50',1,'xb::xbTblMgr']]],
+ ['dumpheader_15',['DumpHeader',['../classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55',1,'xb::xbDbf']]],
+ ['dumprecord_16',['DumpRecord',['../classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/all_5.js b/docs/doxygen/html/search/all_5.js
index 09a9029..d143ad3 100644
--- a/docs/doxygen/html/search/all_5.js
+++ b/docs/doxygen/html/search/all_5.js
@@ -1,8 +1,7 @@
var searchData=
[
- ['filecompare_0',['FileCompare',['../tstfuncs_8cpp.html#aa5dbb64c6135ac01f79e5b6087270cf5',1,'tstfuncs.cpp']]],
- ['fileexists_1',['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_2',['FileIsOpen',['../classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59',1,'xb::xbFile']]],
- ['flushlog_3',['FlushLog',['../classxb_1_1xbXBase.html#a5a5ecaed9777978344902446c9ae3b8e',1,'xb::xbXBase']]],
- ['formatdate_4',['FormatDate',['../classxb_1_1xbDate.html#a01de44dc869f7db99f33046fc91f2c6a',1,'xb::xbDate']]]
+ ['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/docs/doxygen/html/search/all_6.js b/docs/doxygen/html/search/all_6.js
index e6c6187..580f3f8 100644
--- a/docs/doxygen/html/search/all_6.js
+++ b/docs/doxygen/html/search/all_6.js
@@ -16,13 +16,13 @@ var searchData=
['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']]],
['geterrormessage_15',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
- ['getfield_16',['GetField',['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const']]],
+ ['getfield_16',['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_17',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
- ['getfielddecimal_18',['GetFieldDecimal',['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const'],['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const']]],
+ ['getfielddecimal_18',['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_19',['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_20',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
['getfieldno_21',['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_22',['GetFieldType',['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &amp;sFieldName, char &amp;cFieldType) const'],['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &amp;cFieldType) const']]],
+ ['getfieldtype_22',['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_23',['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_24',['GetFileExtPart',['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &amp;sFileExtPartOut) const'],['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileExtPartOut) const']]],
['getfilemtime_25',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
@@ -30,7 +30,7 @@ var searchData=
['getfilenamepart_27',['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_28',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
['getfiletype_29',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
- ['getfirstrecord_30',['GetFirstRecord',['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()']]],
+ ['getfirstrecord_30',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
['getfloatfield_31',['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_32',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
['getfunctioninfo_33',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
@@ -39,27 +39,28 @@ var searchData=
['getlogdirectory_36',['GetLogDirectory',['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase']]],
['getlogfilename_37',['GetLogFileName',['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase']]],
['getlogfqfilename_38',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
- ['getlogicalfield_39',['GetLogicalField',['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#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']]],
+ ['getlogicalfield_39',['GetLogicalField',['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#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']]],
['getlogstatus_40',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
['getlongfield_41',['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_42',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
- ['getnextrecord_43',['GetNextRecord',['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)'],['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)']]],
+ ['getnextrecord_43',['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_44',['GetNextSqlCmd',['../xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e',1,'xb_execsql.cpp']]],
['getopenmode_45',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
['getopentablecount_46',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
['getpathseparator_47',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString']]],
- ['getphysicalixcnt_48',['GetPhysicalIxCnt',['../classxb_1_1xbDbf.html#a13393704a8a191d4d6555ae31d3c3e92',1,'xb::xbDbf']]],
- ['getprevrecord_49',['GetPrevRecord',['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()']]],
- ['getrawfield_50',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
- ['getrecord_51',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
- ['getrecordbuf_52',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
- ['getrecordcnt_53',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
+ ['getprevrecord_48',['GetPrevRecord',['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()']]],
+ ['getrawfield_49',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
+ ['getrecord_50',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
+ ['getrecordbuf_51',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
+ ['getrecordcnt_52',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
+ ['getrecordcount_53',['GetRecordCount',['../classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce',1,'xb::xbDbf']]],
['getrecordlen_54',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
['getsharemode_55',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
['getsize_56',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
['gettblalias_57',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
- ['getulongfield_58',['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_59',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
- ['getxbasefiletypebyte_60',['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_61',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
+ ['gettbllistentry_58',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
+ ['getulongfield_59',['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_60',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
+ ['getxbasefiletypebyte_61',['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_62',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/all_b.js b/docs/doxygen/html/search/all_b.js
index 67213ee..7595e8a 100644
--- a/docs/doxygen/html/search/all_b.js
+++ b/docs/doxygen/html/search/all_b.js
@@ -1,7 +1,7 @@
var searchData=
[
- ['main_0',['main',['../xb__copydbf_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_copydbf.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__ndx2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx2.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../checkndx_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;checkndx.cpp'],['../dbfxtrct_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;dbfxtrct.cpp'],['../reindex_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;reindex.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d',1,'main(int, char **):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumpdbt.cpp'],['../xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumphdr.cpp'],['../xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumpix.cpp'],['../xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_execsql.cpp'],['../xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_undelall.cpp'],['../xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_zap.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.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__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'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.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']]],
- ['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#ac856fc1b110b46aefa1b2f5c0f530aa2',1,'xb::xbDbf']]],
+ ['main_0',['main',['../xb__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d',1,'main(int, char **):&#160;xb_dbfutil.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__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#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_copydbf.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumpdbt.cpp'],['../xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumphdr.cpp'],['../xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumpix.cpp'],['../xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_execsql.cpp'],['../xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_undelall.cpp'],['../xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_zap.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.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__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'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp']]],
+ ['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950',1,'xb::xbDbf']]],
['mid_2',['Mid',['../classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7',1,'xb::xbString']]],
['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]]
];
diff --git a/docs/doxygen/html/search/all_d.js b/docs/doxygen/html/search/all_d.js
index 604a447..bdfe8c7 100644
--- a/docs/doxygen/html/search/all_d.js
+++ b/docs/doxygen/html/search/all_d.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['open_0',['Open',['../classxb_1_1xbDbf.html#ac658818bf9b8f8ff7467d8d80495b324',1,'xb::xbDbf::Open(const xbString &amp;sTableName, const xbString &amp;sAlias)'],['../classxb_1_1xbDbf.html#a97366c7362e409d7f09973a6aef8dad0',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)']]],
+ ['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']]],
diff --git a/docs/doxygen/html/search/all_f.js b/docs/doxygen/html/search/all_f.js
index 7766c97..9b07813 100644
--- a/docs/doxygen/html/search/all_f.js
+++ b/docs/doxygen/html/search/all_f.js
@@ -5,9 +5,10 @@ var searchData=
['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']]],
- ['reindex_2ecpp_5',['reindex.cpp',['../reindex_8cpp.html',1,'']]],
- ['remove_6',['Remove',['../classxb_1_1xbString.html#afaac65eaa6d9ef1596d6a0e7b91ed0f2',1,'xb::xbString']]],
- ['removetblfromtbllist_7',['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)']]],
- ['resize_8',['Resize',['../classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e',1,'xb::xbString']]],
- ['rtrim_9',['Rtrim',['../classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077',1,'xb::xbString']]]
+ ['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/docs/doxygen/html/search/files_0.js b/docs/doxygen/html/search/files_0.js
index e58e938..f577bf3 100644
--- a/docs/doxygen/html/search/files_0.js
+++ b/docs/doxygen/html/search/files_0.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['checkndx_2ecpp_0',['checkndx.cpp',['../checkndx_8cpp.html',1,'']]]
+ ['tstfuncs_2ecpp_0',['tstfuncs.cpp',['../tstfuncs_8cpp.html',1,'']]]
];
diff --git a/docs/doxygen/html/search/files_1.js b/docs/doxygen/html/search/files_1.js
index 828c76f..8a867fe 100644
--- a/docs/doxygen/html/search/files_1.js
+++ b/docs/doxygen/html/search/files_1.js
@@ -1,4 +1,101 @@
var searchData=
[
- ['dbfxtrct_2ecpp_0',['dbfxtrct.cpp',['../dbfxtrct_8cpp.html',1,'']]]
+ ['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_5fsql_2ecpp_35',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
+ ['xb_5ftest_5fstring_2ecpp_36',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftblmgr_2ecpp_37',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
+ ['xb_5ftest_5fuda_2ecpp_38',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
+ ['xb_5ftest_5fxbase_2ecpp_39',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
+ ['xb_5fundelall_2ecpp_40',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
+ ['xb_5fzap_2ecpp_41',['xb_zap.cpp',['../xb__zap_8cpp.html',1,'']]],
+ ['xbalttbl_2ecpp_42',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
+ ['xbase_2eh_43',['xbase.h',['../xbase_8h.html',1,'']]],
+ ['xbbcd_2ecpp_44',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
+ ['xbbcd_2eh_45',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
+ ['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,'']]],
+ ['xbdelete_2ecpp_54',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
+ ['xbdrpix_2ecpp_55',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
+ ['xbdrptbl_2ecpp_56',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
+ ['xbexp_2ecpp_57',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
+ ['xbexp_2eh_58',['xbexp.h',['../xbexp_8h.html',1,'']]],
+ ['xbexpnode_2ecpp_59',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
+ ['xbexpnode_2eh_60',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
+ ['xbfields_2ecpp_61',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
+ ['xbfile_2ecpp_62',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
+ ['xbfile_2eh_63',['xbfile.h',['../xbfile_8h.html',1,'']]],
+ ['xbfilter_2ecpp_64',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
+ ['xbfilter_2eh_65',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
+ ['xbfuncs_2ecpp_66',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
+ ['xbindex_2eh_67',['xbindex.h',['../xbindex_8h.html',1,'']]],
+ ['xbinsert_2ecpp_68',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
+ ['xbixbase_2ecpp_69',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
+ ['xbixmdx_2ecpp_70',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
+ ['xbixndx_2ecpp_71',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
+ ['xblnklst_2eh_72',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
+ ['xblnklstord_2eh_73',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
+ ['xblnknod_2eh_74',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
+ ['xblog_2ecpp_75',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
+ ['xblog_2eh_76',['xblog.h',['../xblog_8h.html',1,'']]],
+ ['xbmemo_2ecpp_77',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
+ ['xbmemo_2eh_78',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
+ ['xbmemo3_2ecpp_79',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
+ ['xbmemo4_2ecpp_80',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
+ ['xbretcod_2eh_81',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
+ ['xbset_2ecpp_82',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
+ ['xbsql_2ecpp_83',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
+ ['xbsql_2eh_84',['xbsql.h',['../xbsql_8h.html',1,'']]],
+ ['xbssv_2ecpp_85',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
+ ['xbssv_2eh_86',['xbssv.h',['../xbssv_8h.html',1,'']]],
+ ['xbstring_2ecpp_87',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
+ ['xbstring_2eh_88',['xbstring.h',['../xbstring_8h.html',1,'']]],
+ ['xbtag_2ecpp_89',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
+ ['xbtag_2eh_90',['xbtag.h',['../xbtag_8h.html',1,'']]],
+ ['xbtblmgr_2ecpp_91',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
+ ['xbtblmgr_2eh_92',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
+ ['xbtypes_2eh_93',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
+ ['xbuda_2ecpp_94',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
+ ['xbuda_2eh_95',['xbuda.h',['../xbuda_8h.html',1,'']]],
+ ['xbxbase_2ecpp_96',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
+ ['xbxbase_2eh_97',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
];
diff --git a/docs/doxygen/html/search/functions_0.js b/docs/doxygen/html/search/functions_0.js
index 9e288ab..25f7a4e 100644
--- a/docs/doxygen/html/search/functions_0.js
+++ b/docs/doxygen/html/search/functions_0.js
@@ -5,5 +5,5 @@ var searchData=
['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#a721f69ccc7893842422a043468ffccea',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sTblName)'],['../classxb_1_1xbTblMgr.html#a62f6841849dbe5c1768f7e90f1b7e766',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sTblName, 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#a210707223fffc7b3ab31eca4ef29f731',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 pos, xbUInt32 n)'],['../classxb_1_1xbString.html#ab9045442e57293843652dfce6522ff83',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 n)']]]
+ ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 pos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 lCopyLen)']]]
];
diff --git a/docs/doxygen/html/search/functions_1.js b/docs/doxygen/html/search/functions_1.js
index d9c0a9c..a3b8ce1 100644
--- a/docs/doxygen/html/search/functions_1.js
+++ b/docs/doxygen/html/search/functions_1.js
@@ -1,5 +1,6 @@
var searchData=
[
- ['bitset_0',['BitSet',['../classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72',1,'xb::xbSsv']]],
- ['blankrecord_1',['BlankRecord',['../classxb_1_1xbDbf.html#a78da5a3d2011a3f2e7618cbdd3ba02d6',1,'xb::xbDbf']]]
+ ['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/docs/doxygen/html/search/functions_12.js b/docs/doxygen/html/search/functions_12.js
index b31073e..80ff6f4 100644
--- a/docs/doxygen/html/search/functions_12.js
+++ b/docs/doxygen/html/search/functions_12.js
@@ -1,6 +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']]],
- ['usage_2',['Usage',['../dbfxtrct_8cpp.html#a5ae07f63d6b390e42068d941038dadf2',1,'dbfxtrct.cpp']]]
+ ['undeleterecord_1',['UndeleteRecord',['../classxb_1_1xbDbf.html#a255681976a04fc722538bb630507b3a0',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/functions_15.js b/docs/doxygen/html/search/functions_15.js
index e09deb0..190bfe1 100644
--- a/docs/doxygen/html/search/functions_15.js
+++ b/docs/doxygen/html/search/functions_15.js
@@ -19,7 +19,7 @@ var searchData=
['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::xbRename(const xbString &amp;sOldName, const xbString &amp;sNewName)'],['../classxb_1_1xbFile.html#ab0b2a2c88947921d98ebcb5b5ec34ed9',1,'xb::xbFile::xbRename(const xbString &amp;sOldName, const xbString &amp;sNewName, xbInt16 iOption)']]],
+ ['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']]],
diff --git a/docs/doxygen/html/search/functions_3.js b/docs/doxygen/html/search/functions_3.js
index c4c09c9..e2fc7b3 100644
--- a/docs/doxygen/html/search/functions_3.js
+++ b/docs/doxygen/html/search/functions_3.js
@@ -15,6 +15,6 @@ var searchData=
['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#ab1f4a515533402f872cedcd0322aabd4',1,'xb::xbDbf']]],
- ['dumprecord_16',['DumpRecord',['../classxb_1_1xbDbf.html#a3a6a068addffd06fc9a996639d6ca69e',1,'xb::xbDbf']]]
+ ['dumpheader_15',['DumpHeader',['../classxb_1_1xbDbf.html#a309b5b1fb6a5c048c4bfb404d011ac55',1,'xb::xbDbf']]],
+ ['dumprecord_16',['DumpRecord',['../classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/functions_5.js b/docs/doxygen/html/search/functions_5.js
index 09a9029..d143ad3 100644
--- a/docs/doxygen/html/search/functions_5.js
+++ b/docs/doxygen/html/search/functions_5.js
@@ -1,8 +1,7 @@
var searchData=
[
- ['filecompare_0',['FileCompare',['../tstfuncs_8cpp.html#aa5dbb64c6135ac01f79e5b6087270cf5',1,'tstfuncs.cpp']]],
- ['fileexists_1',['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_2',['FileIsOpen',['../classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59',1,'xb::xbFile']]],
- ['flushlog_3',['FlushLog',['../classxb_1_1xbXBase.html#a5a5ecaed9777978344902446c9ae3b8e',1,'xb::xbXBase']]],
- ['formatdate_4',['FormatDate',['../classxb_1_1xbDate.html#a01de44dc869f7db99f33046fc91f2c6a',1,'xb::xbDate']]]
+ ['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/docs/doxygen/html/search/functions_6.js b/docs/doxygen/html/search/functions_6.js
index e6c6187..580f3f8 100644
--- a/docs/doxygen/html/search/functions_6.js
+++ b/docs/doxygen/html/search/functions_6.js
@@ -16,13 +16,13 @@ var searchData=
['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']]],
['geterrormessage_15',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
- ['getfield_16',['GetField',['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const']]],
+ ['getfield_16',['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_17',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
- ['getfielddecimal_18',['GetFieldDecimal',['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const'],['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const']]],
+ ['getfielddecimal_18',['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_19',['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_20',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
['getfieldno_21',['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_22',['GetFieldType',['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &amp;sFieldName, char &amp;cFieldType) const'],['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &amp;cFieldType) const']]],
+ ['getfieldtype_22',['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_23',['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_24',['GetFileExtPart',['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &amp;sFileExtPartOut) const'],['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileExtPartOut) const']]],
['getfilemtime_25',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
@@ -30,7 +30,7 @@ var searchData=
['getfilenamepart_27',['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_28',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
['getfiletype_29',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
- ['getfirstrecord_30',['GetFirstRecord',['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()']]],
+ ['getfirstrecord_30',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
['getfloatfield_31',['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_32',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
['getfunctioninfo_33',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
@@ -39,27 +39,28 @@ var searchData=
['getlogdirectory_36',['GetLogDirectory',['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase']]],
['getlogfilename_37',['GetLogFileName',['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase']]],
['getlogfqfilename_38',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
- ['getlogicalfield_39',['GetLogicalField',['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#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']]],
+ ['getlogicalfield_39',['GetLogicalField',['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#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']]],
['getlogstatus_40',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
['getlongfield_41',['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_42',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
- ['getnextrecord_43',['GetNextRecord',['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)'],['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)']]],
+ ['getnextrecord_43',['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_44',['GetNextSqlCmd',['../xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e',1,'xb_execsql.cpp']]],
['getopenmode_45',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
['getopentablecount_46',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
['getpathseparator_47',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString']]],
- ['getphysicalixcnt_48',['GetPhysicalIxCnt',['../classxb_1_1xbDbf.html#a13393704a8a191d4d6555ae31d3c3e92',1,'xb::xbDbf']]],
- ['getprevrecord_49',['GetPrevRecord',['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()']]],
- ['getrawfield_50',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
- ['getrecord_51',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
- ['getrecordbuf_52',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
- ['getrecordcnt_53',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
+ ['getprevrecord_48',['GetPrevRecord',['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()']]],
+ ['getrawfield_49',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
+ ['getrecord_50',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
+ ['getrecordbuf_51',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
+ ['getrecordcnt_52',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
+ ['getrecordcount_53',['GetRecordCount',['../classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce',1,'xb::xbDbf']]],
['getrecordlen_54',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
['getsharemode_55',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
['getsize_56',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
['gettblalias_57',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
- ['getulongfield_58',['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_59',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
- ['getxbasefiletypebyte_60',['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_61',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
+ ['gettbllistentry_58',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
+ ['getulongfield_59',['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_60',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
+ ['getxbasefiletypebyte_61',['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_62',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/functions_b.js b/docs/doxygen/html/search/functions_b.js
index 67213ee..7595e8a 100644
--- a/docs/doxygen/html/search/functions_b.js
+++ b/docs/doxygen/html/search/functions_b.js
@@ -1,7 +1,7 @@
var searchData=
[
- ['main_0',['main',['../xb__copydbf_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_copydbf.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__ndx2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx2.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../checkndx_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;checkndx.cpp'],['../dbfxtrct_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;dbfxtrct.cpp'],['../reindex_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;reindex.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d',1,'main(int, char **):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumpdbt.cpp'],['../xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumphdr.cpp'],['../xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumpix.cpp'],['../xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_execsql.cpp'],['../xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_undelall.cpp'],['../xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_zap.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.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__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'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.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']]],
- ['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#ac856fc1b110b46aefa1b2f5c0f530aa2',1,'xb::xbDbf']]],
+ ['main_0',['main',['../xb__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d',1,'main(int, char **):&#160;xb_dbfutil.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__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#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_copydbf.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumpdbt.cpp'],['../xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumphdr.cpp'],['../xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumpix.cpp'],['../xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_execsql.cpp'],['../xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_undelall.cpp'],['../xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_zap.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.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__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'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp']]],
+ ['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950',1,'xb::xbDbf']]],
['mid_2',['Mid',['../classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7',1,'xb::xbString']]],
['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]]
];
diff --git a/docs/doxygen/html/search/functions_d.js b/docs/doxygen/html/search/functions_d.js
index d967cbe..a292a5b 100644
--- a/docs/doxygen/html/search/functions_d.js
+++ b/docs/doxygen/html/search/functions_d.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['open_0',['Open',['../classxb_1_1xbDbf.html#ac658818bf9b8f8ff7467d8d80495b324',1,'xb::xbDbf::Open(const xbString &amp;sTableName, const xbString &amp;sAlias)'],['../classxb_1_1xbDbf.html#a97366c7362e409d7f09973a6aef8dad0',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)']]],
+ ['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']]],
diff --git a/docs/doxygen/html/search/functions_f.js b/docs/doxygen/html/search/functions_f.js
index cc0cfb1..cdd92e0 100644
--- a/docs/doxygen/html/search/functions_f.js
+++ b/docs/doxygen/html/search/functions_f.js
@@ -5,6 +5,8 @@ var searchData=
['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)']]],
- ['resize_5',['Resize',['../classxb_1_1xbString.html#aa6d346ab04e5bb8852f0bb996163a35e',1,'xb::xbString']]],
- ['rtrim_6',['Rtrim',['../classxb_1_1xbString.html#aaf330188d67c347ecae0d16f65b22077',1,'xb::xbString']]]
+ ['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/docs/doxygen/html/search/searchdata.js b/docs/doxygen/html/search/searchdata.js
index 5f125dd..cf012e6 100644
--- a/docs/doxygen/html/search/searchdata.js
+++ b/docs/doxygen/html/search/searchdata.js
@@ -3,7 +3,7 @@ var indexSectionsWithContent =
0: "abcdefghijlmnoprstuvwxyz~",
1: "x",
2: "x",
- 3: "cdrtx",
+ 3: "tx",
4: "abcdefghijlmnoprstuvwxyz~",
5: "ceiprstux",
6: "x",
diff --git a/docs/doxygen/html/structxb_1_1xbSchema.html b/docs/doxygen/html/structxb_1_1xbSchema.html
index 2e404a8..a1611c3 100644
--- a/docs/doxygen/html/structxb_1_1xbSchema.html
+++ b/docs/doxygen/html/structxb_1_1xbSchema.html
@@ -168,7 +168,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/structxb_1_1xbTblList.html b/docs/doxygen/html/structxb_1_1xbTblList.html
index 0589131..3842fb2 100644
--- a/docs/doxygen/html/structxb_1_1xbTblList.html
+++ b/docs/doxygen/html/structxb_1_1xbTblList.html
@@ -144,7 +144,7 @@ Data Fields</h2></td></tr>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
-<li>/mnt/1Tdata/xbase/xbase64-4.0.2/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/tstfuncs_8cpp.html b/docs/doxygen/html/tstfuncs_8cpp.html
index 58eb044..f9fb6f6 100644
--- a/docs/doxygen/html/tstfuncs_8cpp.html
+++ b/docs/doxygen/html/tstfuncs_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/tstfuncs.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -96,8 +96,6 @@ Functions</h2></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:aa5dbb64c6135ac01f79e5b6087270cf5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tstfuncs_8cpp.html#aa5dbb64c6135ac01f79e5b6087270cf5">FileCompare</a> (xbXBase &amp;x, xbInt16 iPo, const xbString &amp;sFile1, const xbString &amp;sFile2, const xbString &amp;sSkipBytes)</td></tr>
-<tr class="separator:aa5dbb64c6135ac01f79e5b6087270cf5"><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>
@@ -216,52 +214,6 @@ Variables</h2></td></tr>
</div>
</div>
-<a id="aa5dbb64c6135ac01f79e5b6087270cf5" name="aa5dbb64c6135ac01f79e5b6087270cf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa5dbb64c6135ac01f79e5b6087270cf5">&#9670;&nbsp;</a></span>FileCompare()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 FileCompare </td>
- <td>(</td>
- <td class="paramtype">xbXBase &amp;&#160;</td>
- <td class="paramname"><em>x</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iPo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const xbString &amp;&#160;</td>
- <td class="paramname"><em>sFile1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const xbString &amp;&#160;</td>
- <td class="paramname"><em>sFile2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const xbString &amp;&#160;</td>
- <td class="paramname"><em>sSkipBytes</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>
diff --git a/docs/doxygen/html/xb__cfg__check_8cpp.html b/docs/doxygen/html/xb__cfg__check_8cpp.html
index 913828b..d69fc0d 100644
--- a/docs/doxygen/html/xb__cfg__check_8cpp.html
+++ b/docs/doxygen/html/xb__cfg__check_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_cfg_check.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__copydbf_8cpp.html b/docs/doxygen/html/xb__copydbf_8cpp.html
index 9391377..e9e9cac 100644
--- a/docs/doxygen/html/xb__copydbf_8cpp.html
+++ b/docs/doxygen/html/xb__copydbf_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_copydbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__dbfutil_8cpp.html b/docs/doxygen/html/xb__dbfutil_8cpp.html
index 98a55e1..e1e9c21 100644
--- a/docs/doxygen/html/xb__dbfutil_8cpp.html
+++ b/docs/doxygen/html/xb__dbfutil_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_dbfutil.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__deletall_8cpp.html b/docs/doxygen/html/xb__deletall_8cpp.html
index 97e9d8e..0878f48 100644
--- a/docs/doxygen/html/xb__deletall_8cpp.html
+++ b/docs/doxygen/html/xb__deletall_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_deletall.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__dumpdbt_8cpp.html b/docs/doxygen/html/xb__dumpdbt_8cpp.html
index cc3c21a..a52b092 100644
--- a/docs/doxygen/html/xb__dumpdbt_8cpp.html
+++ b/docs/doxygen/html/xb__dumpdbt_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_dumpdbt.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__dumphdr_8cpp.html b/docs/doxygen/html/xb__dumphdr_8cpp.html
index 9649b34..696a816 100644
--- a/docs/doxygen/html/xb__dumphdr_8cpp.html
+++ b/docs/doxygen/html/xb__dumphdr_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_dumphdr.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__dumpix_8cpp.html b/docs/doxygen/html/xb__dumpix_8cpp.html
index 5703fcf..af02d57 100644
--- a/docs/doxygen/html/xb__dumpix_8cpp.html
+++ b/docs/doxygen/html/xb__dumpix_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_dumpix.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__dumprecs_8cpp.html b/docs/doxygen/html/xb__dumprecs_8cpp.html
index 26ac153..91de180 100644
--- a/docs/doxygen/html/xb__dumprecs_8cpp.html
+++ b/docs/doxygen/html/xb__dumprecs_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_dumprecs.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__ex__date_8cpp.html b/docs/doxygen/html/xb__ex__date_8cpp.html
index 26a022c..7479bb2 100644
--- a/docs/doxygen/html/xb__ex__date_8cpp.html
+++ b/docs/doxygen/html/xb__ex__date_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/examples/xb_ex_date.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__ex__sql_8cpp.html b/docs/doxygen/html/xb__ex__sql_8cpp.html
index 8235a6e..b81c3e9 100644
--- a/docs/doxygen/html/xb__ex__sql_8cpp.html
+++ b/docs/doxygen/html/xb__ex__sql_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/examples/xb_ex_sql.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__ex__string_8cpp.html b/docs/doxygen/html/xb__ex__string_8cpp.html
index ac23b81..2b3a639 100644
--- a/docs/doxygen/html/xb__ex__string_8cpp.html
+++ b/docs/doxygen/html/xb__ex__string_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/examples/xb_ex_string.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html b/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html
index 7e94726..bbdaec8 100644
--- a/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html
+++ b/docs/doxygen/html/xb__ex__v3__create__dbf_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/examples/xb_ex_v3_create_dbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html b/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html
index c4c8d7c..189151c 100644
--- a/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html
+++ b/docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/examples/xb_ex_v3_upd_dbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html b/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html
index cfc9c5a..473e312 100644
--- a/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html
+++ b/docs/doxygen/html/xb__ex__v4__create__dbf_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/examples/xb_ex_v4_create_dbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html b/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html
index 4bdf988..326dbd4 100644
--- a/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html
+++ b/docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/examples/xb_ex_v4_upd_dbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__execsql_8cpp.html b/docs/doxygen/html/xb__execsql_8cpp.html
index d356015..1c7e737 100644
--- a/docs/doxygen/html/xb__execsql_8cpp.html
+++ b/docs/doxygen/html/xb__execsql_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_execsql.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__pack_8cpp.html b/docs/doxygen/html/xb__pack_8cpp.html
index c6ef049..3a2e728 100644
--- a/docs/doxygen/html/xb__pack_8cpp.html
+++ b/docs/doxygen/html/xb__pack_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_pack.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__tblinfo_8cpp.html b/docs/doxygen/html/xb__tblinfo_8cpp.html
index 5f42fec..b464098 100644
--- a/docs/doxygen/html/xb__tblinfo_8cpp.html
+++ b/docs/doxygen/html/xb__tblinfo_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_tblinfo.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__bcd_8cpp.html b/docs/doxygen/html/xb__test__bcd_8cpp.html
index e0e5235..05a6e51 100644
--- a/docs/doxygen/html/xb__test__bcd_8cpp.html
+++ b/docs/doxygen/html/xb__test__bcd_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_bcd.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__date_8cpp.html b/docs/doxygen/html/xb__test__date_8cpp.html
index 8fe8cc1..31c0209 100644
--- a/docs/doxygen/html/xb__test__date_8cpp.html
+++ b/docs/doxygen/html/xb__test__date_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_date.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html b/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html
index 54ca301..008e7ab 100644
--- a/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html
+++ b/docs/doxygen/html/xb__test__dbf__v3__memos_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_dbf_v3_memos.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html b/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html
index 2b8913d..7ef53c3 100644
--- a/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html
+++ b/docs/doxygen/html/xb__test__dbf__v3__nomemos_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_dbf_v3_nomemos.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html b/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html
index def7aeb..e4fd262 100644
--- a/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html
+++ b/docs/doxygen/html/xb__test__dbf__v4__memos_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_dbf_v4_memos.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html b/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html
index bedb3b2..dfc126b 100644
--- a/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html
+++ b/docs/doxygen/html/xb__test__dbf__v4__nomemos_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_dbf_v4_nomemos.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__expnode_8cpp.html b/docs/doxygen/html/xb__test__expnode_8cpp.html
index 97fb5b9..ac3be1d 100644
--- a/docs/doxygen/html/xb__test__expnode_8cpp.html
+++ b/docs/doxygen/html/xb__test__expnode_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_expnode.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__expression_8cpp.html b/docs/doxygen/html/xb__test__expression_8cpp.html
index 1ea1429..8d33a91 100644
--- a/docs/doxygen/html/xb__test__expression_8cpp.html
+++ b/docs/doxygen/html/xb__test__expression_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_expression.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__file_8cpp.html b/docs/doxygen/html/xb__test__file_8cpp.html
index 0b33a8b..46db655 100644
--- a/docs/doxygen/html/xb__test__file_8cpp.html
+++ b/docs/doxygen/html/xb__test__file_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_file.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__filter_8cpp.html b/docs/doxygen/html/xb__test__filter_8cpp.html
index e3b9812..bafc24d 100644
--- a/docs/doxygen/html/xb__test__filter_8cpp.html
+++ b/docs/doxygen/html/xb__test__filter_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_filter.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__funcs_8cpp.html b/docs/doxygen/html/xb__test__funcs_8cpp.html
index 796e2f2..639d97e 100644
--- a/docs/doxygen/html/xb__test__funcs_8cpp.html
+++ b/docs/doxygen/html/xb__test__funcs_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_funcs.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__linklist_8cpp.html b/docs/doxygen/html/xb__test__linklist_8cpp.html
index caad378..51d1df3 100644
--- a/docs/doxygen/html/xb__test__linklist_8cpp.html
+++ b/docs/doxygen/html/xb__test__linklist_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_linklist.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__lock2_8cpp.html b/docs/doxygen/html/xb__test__lock2_8cpp.html
index 7a7849d..ae965a9 100644
--- a/docs/doxygen/html/xb__test__lock2_8cpp.html
+++ b/docs/doxygen/html/xb__test__lock2_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_lock2.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__lock_8cpp.html b/docs/doxygen/html/xb__test__lock_8cpp.html
index 9b9277f..6d369bf 100644
--- a/docs/doxygen/html/xb__test__lock_8cpp.html
+++ b/docs/doxygen/html/xb__test__lock_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_lock.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__log_8cpp.html b/docs/doxygen/html/xb__test__log_8cpp.html
index 707a6b4..033fe18 100644
--- a/docs/doxygen/html/xb__test__log_8cpp.html
+++ b/docs/doxygen/html/xb__test__log_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_log.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__mdx_8cpp.html b/docs/doxygen/html/xb__test__mdx_8cpp.html
index db304f9..c9176e4 100644
--- a/docs/doxygen/html/xb__test__mdx_8cpp.html
+++ b/docs/doxygen/html/xb__test__mdx_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_mdx.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__ndx_8cpp.html b/docs/doxygen/html/xb__test__ndx_8cpp.html
index 767ed2c..eb9732d 100644
--- a/docs/doxygen/html/xb__test__ndx_8cpp.html
+++ b/docs/doxygen/html/xb__test__ndx_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_ndx.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__sql_8cpp.html b/docs/doxygen/html/xb__test__sql_8cpp.html
index e5c8d4b..3305469 100644
--- a/docs/doxygen/html/xb__test__sql_8cpp.html
+++ b/docs/doxygen/html/xb__test__sql_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_sql.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__string_8cpp.html b/docs/doxygen/html/xb__test__string_8cpp.html
index e387d95..6774b85 100644
--- a/docs/doxygen/html/xb__test__string_8cpp.html
+++ b/docs/doxygen/html/xb__test__string_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_string.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__tblmgr_8cpp.html b/docs/doxygen/html/xb__test__tblmgr_8cpp.html
index f4a0ba2..597f66c 100644
--- a/docs/doxygen/html/xb__test__tblmgr_8cpp.html
+++ b/docs/doxygen/html/xb__test__tblmgr_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_tblmgr.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__uda_8cpp.html b/docs/doxygen/html/xb__test__uda_8cpp.html
index 7aec205..a46aeb2 100644
--- a/docs/doxygen/html/xb__test__uda_8cpp.html
+++ b/docs/doxygen/html/xb__test__uda_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_uda.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__test__xbase_8cpp.html b/docs/doxygen/html/xb__test__xbase_8cpp.html
index 1799686..71b36f5 100644
--- a/docs/doxygen/html/xb__test__xbase_8cpp.html
+++ b/docs/doxygen/html/xb__test__xbase_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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_xbase.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__undelall_8cpp.html b/docs/doxygen/html/xb__undelall_8cpp.html
index 4fa838b..8ac455f 100644
--- a/docs/doxygen/html/xb__undelall_8cpp.html
+++ b/docs/doxygen/html/xb__undelall_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_undelall.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xb__zap_8cpp.html b/docs/doxygen/html/xb__zap_8cpp.html
index f044ade..7f84f88 100644
--- a/docs/doxygen/html/xb__zap_8cpp.html
+++ b/docs/doxygen/html/xb__zap_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/xb_zap.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbalttbl_8cpp.html b/docs/doxygen/html/xbalttbl_8cpp.html
new file mode 100644
index 0000000..cd474a9
--- /dev/null
+++ b/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.0.3/src/sql/xbalttbl.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbalttbl.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xbase_8h.html b/docs/doxygen/html/xbase_8h.html
index 1d54086..dc746f9 100644
--- a/docs/doxygen/html/xbase_8h.html
+++ b/docs/doxygen/html/xbase_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbase.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbase_8h_source.html b/docs/doxygen/html/xbase_8h_source.html
index 74eae66..f79396f 100644
--- a/docs/doxygen/html/xbase_8h_source.html
+++ b/docs/doxygen/html/xbase_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbase.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -130,39 +130,41 @@ $(function() {
<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_VARARGS_H</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="preprocessor">#include &lt;varargs.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_WINDOWS_H</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#include &lt;windows.h&gt;</span></div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor">#include &lt;io.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> </div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor">#include &lt;iomanip&gt;</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="preprocessor">#ifndef HAVE_STDARG_H</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#include &lt;varargs.h&gt;</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#endif</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="preprocessor">#ifdef HAVE_WINDOWS_H</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor">#include &lt;io.h&gt;</span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="preprocessor">#include &lt;<a class="code" href="xbretcod_8h.html">xbretcod.h</a>&gt;</span></div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="preprocessor">#include &lt;<a class="code" href="xbtypes_8h.html">xbtypes.h</a>&gt;</span></div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="preprocessor">#include &lt;<a class="code" href="xbstring_8h.html">xbstring.h</a>&gt;</span></div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="preprocessor">#include &lt;<a class="code" href="xbssv_8h.html">xbssv.h</a>&gt;</span></div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#include &lt;<a class="code" href="xbdate_8h.html">xbdate.h</a>&gt;</span></div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="preprocessor">#include &lt;<a class="code" href="xbtblmgr_8h.html">xbtblmgr.h</a>&gt;</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="xbxbase_8h.html">xbxbase.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="xblnknod_8h.html">xblnknod.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="xblnklst_8h.html">xblnklst.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="xblnklstord_8h.html">xblnklstord.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="xbfile_8h.html">xbfile.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="xblog_8h.html">xblog.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="xbmemo_8h.html">xbmemo.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="xbbcd_8h.html">xbbcd.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="xbuda_8h.html">xbuda.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="xbexpnode_8h.html">xbexpnode.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="xbexp_8h.html">xbexp.h</a>&gt;</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><span class="preprocessor">#include &lt;<a class="code" href="xbtag_8h.html">xbtag.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="xbdbf_8h.html">xbdbf.h</a>&gt;</span> <span class="comment">/* dbf base class */</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="xbindex_8h.html">xbindex.h</a>&gt;</span> <span class="comment">/* index base class */</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="xbfilter_8h.html">xbfilter.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="xbsql_8h.html">xbsql.h</a>&gt;</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="preprocessor">#include &lt;iomanip&gt;</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="preprocessor">#include &lt;<a class="code" href="xbretcod_8h.html">xbretcod.h</a>&gt;</span></div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="preprocessor">#include &lt;<a class="code" href="xbtypes_8h.html">xbtypes.h</a>&gt;</span></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#include &lt;<a class="code" href="xbstring_8h.html">xbstring.h</a>&gt;</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="preprocessor">#include &lt;<a class="code" href="xbssv_8h.html">xbssv.h</a>&gt;</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="xbdate_8h.html">xbdate.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="xbtblmgr_8h.html">xbtblmgr.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="xbxbase_8h.html">xbxbase.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="xblnknod_8h.html">xblnknod.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="xblnklst_8h.html">xblnklst.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="xblnklstord_8h.html">xblnklstord.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="xbfile_8h.html">xbfile.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="xblog_8h.html">xblog.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="xbmemo_8h.html">xbmemo.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="xbbcd_8h.html">xbbcd.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="xbuda_8h.html">xbuda.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="xbexpnode_8h.html">xbexpnode.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="xbexp_8h.html">xbexp.h</a>&gt;</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><span class="preprocessor">#include &lt;<a class="code" href="xbtag_8h.html">xbtag.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="xbdbf_8h.html">xbdbf.h</a>&gt;</span> <span class="comment">/* dbf base class */</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="xbindex_8h.html">xbindex.h</a>&gt;</span> <span class="comment">/* index base class */</span></div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="preprocessor">#include &lt;<a class="code" href="xbfilter_8h.html">xbfilter.h</a>&gt;</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="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="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>
diff --git a/docs/doxygen/html/xbbcd_8cpp.html b/docs/doxygen/html/xbbcd_8cpp.html
index 9af4fab..54c4b5f 100644
--- a/docs/doxygen/html/xbbcd_8cpp.html
+++ b/docs/doxygen/html/xbbcd_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbbcd.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbbcd_8h.html b/docs/doxygen/html/xbbcd_8h.html
index 84a854b..656c563 100644
--- a/docs/doxygen/html/xbbcd_8h.html
+++ b/docs/doxygen/html/xbbcd_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbbcd.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbbcd_8h_source.html b/docs/doxygen/html/xbbcd_8h_source.html
index 42621e0..d442eb4 100644
--- a/docs/doxygen/html/xbbcd_8h_source.html
+++ b/docs/doxygen/html/xbbcd_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbbcd.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -136,33 +136,31 @@ $(function() {
<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><span class="comment">// void StringToBcdOld( const xbString &amp;sStringIn );</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> xbInt16 Compare( <span class="keyword">const</span> xbBcd &amp;bcdIn );</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> xbInt16 Compare( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d );</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="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="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">const</span> <span class="keywordtype">void</span> * GetBcd() <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> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> ctor();</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> GetEncDigitsNoSign() <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> GetSign() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">unsigned</span> GetSigDigits() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">unsigned</span> GetActualSigDigits() <span class="keyword">const</span>;</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="comment">// xbBcdStruc bcdOld;</span></div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> xbBcdStruct bcd;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</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>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</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="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="preprocessor">#endif </span><span class="comment">/* XB_INDEX_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_BCD_H__ */</span><span class="preprocessor"></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 -->
diff --git a/docs/doxygen/html/xbcrix_8cpp.html b/docs/doxygen/html/xbcrix_8cpp.html
index 2064f23..9da453c 100644
--- a/docs/doxygen/html/xbcrix_8cpp.html
+++ b/docs/doxygen/html/xbcrix_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/sql/xbcrix.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbcrtbl_8cpp.html b/docs/doxygen/html/xbcrtbl_8cpp.html
index 17a6408..830c956 100644
--- a/docs/doxygen/html/xbcrtbl_8cpp.html
+++ b/docs/doxygen/html/xbcrtbl_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/sql/xbcrtbl.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbdate_8cpp.html b/docs/doxygen/html/xbdate_8cpp.html
index 4f81e8f..933fca7 100644
--- a/docs/doxygen/html/xbdate_8cpp.html
+++ b/docs/doxygen/html/xbdate_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbdate.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbdate_8h.html b/docs/doxygen/html/xbdate_8h.html
index b267860..0787c5e 100644
--- a/docs/doxygen/html/xbdate_8h.html
+++ b/docs/doxygen/html/xbdate_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbdate.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbdate_8h_source.html b/docs/doxygen/html/xbdate_8h_source.html
index 7be2723..087d5ed 100644
--- a/docs/doxygen/html/xbdate_8h_source.html
+++ b/docs/doxygen/html/xbdate_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbdate.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbdbf3_8cpp.html b/docs/doxygen/html/xbdbf3_8cpp.html
index e9b5e6a..406aa1f 100644
--- a/docs/doxygen/html/xbdbf3_8cpp.html
+++ b/docs/doxygen/html/xbdbf3_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbdbf3.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbdbf4_8cpp.html b/docs/doxygen/html/xbdbf4_8cpp.html
index 29e9027..8e11ded 100644
--- a/docs/doxygen/html/xbdbf4_8cpp.html
+++ b/docs/doxygen/html/xbdbf4_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbdbf4.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbdbf_8cpp.html b/docs/doxygen/html/xbdbf_8cpp.html
index a7b9841..23135a7 100644
--- a/docs/doxygen/html/xbdbf_8cpp.html
+++ b/docs/doxygen/html/xbdbf_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbdbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbdbf_8h.html b/docs/doxygen/html/xbdbf_8h.html
index 0975435..b509172 100644
--- a/docs/doxygen/html/xbdbf_8h.html
+++ b/docs/doxygen/html/xbdbf_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbdbf.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbdbf_8h_source.html b/docs/doxygen/html/xbdbf_8h_source.html
index 6340920..0a8b612 100644
--- a/docs/doxygen/html/xbdbf_8h_source.html
+++ b/docs/doxygen/html/xbdbf_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbdbf.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -194,8 +194,8 @@ $(function() {
<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"><a class="line" href="classxb_1_1xbDbf.html#ab1f4a515533402f872cedcd0322aabd4"> 167</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#ab1f4a515533402f872cedcd0322aabd4">DumpHeader</a> ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a3a6a068addffd06fc9a996639d6ca69e"> 168</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#a3a6a068addffd06fc9a996639d6ca69e">DumpRecord</a> ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">virtual</span> xbInt16 DumpHeader ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">virtual</span> xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">virtual</span> xbInt16 GetAutoCommit () <span class="keyword">const</span>;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">virtual</span> xbInt16 GetAutoCommit ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">virtual</span> xbUInt32 GetCurRecNo () <span class="keyword">const</span>;</div>
@@ -209,363 +209,363 @@ $(function() {
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">virtual</span> xbInt16 GetNextRecord ();</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">virtual</span> xbInt16 GetNextRecord ( xbInt16 iOption );</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keyword">virtual</span> xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a13393704a8a191d4d6555ae31d3c3e92"> 182</a></span> <span class="keyword">virtual</span> xbInt32 <a class="code hl_function" href="classxb_1_1xbDbf.html#a13393704a8a191d4d6555ae31d3c3e92">GetPhysicalIxCnt</a> () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> xbInt16 GetPrevRecord ();</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 GetPrevRecord ( xbInt16 iOption );</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 GetRecord ( xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">virtual</span> xbInt16 GetRecordCnt ( xbUInt32 &amp; ulRecCnt );</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</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="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">virtual</span> xbUInt16 GetRecordLen () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</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="l00190" name="l00190"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6"> 190</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="l00191" name="l00191"></a><span class="lineno"> 191</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="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ac856fc1b110b46aefa1b2f5c0f530aa2"> 193</a></span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> <a class="code hl_function" href="classxb_1_1xbDbf.html#ac856fc1b110b46aefa1b2f5c0f530aa2">MemoFieldsExist</a> () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">virtual</span> xbInt16 GetPrevRecord ();</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> xbInt16 GetPrevRecord ( xbInt16 iOption );</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 GetRecord ( xbUInt32 ulRecNo );</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="keyword">virtual</span> xbUInt32 GetRecordCount ();</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">virtual</span> xbInt16 GetRecordCnt ( xbUInt32 &amp; ulRecCnt );</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> * GetRecordBuf ( xbInt16 iOpt = 0 ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">virtual</span> xbUInt16 GetRecordLen () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</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="l00192" name="l00192"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6"> 192</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="l00193" name="l00193"></a><span class="lineno"> 193</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="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a97366c7362e409d7f09973a6aef8dad0"> 195</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#a97366c7362e409d7f09973a6aef8dad0">Open</a> ( <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="l00196" name="l00196"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ac658818bf9b8f8ff7467d8d80495b324"> 196</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#ac658818bf9b8f8ff7467d8d80495b324">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 );</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf"> 197</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="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">virtual</span> xbInt16 Pack ();</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> xbInt16 Pack ( xbUInt32 &amp;ulDeletedRecCnt );</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> </div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">virtual</span> xbInt16 PutRecord (); <span class="comment">// Put record to current location</span></div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">virtual</span> xbInt16 PutRecord ( xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">virtual</span> xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">virtual</span> xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) <span class="keyword">const</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> <span class="keyword">virtual</span> xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );</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 UndeleteAllRecords();</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">virtual</span> xbInt16 UndeleteRecord ();</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keyword">virtual</span> xbInt16 Zap ();</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="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="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">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="l00199" name="l00199"></a><span class="lineno"> 199</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="l00200" name="l00200"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4d018cbf44d8d8b2145c9acab02c8adf"> 200</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="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 Pack ();</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">virtual</span> xbInt16 Pack ( xbUInt32 &amp;ulDeletedRecCnt );</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">virtual</span> xbInt16 PutRecord (); <span class="comment">// Put record to current location</span></div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">virtual</span> xbInt16 PutRecord ( xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">virtual</span> xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keyword">virtual</span> xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708"> 209</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="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="keyword">virtual</span> xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );</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> </div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="comment">/* field methods */</span></div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="comment">//virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;</span></div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</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="l00217" name="l00217"></a><span class="lineno"> 217</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="l00218" name="l00218"></a><span class="lineno"> 218</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="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">virtual</span> xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</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="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">virtual</span> xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &amp;iFieldLen ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</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="l00223" name="l00223"></a><span class="lineno"> 223</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="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</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="l00226" name="l00226"></a><span class="lineno"> 226</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="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="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="l00229" name="l00229"></a><span class="lineno"> 229</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="l00230" name="l00230"></a><span class="lineno"> 230</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="l00231" name="l00231"></a><span class="lineno"> 231</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="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">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="l00234" name="l00234"></a><span class="lineno"> 234</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="l00235" name="l00235"></a><span class="lineno"> 235</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="l00236" name="l00236"></a><span class="lineno"> 236</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="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</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="l00239" name="l00239"></a><span class="lineno"> 239</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="l00240" name="l00240"></a><span class="lineno"> 240</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="l00241" name="l00241"></a><span class="lineno"> 241</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="l00242" name="l00242"></a><span class="lineno"> 242</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="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="keyword">virtual</span> xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</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="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keyword">virtual</span> xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );</div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keyword">virtual</span> xbInt16 PutLongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbInt32 lFieldValue );</div>
-<div class="line"><a id="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="keyword">virtual</span> xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</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="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">virtual</span> xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</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="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="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="l00255" name="l00255"></a><span class="lineno"> 255</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="l00256" name="l00256"></a><span class="lineno"> 256</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="l00257" name="l00257"></a><span class="lineno"> 257</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="l00258" name="l00258"></a><span class="lineno"> 258</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="l00259" name="l00259"></a><span class="lineno"> 259</span> </div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</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="l00261" name="l00261"></a><span class="lineno"> 261</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="l00262" name="l00262"></a><span class="lineno"> 262</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="l00263" name="l00263"></a><span class="lineno"> 263</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="l00264" name="l00264"></a><span class="lineno"> 264</span> </div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</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="l00266" name="l00266"></a><span class="lineno"> 266</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="l00267" name="l00267"></a><span class="lineno"> 267</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="l00268" name="l00268"></a><span class="lineno"> 268</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="l00269" name="l00269"></a><span class="lineno"> 269</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><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldCnt () <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> xbMemo *GetMemoPtr ();</div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keyword">virtual</span> xbUInt32 GetCreateMemoBlockSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</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="l00277" name="l00277"></a><span class="lineno"> 277</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="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &amp;ullMemoFieldLen );</div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</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="l00280" name="l00280"></a><span class="lineno"> 280</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="l00281" name="l00281"></a><span class="lineno"> 281</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="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;</div>
-<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</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="l00284" name="l00284"></a><span class="lineno"> 284</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="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div>
-<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> </div>
-<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keyword">virtual</span> xbInt16 LockTable ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">virtual</span> xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keyword">virtual</span> xbInt16 LockAppend ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="keyword">virtual</span> xbInt16 LockHeader ( xbInt16 iLockFunction );</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><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">virtual</span> xbInt16 LockMemo ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</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="l00297" name="l00297"></a><span class="lineno"> 297</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_LOCK</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_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keyword">virtual</span> xbInt16 LockIndices ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">virtual</span> xbInt16 UndeleteAllRecords();</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">virtual</span> xbInt16 UndeleteRecord ();</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">virtual</span> xbInt16 Zap ();</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="comment">/* field methods */</span></div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="comment">//virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;</span></div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</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="l00221" name="l00221"></a><span class="lineno"> 221</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="l00222" name="l00222"></a><span class="lineno"> 222</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="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">virtual</span> xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal ) <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 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="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">virtual</span> xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &amp;iFieldLen ) <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 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="l00227" name="l00227"></a><span class="lineno"> 227</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="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="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="l00230" name="l00230"></a><span class="lineno"> 230</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="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 GetFieldType( xbInt16 iFieldNo, <span class="keywordtype">char</span> &amp;cFieldType ) <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 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="l00234" name="l00234"></a><span class="lineno"> 234</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="l00235" name="l00235"></a><span class="lineno"> 235</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="l00236" name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</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="l00238" name="l00238"></a><span class="lineno"> 238</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="l00239" name="l00239"></a><span class="lineno"> 239</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="l00240" name="l00240"></a><span class="lineno"> 240</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="l00241" name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="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="l00243" name="l00243"></a><span class="lineno"> 243</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="l00244" name="l00244"></a><span class="lineno"> 244</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="l00245" name="l00245"></a><span class="lineno"> 245</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="l00246" name="l00246"></a><span class="lineno"> 246</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="l00247" name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keyword">virtual</span> xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &amp;lFieldValue ) <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 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="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keyword">virtual</span> xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );</div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">virtual</span> xbInt16 PutLongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbInt32 lFieldValue );</div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keyword">virtual</span> xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</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="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keyword">virtual</span> xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );</div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</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="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</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="l00259" name="l00259"></a><span class="lineno"> 259</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="l00260" name="l00260"></a><span class="lineno"> 260</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="l00261" name="l00261"></a><span class="lineno"> 261</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="l00262" name="l00262"></a><span class="lineno"> 262</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="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</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="l00265" name="l00265"></a><span class="lineno"> 265</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="l00266" name="l00266"></a><span class="lineno"> 266</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="l00267" name="l00267"></a><span class="lineno"> 267</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="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">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="l00270" name="l00270"></a><span class="lineno"> 270</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="l00271" name="l00271"></a><span class="lineno"> 271</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="l00272" name="l00272"></a><span class="lineno"> 272</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="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="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldCnt () <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> xbMemo *GetMemoPtr ();</div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keyword">virtual</span> xbUInt32 GetCreateMemoBlockSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</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="l00281" name="l00281"></a><span class="lineno"> 281</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="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &amp;ullMemoFieldLen );</div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</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="l00284" name="l00284"></a><span class="lineno"> 284</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="l00285" name="l00285"></a><span class="lineno"> 285</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="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</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="l00288" name="l00288"></a><span class="lineno"> 288</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="l00289" name="l00289"></a><span class="lineno"> 289</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keyword">virtual</span> xbInt16 LockTable ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keyword">virtual</span> xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">virtual</span> xbInt16 LockAppend ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keyword">virtual</span> xbInt16 LockHeader ( xbInt16 iLockFunction );</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><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keyword">virtual</span> xbInt16 LockMemo ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</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="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_LOCK</span></div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> </div>
-<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> xbInt16 GetAutoLock () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">void</span> SetAutoLock ( xbInt16 iAutoLock );</div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> xbInt16 GetLockFlavor () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keywordtype">void</span> SetLockFlavor ( xbInt16 iLockFlavor );</div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetTableLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetHeaderLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> xbUInt32 GetAppendLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> xbLinkListNode&lt;xbUInt32&gt; * GetFirstRecLock () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> </div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordtype">void</span> DumpTableLockStatus() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span><span class="preprocessor"> #endif </span><span class="comment">// XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> </div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> </div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keyword">virtual</span> xbInt16 CloseIndexFile( xbIx *pIx );</div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</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="l00321" name="l00321"></a><span class="lineno"> 321</span> xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, <span class="keywordtype">void</span> **vpTagOut );</div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</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="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keyword">virtual</span> xbInt16 DeleteAllIndexFiles();</div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</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="l00325" name="l00325"></a><span class="lineno"> 325</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="l00326" name="l00326"></a><span class="lineno"> 326</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="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keyword">virtual</span> xbIx *GetCurIx() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetCurTag() <span class="keyword">const</span>;</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> <span class="keyword">virtual</span> xbInt16 GetFirstKey();</div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keyword">virtual</span> xbInt16 GetNextKey();</div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey();</div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">virtual</span> xbInt16 GetLastKey();</div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> </div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="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="l00336" name="l00336"></a><span class="lineno"> 336</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="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">virtual</span> xbIxList *GetIxList() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> xbLinkListNode&lt;xbTag *&gt; *GetTagList () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</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="l00340" name="l00340"></a><span class="lineno"> 340</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="l00341" name="l00341"></a><span class="lineno"> 341</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="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );</div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keyword">virtual</span> xbInt16 Reindex( xbInt16 iTagOpt );</div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span><span class="preprocessor"> #endif </span><span class="comment">// XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div>
-<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span><span class="preprocessor"> #ifdef XB_NDXINF_SUPPORT</span></div>
-<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</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="l00351" name="l00351"></a><span class="lineno"> 351</span> xbLinkListNode&lt;xbString&gt; *GetNdxInfList() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span><span class="preprocessor"> #endif </span><span class="comment">// XB_NDXINF_SUPPORT</span></div>
-<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> </div>
-<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="comment">//#ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="comment">//virtual xbInt16 GetCreateMdxBlockSize() const;</span></div>
-<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="comment">//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</span></div>
-<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="comment">//#endif</span></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> </div>
-<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> </div>
-<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIx;</div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIxMdx;</div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> </div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> 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="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">void</span> ClearTagList();</div>
-<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keyword">virtual</span> xbInt16 GetNdxInfFileName( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNdxIdxFileName );</div>
-<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> xbInt16 RemoveIndex( xbIx * ix );</div>
-<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</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="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keyword">virtual</span> xbInt16 UpdateTagList ();</div>
-<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> </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"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</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="l00378" name="l00378"></a><span class="lineno"> 378</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="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPORT</span></div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keyword">virtual</span> xbInt16 LockIndices ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> xbInt16 GetAutoLock () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordtype">void</span> SetAutoLock ( xbInt16 iAutoLock );</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> xbInt16 GetLockFlavor () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keywordtype">void</span> SetLockFlavor ( xbInt16 iLockFlavor );</div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetTableLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetHeaderLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> xbUInt32 GetAppendLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> xbLinkListNode&lt;xbUInt32&gt; * GetFirstRecLock () <span class="keyword">const</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="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">void</span> DumpTableLockStatus() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="preprocessor"> #endif </span><span class="comment">// XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );</div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">virtual</span> xbInt16 CloseIndexFile( xbIx *pIx );</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</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="l00326" name="l00326"></a><span class="lineno"> 326</span> xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, <span class="keywordtype">void</span> **vpTagOut );</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</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="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keyword">virtual</span> xbInt16 DeleteAllIndexFiles();</div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</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="l00330" name="l00330"></a><span class="lineno"> 330</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="l00331" name="l00331"></a><span class="lineno"> 331</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="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">virtual</span> xbIx *GetCurIx() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetCurTag() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey();</div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">virtual</span> xbInt16 GetNextKey();</div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey();</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keyword">virtual</span> xbInt16 GetLastKey();</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">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="l00341" name="l00341"></a><span class="lineno"> 341</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="l00342" name="l00342"></a><span class="lineno"> 342</span> <span class="keyword">virtual</span> xbIxList *GetIxList() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">virtual</span> xbInt32 GetPhysicalIxCnt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> xbLinkListNode&lt;xbTag *&gt; *GetTagList () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> </div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</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="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">virtual</span> xbInt16 Reindex( xbInt16 iTagOpt );</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</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="l00349" name="l00349"></a><span class="lineno"> 349</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="l00350" name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</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="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</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="l00355" name="l00355"></a><span class="lineno"> 355</span> xbLinkListNode&lt;xbString&gt; *GetInfList() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></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="comment">//#ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <span class="comment">//virtual xbInt16 GetCreateMdxBlockSize() const;</span></div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="comment">//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</span></div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="comment">//#endif</span></div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</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> </div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIx;</div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIxMdx;</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> 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="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keywordtype">void</span> ClearTagList();</div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> xbInt16 RemoveIndex( xbIx * ix );</div>
+<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</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="l00374" name="l00374"></a><span class="lineno"> 374</span> <span class="keyword">virtual</span> xbInt16 UpdateTagList ();</div>
+<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</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="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> </div>
-<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> xbInt16 iMemoFieldCnt; <span class="comment">// Memo field cnt in the table</span></div>
-<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> xbMemo *Memo; <span class="comment">// Pointer to memo class</span></div>
-<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> xbUInt32 ulCreateMemoBlockSize; <span class="comment">// blocksize to use when creating dbt file</span></div>
-<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span><span class="preprocessor"> #endif</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="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</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="l00384" name="l00384"></a><span class="lineno"> 384</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="l00385" name="l00385"></a><span class="lineno"> 385</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPORT</span></div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> </div>
-<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span><span class="preprocessor"> #ifdef XB_NDXINF_SUPPORT</span></div>
-<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="keyword">virtual</span> xbInt16 DeleteNdxInfData();</div>
-<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="keyword">virtual</span> xbInt16 LoadNdxInfData();</div>
-<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keyword">virtual</span> xbInt16 SaveNdxInfData();</div>
-<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span><span class="preprocessor"> #endif </span><span class="comment">// XB_NDXINF_SUPPORT</span></div>
+<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> xbInt16 iMemoFieldCnt; <span class="comment">// Memo field cnt in the table</span></div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> xbMemo *Memo; <span class="comment">// Pointer to memo class</span></div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> xbUInt32 ulCreateMemoBlockSize; <span class="comment">// blocksize to use when creating dbt file</span></div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span><span class="preprocessor"> #endif</span></div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> </div>
-<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="comment"> #ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span><span class="comment"> xbInt16 iCreateMdxBlockSize;</span></div>
-<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="comment"> #endif // XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keyword">virtual</span> xbInt16 DeleteInfData();</div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keyword">virtual</span> xbInt16 LoadInfData();</div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="keyword">virtual</span> xbInt16 SaveInfData();</div>
+<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> </div>
-<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</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="l00400" name="l00400"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323"> 400</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> InitVars(); </div>
-<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d"> 401</a></span> <span class="keyword">virtual</span> xbInt16 SetVersion() = 0;</div>
-<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</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="l00403" name="l00403"></a><span class="lineno"> 403</span> xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );</div>
+<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span><span class="comment"> #ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span><span class="comment"> xbInt16 iCreateMdxBlockSize;</span></div>
+<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span><span class="comment"> #endif // XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span><span class="comment">*/</span></div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> </div>
-<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8"> 405</a></span> </div>
-<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43"> 406</a></span> xbUInt32 ulCurRec; <span class="comment">// Current record or zero</span></div>
-<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> xbInt16 iAutoCommit; <span class="comment">// Auto commit updates if not explicitly performed before moving off record?</span></div>
-<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="comment">// -1 --&gt; Use DBMS default</span></div>
-<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="comment">// 0 --&gt; No auto update on this table, regardless of DBMS setting</span></div>
-<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="comment">// 1 --&gt; Auto update on this table, regardless of DBMS setting</span></div>
-<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388"> 411</a></span> </div>
-<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> xbInt16 iFileVersion; <span class="comment">// xBase file version - which class is in play</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"><a class="line" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276"> 414</a></span> </div>
-<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a"> 415</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="l00416" name="l00416"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b"> 416</a></span> xbInt16 iNoOfFields;</div>
-<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> xbInt16 iDbfStatus; <span class="comment">// 0 = closed</span></div>
-<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="comment">// 1 = open</span></div>
-<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="comment">// 2 = updates pending</span></div>
-<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7"> 420</a></span> </div>
-<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd"> 421</a></span> xbSchemaRec *SchemaPtr; <span class="comment">// Pointer to field data</span></div>
-<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606"> 422</a></span> <span class="keywordtype">char</span> *RecBuf; <span class="comment">// Pointer to record buffer</span></div>
-<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="keywordtype">char</span> *RecBuf2; <span class="comment">// Pointer to original rec buf</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> </div>
-<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470"> 426</a></span><span class="comment">/* Next several variables are database header fields, up through dbase V */</span></div>
-<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a"> 427</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVersion;</div>
-<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b"> 428</a></span> <span class="keywordtype">char</span> cUpdateYY;</div>
-<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2"> 429</a></span> <span class="keywordtype">char</span> cUpdateMM;</div>
-<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87"> 430</a></span> <span class="keywordtype">char</span> cUpdateDD;</div>
-<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918"> 431</a></span> xbUInt32 ulNoOfRecs;</div>
-<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91"> 432</a></span> xbUInt16 uiHeaderLen;</div>
-<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970"> 433</a></span> xbUInt16 uiRecordLen;</div>
-<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4"> 434</a></span> <span class="keywordtype">char</span> cTransactionFlag;</div>
-<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b"> 435</a></span> <span class="keywordtype">char</span> cEncryptionFlag;</div>
-<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"> 436</a></span> <span class="keywordtype">char</span> cIndexFlag;</div>
-<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="keywordtype">char</span> cLangDriver; <span class="comment">// dbase 7 sets to 1B</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> </div>
-<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">void</span> ResetNoOfRecords(); </div>
-<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</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="l00406" name="l00406"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323"> 406</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> InitVars(); </div>
+<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d"> 407</a></span> <span class="keyword">virtual</span> xbInt16 SetVersion() = 0;</div>
+<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</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="l00409" name="l00409"></a><span class="lineno"> 409</span> xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );</div>
+<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> </div>
+<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8"> 411</a></span> </div>
+<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43"> 412</a></span> xbUInt32 ulCurRec; <span class="comment">// Current record or zero</span></div>
+<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> xbInt16 iAutoCommit; <span class="comment">// Auto commit updates if not explicitly performed before moving off record?</span></div>
+<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="comment">// -1 --&gt; Use DBMS default</span></div>
+<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="comment">// 0 --&gt; No auto update on this table, regardless of DBMS setting</span></div>
+<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="comment">// 1 --&gt; Auto update on this table, regardless of DBMS setting</span></div>
+<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388"> 417</a></span> </div>
+<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> xbInt16 iFileVersion; <span class="comment">// xBase file version - which class is in play</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"><a class="line" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276"> 420</a></span> </div>
+<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a"> 421</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="l00422" name="l00422"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b"> 422</a></span> xbInt16 iNoOfFields;</div>
+<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> xbInt16 iDbfStatus; <span class="comment">// 0 = closed</span></div>
+<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <span class="comment">// 1 = open</span></div>
+<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <span class="comment">// 2 = updates pending</span></div>
+<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7"> 426</a></span> </div>
+<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd"> 427</a></span> xbSchemaRec *SchemaPtr; <span class="comment">// Pointer to field data</span></div>
+<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606"> 428</a></span> <span class="keywordtype">char</span> *RecBuf; <span class="comment">// Pointer to record buffer</span></div>
+<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keywordtype">char</span> *RecBuf2; <span class="comment">// Pointer to original rec buf</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> </div>
+<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470"> 432</a></span><span class="comment">/* Next several variables are database header fields, up through dbase V */</span></div>
+<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a"> 433</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVersion;</div>
+<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b"> 434</a></span> <span class="keywordtype">char</span> cUpdateYY;</div>
+<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2"> 435</a></span> <span class="keywordtype">char</span> cUpdateMM;</div>
+<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87"> 436</a></span> <span class="keywordtype">char</span> cUpdateDD;</div>
+<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918"> 437</a></span> xbUInt32 ulNoOfRecs;</div>
+<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91"> 438</a></span> xbUInt16 uiHeaderLen;</div>
+<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970"> 439</a></span> xbUInt16 uiRecordLen;</div>
+<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4"> 440</a></span> <span class="keywordtype">char</span> cTransactionFlag;</div>
+<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b"> 441</a></span> <span class="keywordtype">char</span> cEncryptionFlag;</div>
+<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"> 442</a></span> <span class="keywordtype">char</span> cIndexFlag;</div>
+<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="keywordtype">char</span> cLangDriver; <span class="comment">// dbase 7 sets to 1B</span></div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> </div>
-<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span><span class="preprocessor">#ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> xbInt16 iAutoLock; <span class="comment">// 0 - autolock off, 1 - autolock on</span></div>
-<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> xbInt16 iLockFlavor;</div>
-<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</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="l00449" name="l00449"></a><span class="lineno"> 449</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="l00450" name="l00450"></a><span class="lineno"> 450</span> xbUInt32 ulAppendLocked; <span class="comment">// record number of the new record for the append lock operation</span></div>
-<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> xbLinkListOrd&lt;xbUInt32&gt; lloRecLocks; <span class="comment">// ordered link list of locked records</span></div>
-<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> </div>
-<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> </div>
-<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> xbIxList *ixList; <span class="comment">// pointer to a list of indices associated with the table</span></div>
-<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span><span class="comment">// #ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span><span class="comment">// xbIx *ixMdx; // pointer to production multi-tag index file</span></div>
-<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span><span class="comment">// #endif</span></div>
-<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> xbIx *pCurIx; <span class="comment">// Pointer to current index class</span></div>
-<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <span class="keywordtype">void</span> *vpCurIxTag; <span class="comment">// Pointer to current tag</span></div>
-<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</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="l00463" name="l00463"></a><span class="lineno"> 463</span> xbLinkList&lt;xbTag *&gt; llTags; <span class="comment">// linked list of open tags</span></div>
-<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> </div>
-<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span><span class="preprocessor">#endif </span><span class="comment">// XB_INDEX_SUPPORT</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><span class="preprocessor">#ifdef XB_NDXINF_SUPPORT</span></div>
-<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> xbLinkList&lt;xbString&gt; llNdxInfData; <span class="comment">// linked list of strings containing ndx file entries</span></div>
-<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span><span class="preprocessor">#endif </span><span class="comment">// XB_NDXINF_SUPPORT</span></div>
-<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> </div>
-<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> </div>
-<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span>};</div>
+<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</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> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="keywordtype">void</span> ResetNoOfRecords(); </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="preprocessor">#ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> xbInt16 iAutoLock; <span class="comment">// 0 - autolock off, 1 - autolock on</span></div>
+<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> xbInt16 iLockFlavor;</div>
+<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked; <span class="comment">// is the table locked</span></div>
+<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</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="l00456" name="l00456"></a><span class="lineno"> 456</span> xbUInt32 ulAppendLocked; <span class="comment">// record number of the new record for the append lock operation</span></div>
+<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> xbLinkListOrd&lt;xbUInt32&gt; lloRecLocks; <span class="comment">// ordered link list of locked records</span></div>
+<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> </div>
+<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span><span class="preprocessor">#ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> xbIxList *ixList; <span class="comment">// pointer to a list of indices associated with the table</span></div>
+<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> xbIx *pCurIx; <span class="comment">// Pointer to current index class</span></div>
+<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">void</span> *vpCurIxTag; <span class="comment">// Pointer to current tag</span></div>
+<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</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="l00466" name="l00466"></a><span class="lineno"> 466</span> xbLinkList&lt;xbTag *&gt; llTags; <span class="comment">// linked list of open tags</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="preprocessor">#endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> </div>
+<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span><span class="preprocessor">#ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> xbLinkList&lt;xbString&gt; llInfData; <span class="comment">// linked list of strings containing ndx file entries</span></div>
+<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span><span class="preprocessor">#endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> </div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> </div>
-<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span><span class="preprocessor">#ifdef XB_DBF3_SUPPORT</span></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> </div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> </div>
-<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</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="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> xbDbf3(<a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *x);</div>
-<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> ~xbDbf3();</div>
-<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</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="l00488" name="l00488"></a><span class="lineno"> 488</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</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="l00490" name="l00490"></a><span class="lineno"> 490</span> </div>
-<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
-<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span><span class="preprocessor">#ifdef XB_DBF3_SUPPORT</span></div>
+<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</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="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> xbDbf3(<a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *x);</div>
+<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> ~xbDbf3();</div>
+<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</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="l00491" name="l00491"></a><span class="lineno"> 491</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</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="l00493" name="l00493"></a><span class="lineno"> 493</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="l00494" name="l00494"></a><span class="lineno"> 494</span> </div>
-<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> xbInt16 SetVersion ();</div>
-<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</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="l00495" name="l00495"></a><span class="lineno"> 495</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
+<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span><span class="preprocessor"> #endif</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> <span class="keyword">private</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><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF3_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> xbInt16 SetVersion ();</div>
+<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</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="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="keyword">private</span>:</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> </div>
-<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span><span class="preprocessor">#ifdef XB_DBF4_SUPPORT</span></div>
+<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span>};</div>
+<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF3_SUPPORT */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> </div>
-<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</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="l00513" name="l00513"></a><span class="lineno"> 513</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> xbDbf4( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</div>
-<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> </div>
-<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> ~xbDbf4();</div>
-<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> </div>
-<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keyword">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="l00519" name="l00519"></a><span class="lineno"> 519</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</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="l00508" name="l00508"></a><span class="lineno"> 508</span> </div>
+<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span><span class="preprocessor">#ifdef XB_DBF4_SUPPORT</span></div>
+<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> </div>
+<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</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="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> xbDbf4( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</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> ~xbDbf4();</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> </div>
-<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
-<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> </div>
-<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <span class="comment">// void InitVars ();</span></div>
-<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> xbInt16 SetVersion();</div>
-<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema ( xbSchema *s );</div>
+<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</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="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</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="l00525" name="l00525"></a><span class="lineno"> 525</span> <span class="keyword">virtual</span> xbInt16 Rename ( <span class="keyword">const</span> xbString sNewName );</div>
+<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
+<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span><span class="preprocessor"> #endif</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="keyword">private</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> </div>
-<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF4_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> </div>
-<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_DBF_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <span class="comment">// void InitVars ();</span></div>
+<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> xbInt16 SetVersion();</div>
+<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema ( xbSchema *s );</div>
+<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> </div>
+<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> </div>
+<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span>};</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="preprocessor">#endif </span><span class="comment">/* XB_DBF4_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</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_a13393704a8a191d4d6555ae31d3c3e92"><div class="ttname"><a href="classxb_1_1xbDbf.html#a13393704a8a191d4d6555ae31d3c3e92">xb::xbDbf::GetPhysicalIxCnt</a></div><div class="ttdeci">virtual xbInt32 GetPhysicalIxCnt() const</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html_a3a6a068addffd06fc9a996639d6ca69e"><div class="ttname"><a href="classxb_1_1xbDbf.html#a3a6a068addffd06fc9a996639d6ca69e">xb::xbDbf::DumpRecord</a></div><div class="ttdeci">virtual xbInt16 DumpRecord(xbUInt32 ulRecNo, xbInt16 iOutputDest=0, xbInt16 iOutputFmt=0)</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_a97366c7362e409d7f09973a6aef8dad0"><div class="ttname"><a href="classxb_1_1xbDbf.html#a97366c7362e409d7f09973a6aef8dad0">xb::xbDbf::Open</a></div><div class="ttdeci">virtual xbInt16 Open(const xbString &amp;sTableName)</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html_ab1f4a515533402f872cedcd0322aabd4"><div class="ttname"><a href="classxb_1_1xbDbf.html#ab1f4a515533402f872cedcd0322aabd4">xb::xbDbf::DumpHeader</a></div><div class="ttdeci">virtual xbInt16 DumpHeader(xbInt16 iOption) const</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html_ac658818bf9b8f8ff7467d8d80495b324"><div class="ttname"><a href="classxb_1_1xbDbf.html#ac658818bf9b8f8ff7467d8d80495b324">xb::xbDbf::Open</a></div><div class="ttdeci">virtual xbInt16 Open(const xbString &amp;sTableName, const xbString &amp;sAlias)</div></div>
-<div class="ttc" id="aclassxb_1_1xbDbf_html_ac856fc1b110b46aefa1b2f5c0f530aa2"><div class="ttname"><a href="classxb_1_1xbDbf.html#ac856fc1b110b46aefa1b2f5c0f530aa2">xb::xbDbf::MemoFieldsExist</a></div><div class="ttdeci">virtual xbBool MemoFieldsExist() 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>
diff --git a/docs/doxygen/html/xbdelete_8cpp.html b/docs/doxygen/html/xbdelete_8cpp.html
new file mode 100644
index 0000000..98abf7b
--- /dev/null
+++ b/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.0.3/src/sql/xbdelete.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbdelete.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xbdrpix_8cpp.html b/docs/doxygen/html/xbdrpix_8cpp.html
index b2f3fe8..5ee81fc 100644
--- a/docs/doxygen/html/xbdrpix_8cpp.html
+++ b/docs/doxygen/html/xbdrpix_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/sql/xbdrpix.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbdrptbl_8cpp.html b/docs/doxygen/html/xbdrptbl_8cpp.html
index f1b3b96..e1868e1 100644
--- a/docs/doxygen/html/xbdrptbl_8cpp.html
+++ b/docs/doxygen/html/xbdrptbl_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/sql/xbdrptbl.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbexp_8cpp.html b/docs/doxygen/html/xbexp_8cpp.html
index 86b99b7..ba70747 100644
--- a/docs/doxygen/html/xbexp_8cpp.html
+++ b/docs/doxygen/html/xbexp_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbexp.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbexp_8h.html b/docs/doxygen/html/xbexp_8h.html
index ce878fe..307d9d2 100644
--- a/docs/doxygen/html/xbexp_8h.html
+++ b/docs/doxygen/html/xbexp_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbexp.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbexp_8h_source.html b/docs/doxygen/html/xbexp_8h_source.html
index 7077bb6..0061537 100644
--- a/docs/doxygen/html/xbexp_8h_source.html
+++ b/docs/doxygen/html/xbexp_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbexp.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbexpnode_8cpp.html b/docs/doxygen/html/xbexpnode_8cpp.html
index a33b6b4..e8df7a8 100644
--- a/docs/doxygen/html/xbexpnode_8cpp.html
+++ b/docs/doxygen/html/xbexpnode_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbexpnode.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbexpnode_8h.html b/docs/doxygen/html/xbexpnode_8h.html
index 0b575e3..a72834f 100644
--- a/docs/doxygen/html/xbexpnode_8h.html
+++ b/docs/doxygen/html/xbexpnode_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbexpnode.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbexpnode_8h_source.html b/docs/doxygen/html/xbexpnode_8h_source.html
index cd5128b..f58824d 100644
--- a/docs/doxygen/html/xbexpnode_8h_source.html
+++ b/docs/doxygen/html/xbexpnode_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbexpnode.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbfields_8cpp.html b/docs/doxygen/html/xbfields_8cpp.html
index 83108a8..8b99d8e 100644
--- a/docs/doxygen/html/xbfields_8cpp.html
+++ b/docs/doxygen/html/xbfields_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbfields.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbfile_8cpp.html b/docs/doxygen/html/xbfile_8cpp.html
index b3e9d8e..929f40c 100644
--- a/docs/doxygen/html/xbfile_8cpp.html
+++ b/docs/doxygen/html/xbfile_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbfile.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbfile_8h.html b/docs/doxygen/html/xbfile_8h.html
index 4a12804..4fee508 100644
--- a/docs/doxygen/html/xbfile_8h.html
+++ b/docs/doxygen/html/xbfile_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbfile.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbfile_8h_source.html b/docs/doxygen/html/xbfile_8h_source.html
index a111150..898a60b 100644
--- a/docs/doxygen/html/xbfile_8h_source.html
+++ b/docs/doxygen/html/xbfile_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbfile.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -203,50 +203,49 @@ $(function() {
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 xbRemove ();</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> 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="l00154" name="l00154"></a><span class="lineno"> 154</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, xbInt16 iOption );</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">void</span> xbRewind ();</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> xbInt16 xbTruncate ( xbInt64 llSize );</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</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="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="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> lBlockSize );</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">void</span> xbRewind ();</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 xbTruncate ( xbInt64 llSize );</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</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="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_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> lBlockSize );</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> </div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004"> 167</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="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> FILE *fp;</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</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="l00172" name="l00172"></a><span class="lineno"> 172</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="l00173" name="l00173"></a><span class="lineno"> 173</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="l00174" name="l00174"></a><span class="lineno"> 174</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="l00175" name="l00175"></a><span class="lineno"> 175</span> xbUInt32 ulBlockSize; <span class="comment">/* used for memo and index files */</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> xbInt16 iOpenMode; <span class="comment">/* XB_READ || XB_READ_WRITE || XB_WRITE */</span></div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt16 iShareMode; <span class="comment">/* XB_SINGLE_USER || XB_MULTI_USER - set file buffering */</span></div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbInt32 iFileNo; <span class="comment">/* Library File No */</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_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> xbInt16 iLockRetries; <span class="comment">/* file override number of lock attempts */</span></div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="preprocessor"> #endif</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 HAVE_SETENDOFFILE_F</span></div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> HANDLE fHandle;</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="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">protected</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"><a class="line" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004"> 166</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="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> FILE *fp;</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</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="l00171" name="l00171"></a><span class="lineno"> 171</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="l00172" name="l00172"></a><span class="lineno"> 172</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="l00173" name="l00173"></a><span class="lineno"> 173</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="l00174" name="l00174"></a><span class="lineno"> 174</span> xbUInt32 ulBlockSize; <span class="comment">/* used for memo and index files */</span></div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbInt16 iOpenMode; <span class="comment">/* XB_READ || XB_READ_WRITE || XB_WRITE */</span></div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> xbInt16 iShareMode; <span class="comment">/* XB_SINGLE_USER || XB_MULTI_USER - set file buffering */</span></div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt32 iFileNo; <span class="comment">/* Library File No */</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="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 iLockRetries; <span class="comment">/* file override number of lock attempts */</span></div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="preprocessor"> #ifdef HAVE_SETENDOFFILE_F</span></div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> HANDLE fHandle;</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </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>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="preprocessor">#endif </span><span class="comment">/* __XBFILE_H__ */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</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>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="preprocessor">#endif </span><span class="comment">/* __XBFILE_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</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:167</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:166</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>
diff --git a/docs/doxygen/html/xbfilter_8cpp.html b/docs/doxygen/html/xbfilter_8cpp.html
index a25b867..c04e8ae 100644
--- a/docs/doxygen/html/xbfilter_8cpp.html
+++ b/docs/doxygen/html/xbfilter_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbfilter.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbfilter_8h.html b/docs/doxygen/html/xbfilter_8h.html
index 2d86f46..4b47ef8 100644
--- a/docs/doxygen/html/xbfilter_8h.html
+++ b/docs/doxygen/html/xbfilter_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbfilter.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbfilter_8h_source.html b/docs/doxygen/html/xbfilter_8h_source.html
index 4a6cd97..0521f4e 100644
--- a/docs/doxygen/html/xbfilter_8h_source.html
+++ b/docs/doxygen/html/xbfilter_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbfilter.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbfuncs_8cpp.html b/docs/doxygen/html/xbfuncs_8cpp.html
index 247b277..2bf9e11 100644
--- a/docs/doxygen/html/xbfuncs_8cpp.html
+++ b/docs/doxygen/html/xbfuncs_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbfuncs.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbindex_8h.html b/docs/doxygen/html/xbindex_8h.html
index adae508..e78a885 100644
--- a/docs/doxygen/html/xbindex_8h.html
+++ b/docs/doxygen/html/xbindex_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbindex.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbindex_8h_source.html b/docs/doxygen/html/xbindex_8h_source.html
index 28afbb8..ef3da6e 100644
--- a/docs/doxygen/html/xbindex_8h_source.html
+++ b/docs/doxygen/html/xbindex_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbindex.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbinsert_8cpp.html b/docs/doxygen/html/xbinsert_8cpp.html
index 9ab27db..5d22052 100644
--- a/docs/doxygen/html/xbinsert_8cpp.html
+++ b/docs/doxygen/html/xbinsert_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/sql/xbinsert.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbixbase_8cpp.html b/docs/doxygen/html/xbixbase_8cpp.html
index 1dc683b..ec52c20 100644
--- a/docs/doxygen/html/xbixbase_8cpp.html
+++ b/docs/doxygen/html/xbixbase_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbixbase.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbixmdx_8cpp.html b/docs/doxygen/html/xbixmdx_8cpp.html
index 9678278..89de78c 100644
--- a/docs/doxygen/html/xbixmdx_8cpp.html
+++ b/docs/doxygen/html/xbixmdx_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbixmdx.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbixndx_8cpp.html b/docs/doxygen/html/xbixndx_8cpp.html
index ef974f2..b1bebfa 100644
--- a/docs/doxygen/html/xbixndx_8cpp.html
+++ b/docs/doxygen/html/xbixndx_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbixndx.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xblnklst_8h.html b/docs/doxygen/html/xblnklst_8h.html
index f69d395..2b8d005 100644
--- a/docs/doxygen/html/xblnklst_8h.html
+++ b/docs/doxygen/html/xblnklst_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xblnklst.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xblnklst_8h_source.html b/docs/doxygen/html/xblnklst_8h_source.html
index 0c54f18..d08082a 100644
--- a/docs/doxygen/html/xblnklst_8h_source.html
+++ b/docs/doxygen/html/xblnklst_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xblnklst.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xblnklstord_8h.html b/docs/doxygen/html/xblnklstord_8h.html
index 765968c..f68fe19 100644
--- a/docs/doxygen/html/xblnklstord_8h.html
+++ b/docs/doxygen/html/xblnklstord_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xblnklstord.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xblnklstord_8h_source.html b/docs/doxygen/html/xblnklstord_8h_source.html
index 952510d..e955255 100644
--- a/docs/doxygen/html/xblnklstord_8h_source.html
+++ b/docs/doxygen/html/xblnklstord_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xblnklstord.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xblnknod_8h.html b/docs/doxygen/html/xblnknod_8h.html
index 89c9767..bc75c3a 100644
--- a/docs/doxygen/html/xblnknod_8h.html
+++ b/docs/doxygen/html/xblnknod_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xblnknod.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xblnknod_8h_source.html b/docs/doxygen/html/xblnknod_8h_source.html
index 390e109..a366dc3 100644
--- a/docs/doxygen/html/xblnknod_8h_source.html
+++ b/docs/doxygen/html/xblnknod_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xblnknod.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xblog_8cpp.html b/docs/doxygen/html/xblog_8cpp.html
index abe8926..546a521 100644
--- a/docs/doxygen/html/xblog_8cpp.html
+++ b/docs/doxygen/html/xblog_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xblog.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xblog_8h.html b/docs/doxygen/html/xblog_8h.html
index 0cb4057..986b927 100644
--- a/docs/doxygen/html/xblog_8h.html
+++ b/docs/doxygen/html/xblog_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xblog.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xblog_8h_source.html b/docs/doxygen/html/xblog_8h_source.html
index a33b79f..16bdee2 100644
--- a/docs/doxygen/html/xblog_8h_source.html
+++ b/docs/doxygen/html/xblog_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xblog.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbmemo3_8cpp.html b/docs/doxygen/html/xbmemo3_8cpp.html
index 31e154c..a40475e 100644
--- a/docs/doxygen/html/xbmemo3_8cpp.html
+++ b/docs/doxygen/html/xbmemo3_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbmemo3.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbmemo4_8cpp.html b/docs/doxygen/html/xbmemo4_8cpp.html
index 90fbac2..034208e 100644
--- a/docs/doxygen/html/xbmemo4_8cpp.html
+++ b/docs/doxygen/html/xbmemo4_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbmemo4.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbmemo_8cpp.html b/docs/doxygen/html/xbmemo_8cpp.html
index 5e311f8..e70c07f 100644
--- a/docs/doxygen/html/xbmemo_8cpp.html
+++ b/docs/doxygen/html/xbmemo_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbmemo.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbmemo_8h.html b/docs/doxygen/html/xbmemo_8h.html
index e3ed820..d592586 100644
--- a/docs/doxygen/html/xbmemo_8h.html
+++ b/docs/doxygen/html/xbmemo_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbmemo.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbmemo_8h_source.html b/docs/doxygen/html/xbmemo_8h_source.html
index ad2b055..a163c3c 100644
--- a/docs/doxygen/html/xbmemo_8h_source.html
+++ b/docs/doxygen/html/xbmemo_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbmemo.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -110,146 +110,147 @@ $(function() {
<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> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">virtual</span> xbInt16 LockMemo ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</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="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="comment">/* pure virtual methods */</span></div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">virtual</span> xbInt16 CreateMemoFile () = 0;</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &amp;sMemoData ) = 0;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen ) = 0;</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">virtual</span> xbInt16 OpenMemoFile () = 0;</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">virtual</span> xbInt16 GetMemoFileType();</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</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="l00079" name="l00079"></a><span class="lineno"> 79</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="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_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">virtual</span> xbInt16 DumpMemoFreeChain() = 0;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">virtual</span> xbInt16 DumpMemoHeader () = 0;</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> <span class="comment">// *********** FIXME *************</span></div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</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="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// so for now, they are kept as public</span></div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">virtual</span> xbInt16 CalcLastDataBlock ( xbUInt32 &amp;lLastDataBlock );</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">virtual</span> xbInt16 GetHdrNextBlock ( xbUInt32 &amp;ulBlockNo );</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">protected</span>:</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</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="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="keyword">virtual</span> xbInt16 ReadDbtHeader ( xbInt16 iOption ) = 0;</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">virtual</span> xbInt16 UpdateHeaderName () = 0;</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">virtual</span> xbInt16 UpdateHeadNextNode();</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">virtual</span> xbInt16 Zap () = 0;</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</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="l00101" name="l00101"></a><span class="lineno"> 101</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="l00102" name="l00102"></a><span class="lineno"> 102</span> xbInt16 iMemoFileType; <span class="comment">/* 3 = version III, 4 = version IV */</span></div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbUInt32 ulHdrNextBlock; <span class="comment">/* next available block , bytes 0-3 of the memo header */</span></div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">void</span> * mbb; <span class="comment">/* memo block buffer */</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> </div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">private</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="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</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="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="preprocessor"> #endif</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>};</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="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">#ifdef XB_DBF3_SUPPORT</span></div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="keyword">class </span>XBDLLEXPORT xbMemoDbt3 : <span class="keyword">public</span> xbMemo {</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</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="l00134" name="l00134"></a><span class="lineno"> 134</span> ~xbMemoDbt3();</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">virtual</span> xbInt16 Abort ();</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">virtual</span> xbInt16 Commit ();</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">virtual</span> xbInt16 CreateMemoFile ();</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &amp;sMemoData );</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen );</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keyword">virtual</span> xbInt16 OpenMemoFile ();</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">virtual</span> xbInt16 PackMemo ( <span class="keywordtype">void</span> (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField( xbInt16 iFieldNo, <span class="keyword">const</span> xbString &amp;sMemoData );</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="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">virtual</span> xbInt16 DumpMemoFreeChain();</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">virtual</span> xbInt16 DumpMemoHeader ();</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="preprocessor"> #endif</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="keyword">protected</span>:</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">virtual</span> xbInt16 ReadDbtHeader( xbInt16 iOption );</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">virtual</span> xbInt16 UpdateHeaderName();</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">virtual</span> xbInt16 Zap();</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">private</span>:</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="preprocessor">#endif</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="preprocessor">#ifdef XB_DBF4_SUPPORT</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="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="keyword">class </span>XBDLLEXPORT xbMemoDbt4 : <span class="keyword">public</span> xbMemo {</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</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="l00175" name="l00175"></a><span class="lineno"> 175</span> ~xbMemoDbt4();</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">virtual</span> xbInt16 Abort ();</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keyword">virtual</span> xbInt16 Commit ();</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">virtual</span> xbInt16 CreateMemoFile ();</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="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString &amp;sMemoData );</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen );</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 &amp;ulMemoFieldLen, xbUInt32 &amp;lBlockNo );</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> xbInt16 OpenMemoFile ();</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 PackMemo ( <span class="keywordtype">void</span> (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( xbInt16 iFieldNo, <span class="keyword">const</span> xbString &amp;sMemoData );</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">virtual</span> xbInt16 DumpMemoFreeChain ();</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">virtual</span> xbInt16 DumpMemoHeader ();</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">virtual</span> xbInt16 DumpMemoInternals ();</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">virtual</span> xbInt16 ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 &amp;ulNextBlock, xbUInt32 &amp;ulFreeBlockCnt );</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="preprocessor"> #endif</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> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</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="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">virtual</span> xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo );</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">virtual</span> xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &amp;ulLastDataBlock );</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">virtual</span> xbInt16 GetBlockSetFromChain( xbUInt32 ulBlocksNeeded, xbUInt32 ulLocation, xbUInt32 ulPrevNode );</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> xbInt16 ReadDbtHeader( xbInt16 iOption );</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">virtual</span> xbInt16 ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 UpdateHeaderName ();</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">virtual</span> xbInt16 WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">virtual</span> xbInt16 Zap();</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> xbString sDbfFileNameWoExt;</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> xbUInt32 ulNextFreeBlock;</div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> xbUInt32 ulFreeBlockCnt;</div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> xbInt16 iField1;</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> xbInt16 iStartPos;</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> xbUInt32 ulFieldLen;</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> 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="l00214" name="l00214"></a><span class="lineno"> 214</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="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="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</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>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="preprocessor">#endif </span><span class="comment">/* XB_MEMO_SUPPORT */</span><span class="preprocessor"></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_H__ */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</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>
diff --git a/docs/doxygen/html/xbretcod_8h.html b/docs/doxygen/html/xbretcod_8h.html
index 7cda0d2..7fbc99c 100644
--- a/docs/doxygen/html/xbretcod_8h.html
+++ b/docs/doxygen/html/xbretcod_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbretcod.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbretcod_8h_source.html b/docs/doxygen/html/xbretcod_8h_source.html
index def9385..af195cb 100644
--- a/docs/doxygen/html/xbretcod_8h_source.html
+++ b/docs/doxygen/html/xbretcod_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbretcod.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbset_8cpp.html b/docs/doxygen/html/xbset_8cpp.html
index 2030d8f..6d76230 100644
--- a/docs/doxygen/html/xbset_8cpp.html
+++ b/docs/doxygen/html/xbset_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/sql/xbset.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbsql_8cpp.html b/docs/doxygen/html/xbsql_8cpp.html
index 16a6210..b3dff71 100644
--- a/docs/doxygen/html/xbsql_8cpp.html
+++ b/docs/doxygen/html/xbsql_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/sql/xbsql.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbsql_8h.html b/docs/doxygen/html/xbsql_8h.html
index 89c3d51..33f8b86 100644
--- a/docs/doxygen/html/xbsql_8h.html
+++ b/docs/doxygen/html/xbsql_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbsql.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbsql_8h_source.html b/docs/doxygen/html/xbsql_8h_source.html
index 1c0f4c1..4f38716 100644
--- a/docs/doxygen/html/xbsql_8h_source.html
+++ b/docs/doxygen/html/xbsql_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbsql.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -114,31 +114,38 @@ $(function() {
<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="keyword">private</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> xbInt16 SqlCreateTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> xbInt16 SqlCreateIndex( <span class="keyword">const</span> xbString &amp;sCmdLine );</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 SqlDropIndex( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 SqlDropTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> xbInt16 SqlAlterTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</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 SqlCreateTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</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> xbInt16 SqlDelete( <span class="keyword">const</span> xbString &amp;sCmdLine );</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="comment">// xbInt16 SqlCreateView( const xbString &amp;sCmdLine );</span></div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment">// xbInt16 SqlDropView( const xbString &amp;sCmdLine );</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment">// xbInt16 SqlUpdate( const xbString &amp;sCmdLine );</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment">// xbInt16 SqlSelect( const xbString &amp;sCmdLine );</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> <span class="keywordtype">void</span> SqlHelp() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> xbInt16 SqlInsert( <span class="keyword">const</span> xbString &amp;sCmLine );</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> xbInt16 SqlSet( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbInt16 SqlUse( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase;</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> xbUda uda;</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> </div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>} <span class="comment">/* namespace xb */</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_SQL_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBSQL_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> xbInt16 SqlDropTable( <span class="keyword">const</span> xbString &amp;sCmdLine );</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="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> xbInt16 SqlCreateIndex( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> xbInt16 SqlDropIndex( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</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">// xbInt16 SqlCreateView( const xbString &amp;sCmdLine );</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">// xbInt16 SqlDropView( const xbString &amp;sCmdLine );</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">// xbInt16 SqlUpdate( const xbString &amp;sCmdLine );</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">// xbInt16 SqlSelect( const xbString &amp;sCmdLine );</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="keywordtype">void</span> SqlHelp() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> xbInt16 SqlInsert( <span class="keyword">const</span> xbString &amp;sCmLine );</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> xbInt16 SqlSet( <span class="keyword">const</span> xbString &amp;sCmdLine );</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> xbInt16 SqlUse( <span class="keyword">const</span> xbString &amp;sCmdLine );</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_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> xbUda uda;</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> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#endif </span><span class="comment">/* XB_SQL_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</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><!-- fragment --></div><!-- contents -->
diff --git a/docs/doxygen/html/xbssv_8cpp.html b/docs/doxygen/html/xbssv_8cpp.html
index a3b6d93..4473df1 100644
--- a/docs/doxygen/html/xbssv_8cpp.html
+++ b/docs/doxygen/html/xbssv_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbssv.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbssv_8h.html b/docs/doxygen/html/xbssv_8h.html
index a07c236..9f2e09a 100644
--- a/docs/doxygen/html/xbssv_8h.html
+++ b/docs/doxygen/html/xbssv_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbssv.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbssv_8h_source.html b/docs/doxygen/html/xbssv_8h_source.html
index 1ff9609..e5c99fd 100644
--- a/docs/doxygen/html/xbssv_8h_source.html
+++ b/docs/doxygen/html/xbssv_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbssv.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -129,114 +129,111 @@ $(function() {
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> SetDataDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory );</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> SetDefaultDateFormat ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat );</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </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> 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="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</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="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> BitSet ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c, xbInt16 iBitNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoCommit () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> SetDefaultAutoCommit ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit );</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoCommit () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</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="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_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDefaultLogDirectory () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDefaultLogFileName () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordtype">void</span> SetDefaultLogDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultLogDirectory );</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDefaultLogDirectory () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDefaultLogFileName () <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> SetDefaultLogDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultLogDirectory );</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> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMultiUser () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</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="l00086" name="l00086"></a><span class="lineno"> 86</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> GetMultiUser () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</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="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="preprocessor"> #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 GetUniqueKeyOpt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="preprocessor"> #endif</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"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> xbInt16 GetDefaultLockRetries () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">void</span> SetDefaultLockRetries ( xbInt16 iRetryCount );</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> xbInt32 GetDefaultLockWait () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">void</span> SetDefaultLockWait ( xbInt32 lRetryWait );</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> xbInt16 GetDefaultLockFlavor () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">void</span> SetDefaultLockFlavor ( xbInt16 iLockFlavor );</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoLock () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</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="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">void</span> EnableDefaultAutoLock ();</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">void</span> DisableDefaultAutoLock ();</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="preprocessor"> #endif</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><span class="preprocessor"> #ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> xbInt16 GetCreateMdxBlockSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="preprocessor"> #endif</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="keyword">protected</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="keywordtype">void</span> SetEndianType ();</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="preprocessor"> #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> xbInt16 GetUniqueKeyOpt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="preprocessor"> #endif</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"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> xbInt16 GetDefaultLockRetries () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">void</span> SetDefaultLockRetries ( xbInt16 iRetryCount );</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt32 GetDefaultLockWait () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">void</span> SetDefaultLockWait ( xbInt32 lRetryWait );</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> xbInt16 GetDefaultLockFlavor () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">void</span> SetDefaultLockFlavor ( xbInt16 iLockFlavor );</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> GetDefaultAutoLock () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">void</span> SetDefaultAutoLock ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAutoLock );</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">void</span> EnableDefaultAutoLock ();</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">void</span> DisableDefaultAutoLock ();</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span><span class="preprocessor"> #endif</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><span class="preprocessor"> #ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 GetCreateMdxBlockSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="preprocessor"> #endif</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> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> SetEndianType ();</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"><a class="line" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3"> 114</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="l00115" name="l00115"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da"> 115</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="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3"> 117</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="l00118" name="l00118"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da"> 118</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="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">private</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">private</span>:</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</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="l00121" name="l00121"></a><span class="lineno"> 121</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="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="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDefaultDateFormat;</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</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="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"> #ifdef XB_LOGGING_SUPPORT</span></div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDefaultLogDirectory; <span class="comment">//Default location to store log files</span></div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDefaultLogFileName; <span class="comment">//Default LogFileName</span></div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">static</span> xbInt16 iDefaultFileVersion; <span class="comment">// 3 = DBase 3</span></div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="comment">// 4 = DBase 4</span></div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="comment">// default version used in CreateTable command</span></div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="comment">// can be over ridden at the Xbase level, or table level</span></div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// Different versions can be open simultaneously</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">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="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="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="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// Turn this off for better performance in single user mode</span></div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</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="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// turning this on after tables are opened, can result in out of date</span></div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="comment">// file buffers if multiple users are sharing the files</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="preprocessor">#ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">static</span> xbInt32 lDefaultLockWait; <span class="comment">// Number of milliseconds between lock retries</span></div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</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="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">static</span> xbInt16 bDefaultAutoLock; <span class="comment">// Autolocking enabled?</span></div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">static</span> xbInt16 iDefaultLockFlavor; <span class="comment">// 1 = DBase</span></div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="comment">// 2 = Clipper - not developed yet</span></div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="comment">// 3 = FoxPro - not developed yet</span></div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// 9 = Xbase64 - not developed yet</span></div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="preprocessor"> #ifdef XB_LOGGING_SUPPORT</span></div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDefaultLogDirectory; <span class="comment">//Default location to store log files</span></div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDefaultLogFileName; <span class="comment">//Default LogFileName</span></div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">static</span> xbInt16 iDefaultFileVersion; <span class="comment">// 3 = DBase 3</span></div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// 4 = DBase 4</span></div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// default version used in CreateTable command</span></div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// can be over ridden at the Xbase level, or table level</span></div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="comment">// Different versions can be open simultaneously</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">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="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_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="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// Turn this off for better performance in single user mode</span></div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</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="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// turning this on after tables are opened, can result in out of date</span></div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// file buffers if multiple users are sharing the files</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_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">static</span> xbInt32 lDefaultLockWait; <span class="comment">// Number of milliseconds between lock retries</span></div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</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="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">static</span> xbInt16 bDefaultAutoLock; <span class="comment">// Autolocking enabled?</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">static</span> xbInt16 iDefaultLockFlavor; <span class="comment">// 1 = DBase</span></div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// 2 = Clipper - not developed yet</span></div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// 3 = FoxPro - not developed yet</span></div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// 9 = Xbase64 - not developed yet</span></div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="preprocessor">#endif</span></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> </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="preprocessor">#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></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">#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</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="keyword">static</span> xbInt16 iUniqueKeyOpt;</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="comment">// is one of:</span></div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="comment">// XB_HALT_ON_DUPKEY</span></div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="comment">// XB_EMULATE_DBASE</span></div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">static</span> xbInt16 iUniqueKeyOpt;</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="comment">// is one of:</span></div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// XB_HALT_ON_DUPKEY</span></div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// XB_EMULATE_DBASE</span></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">static</span> xbInt16 iCreateMdxBlockSize; <span class="comment">// System level Mdx Block Size</span></div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="preprocessor">#endif </span><span class="comment">// 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="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">static</span> xbInt16 iCreateMdxBlockSize; <span class="comment">// System level Mdx Block Size</span></div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="preprocessor">#endif </span><span class="comment">// XB_MDX_SUPPORT</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> </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> </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> </div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBSSV_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_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:117</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:118</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:114</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:115</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>
diff --git a/docs/doxygen/html/xbstring_8cpp.html b/docs/doxygen/html/xbstring_8cpp.html
index d1ed65b..79fb588 100644
--- a/docs/doxygen/html/xbstring_8cpp.html
+++ b/docs/doxygen/html/xbstring_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbstring.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbstring_8h.html b/docs/doxygen/html/xbstring_8h.html
index af23a9b..417968e 100644
--- a/docs/doxygen/html/xbstring_8h.html
+++ b/docs/doxygen/html/xbstring_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbstring.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbstring_8h_source.html b/docs/doxygen/html/xbstring_8h_source.html
index 91bdbe8..6292ab2 100644
--- a/docs/doxygen/html/xbstring_8h_source.html
+++ b/docs/doxygen/html/xbstring_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbstring.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -147,8 +147,8 @@ $(function() {
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Append(<span class="keywordtype">char</span> c);</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <span class="keywordtype">char</span> *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen );</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <span class="keywordtype">char</span> *srcStr, xbUInt32 lStartPos );</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 pos, xbUInt32 n );</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 n );</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 pos, xbUInt32 lCopyLen );</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 lCopyLen );</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> Copy() <span class="keyword">const</span>;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbUInt32 CountChar( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
@@ -188,51 +188,52 @@ $(function() {
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</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="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Remove( xbUInt32 ulPos, xbUInt32 ulN );</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Resize( xbUInt32 lSize );</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;Rtrim();</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;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s );</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;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="l00144" name="l00144"></a><span class="lineno"> 144</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="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SetNum( xbInt32 lNum );</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Sprintf(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</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="l00150" name="l00150"></a><span class="lineno"> 150</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="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToLowerCase();</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToUpperCase();</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Trim();</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> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidLogicalValue() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidNumericValue() <span class="keyword">const</span>;</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;ZapChar( <span class="keywordtype">char</span> c );</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;ZapLeadingChar( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</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="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">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="l00163" name="l00163"></a><span class="lineno"> 163</span> </div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">private</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">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * NullString;</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">static</span> <span class="keywordtype">char</span> cJunkBuf;</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="keywordtype">char</span> *data; <span class="comment">// pointer to actual string data</span></div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> xbUInt32 size; <span class="comment">// size of string plus null terminating byte</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="keywordtype">void</span> ctor(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span><span class="comment">// xbUInt32 CalcSprintfBufSize(const char *format, ...);</span></div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="comment">// char * xb_realloc( char *pIn, xbUInt32 iLen );</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="comment">// next routine could result in buffer over runs if used with improperly sized buffers</span></div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</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="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="comment">/* namespace */</span></div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="preprocessor">#endif </span><span class="comment">/* __XBSTRING_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</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="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Resize( xbUInt32 lSize );</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Rtrim();</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> <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="l00144" name="l00144"></a><span class="lineno"> 144</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="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s, xbUInt32 ulSize );</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SetNum( xbInt32 lNum );</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;Sprintf(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</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="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</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="l00151" name="l00151"></a><span class="lineno"> 151</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="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToLowerCase();</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToUpperCase();</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;Trim();</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_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidLogicalValue() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidNumericValue() <span class="keyword">const</span>;</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;ZapChar( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</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="l00161" name="l00161"></a><span class="lineno"> 161</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="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">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="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">private</span>:</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">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * NullString;</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">static</span> <span class="keywordtype">char</span> cJunkBuf;</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="keywordtype">char</span> *data; <span class="comment">// pointer to actual string data</span></div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> xbUInt32 size; <span class="comment">// size of string plus null terminating byte</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="keywordtype">void</span> ctor(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="comment">// xbUInt32 CalcSprintfBufSize(const char *format, ...);</span></div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment">// char * xb_realloc( char *pIn, xbUInt32 iLen );</span></div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// next routine could result in buffer over runs if used with improperly sized buffers</span></div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</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="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span>};</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</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>
diff --git a/docs/doxygen/html/xbtag_8cpp.html b/docs/doxygen/html/xbtag_8cpp.html
index 66fcf25..dd99e6d 100644
--- a/docs/doxygen/html/xbtag_8cpp.html
+++ b/docs/doxygen/html/xbtag_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbtag.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbtag_8h.html b/docs/doxygen/html/xbtag_8h.html
index ecd3c6d..cfc21e2 100644
--- a/docs/doxygen/html/xbtag_8h.html
+++ b/docs/doxygen/html/xbtag_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbtag.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbtag_8h_source.html b/docs/doxygen/html/xbtag_8h_source.html
index abbf7f5..1c5847a 100644
--- a/docs/doxygen/html/xbtag_8h_source.html
+++ b/docs/doxygen/html/xbtag_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbtag.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbtblmgr_8cpp.html b/docs/doxygen/html/xbtblmgr_8cpp.html
index 6f738b0..7e87582 100644
--- a/docs/doxygen/html/xbtblmgr_8cpp.html
+++ b/docs/doxygen/html/xbtblmgr_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbtblmgr.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbtblmgr_8h.html b/docs/doxygen/html/xbtblmgr_8h.html
index 6baece0..98e29e5 100644
--- a/docs/doxygen/html/xbtblmgr_8h.html
+++ b/docs/doxygen/html/xbtblmgr_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbtblmgr.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbtblmgr_8h_source.html b/docs/doxygen/html/xbtblmgr_8h_source.html
index 566867f..5f98d21 100644
--- a/docs/doxygen/html/xbtblmgr_8h_source.html
+++ b/docs/doxygen/html/xbtblmgr_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbtblmgr.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
@@ -111,26 +111,27 @@ $(function() {
<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> <a class="code hl_class" href="classxb_1_1xbTblMgr.html">xbTblMgr</a>();</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> 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;sTblName );</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;sTblName, <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="l00044" name="l00044"></a><span class="lineno"> 44</span> xbInt16 DisplayTableList () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</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="l00046" name="l00046"></a><span class="lineno"> 46</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="l00047" name="l00047"></a><span class="lineno"> 47</span> xbInt16 GetOpenTableCount () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</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="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 RemoveTblFromTblList ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d );</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">protected</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="keyword">private</span>:</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</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="l00055" name="l00055"></a><span class="lineno"> 55</span> xbInt16 iOpenTableCount; <span class="comment">// Number of open tables</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"> 59</span>} <span class="comment">/* namespace xb */</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="preprocessor">#endif </span><span class="comment">/* __XB_XBMGR_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</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;sTblName );</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;sTblName, <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="l00044" name="l00044"></a><span class="lineno"> 44</span> xbInt16 DisplayTableList () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</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="l00046" name="l00046"></a><span class="lineno"> 46</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="l00047" name="l00047"></a><span class="lineno"> 47</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="l00048" name="l00048"></a><span class="lineno"> 48</span> xbInt16 GetOpenTableCount () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</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="l00050" name="l00050"></a><span class="lineno"> 50</span> xbInt16 RemoveTblFromTblList ( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> *d );</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">protected</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="keyword">private</span>:</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</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="l00056" name="l00056"></a><span class="lineno"> 56</span> xbInt16 iOpenTableCount; <span class="comment">// Number of open tables</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"> 59</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_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>
diff --git a/docs/doxygen/html/xbtypes_8h.html b/docs/doxygen/html/xbtypes_8h.html
index 68e5377..e377fe7 100644
--- a/docs/doxygen/html/xbtypes_8h.html
+++ b/docs/doxygen/html/xbtypes_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbtypes.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbtypes_8h_source.html b/docs/doxygen/html/xbtypes_8h_source.html
index 9222c7d..8012370 100644
--- a/docs/doxygen/html/xbtypes_8h_source.html
+++ b/docs/doxygen/html/xbtypes_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbtypes.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbuda_8cpp.html b/docs/doxygen/html/xbuda_8cpp.html
index 7f2662d..ff36d02 100644
--- a/docs/doxygen/html/xbuda_8cpp.html
+++ b/docs/doxygen/html/xbuda_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbuda.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbuda_8h.html b/docs/doxygen/html/xbuda_8h.html
index 37e23ca..8a7d6aa 100644
--- a/docs/doxygen/html/xbuda_8h.html
+++ b/docs/doxygen/html/xbuda_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbuda.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbuda_8h_source.html b/docs/doxygen/html/xbuda_8h_source.html
index 8fceaa1..9187168 100644
--- a/docs/doxygen/html/xbuda_8h_source.html
+++ b/docs/doxygen/html/xbuda_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbuda.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbxbase_8cpp.html b/docs/doxygen/html/xbxbase_8cpp.html
index 51647e7..0db46a2 100644
--- a/docs/doxygen/html/xbxbase_8cpp.html
+++ b/docs/doxygen/html/xbxbase_8cpp.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/core/xbxbase.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbxbase_8h.html b/docs/doxygen/html/xbxbase_8h.html
index 936104d..b218730 100644
--- a/docs/doxygen/html/xbxbase_8h.html
+++ b/docs/doxygen/html/xbxbase_8h.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbxbase.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/html/xbxbase_8h_source.html b/docs/doxygen/html/xbxbase_8h_source.html
index 571efee..48766c4 100644
--- a/docs/doxygen/html/xbxbase_8h_source.html
+++ b/docs/doxygen/html/xbxbase_8h_source.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta 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/include/xbxbase.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/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>
diff --git a/docs/doxygen/latex/classxb_1_1xbDate.pdf b/docs/doxygen/latex/classxb_1_1xbDate.pdf
index a18103b..6115bce 100644
--- a/docs/doxygen/latex/classxb_1_1xbDate.pdf
+++ b/docs/doxygen/latex/classxb_1_1xbDate.pdf
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbDate.tex b/docs/doxygen/latex/classxb_1_1xbDate.tex
index 9001be4..654e005 100644
--- a/docs/doxygen/latex/classxb_1_1xbDate.tex
+++ b/docs/doxygen/latex/classxb_1_1xbDate.tex
@@ -108,6 +108,10 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+D
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
@@ -234,6 +238,18 @@ 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}}
@@ -1025,5 +1041,5 @@ The year of the date.
The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbDbf.pdf b/docs/doxygen/latex/classxb_1_1xbDbf.pdf
index 0cf80d4..2057f45 100644
--- a/docs/doxygen/latex/classxb_1_1xbDbf.pdf
+++ b/docs/doxygen/latex/classxb_1_1xbDbf.pdf
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbDbf.tex b/docs/doxygen/latex/classxb_1_1xbDbf.tex
index cf0ac0a..479fc79 100644
--- a/docs/doxygen/latex/classxb_1_1xbDbf.tex
+++ b/docs/doxygen/latex/classxb_1_1xbDbf.tex
@@ -44,16 +44,16 @@ virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3067fdfa3a7a5c15651f6e89d11
\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_ab1f4a515533402f872cedcd0322aabd4}{Dump\+Header}} (xb\+Int16 i\+Option) const
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3a6a068addffd06fc9a996639d6ca69e}{Dump\+Record}} (xb\+UInt32 ul\+Rec\+No, xb\+Int16 i\+Output\+Dest=0, xb\+Int16 i\+Output\+Fmt=0)
-\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a309b5b1fb6a5c048c4bfb404d011ac55}{Dump\+Header}} (xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Dump dbf file header. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aba30399f15885a07f87f904c0d0656fa}{Dump\+Record}} (xb\+UInt32 ul\+Rec\+No, xb\+Int16 i\+Output\+Dest=0, xb\+Int16 i\+Output\+Fmt=0)
+\begin{DoxyCompactList}\small\item\em Dump record. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_abb9e20c5efacd4fea80f1515abbc6b55}{Get\+Auto\+Commit}} () const
\begin{DoxyCompactList}\small\item\em Get auto commit setting. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae0c00226fd2ea7a67f101e795467ed68}{Get\+Auto\+Commit}} (xb\+Int16 i\+Option) const
\begin{DoxyCompactList}\small\item\em Get auto commit setting. \end{DoxyCompactList}\item
virtual xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbDbf_a643a80a3792a52760c8e09ba18719503}{Get\+Cur\+Rec\+No}} () const
-\begin{DoxyCompactList}\small\item\em Get Auto Lock setting. \end{DoxyCompactList}\item
+\begin{DoxyCompactList}\small\item\em Get a pointer to the current index object. \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 xb\+Int32 \mbox{\hyperlink{classxb_1_1xbDbf_add27d8ef555a13b336b8c804165dc15e}{Get\+Field\+Cnt}} () const
@@ -72,14 +72,14 @@ virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3191428a7a92d9107d8d4244888
\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\+Int32 \mbox{\hyperlink{classxb_1_1xbDbf_a13393704a8a191d4d6555ae31d3c3e92}{Get\+Physical\+Ix\+Cnt}} () const
-\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab3d248e5221b4f0809897cd43af17a1e}{Get\+Prev\+Record}} ()
\begin{DoxyCompactList}\small\item\em Get the previous record. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7eadc7b08d73003802b90584f7b33387}{Get\+Prev\+Record}} (xb\+Int16 i\+Option)
\begin{DoxyCompactList}\small\item\em Get the previous record. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a26fba086b07caeab95066bf1c8d25161}{Get\+Record}} (xb\+UInt32 ul\+Rec\+No)
\begin{DoxyCompactList}\small\item\em Get record for specified record number. \end{DoxyCompactList}\item
+virtual xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbDbf_a0aaa06d6028e75efc6b5131f7356ecce}{Get\+Record\+Count}} ()
+\begin{DoxyCompactList}\small\item\em Get the current number of records in the dbf data file. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac196ad55335e1f4789d698748434dc89}{Get\+Record\+Cnt}} (xb\+UInt32 \&ul\+Rec\+Cnt)
\begin{DoxyCompactList}\small\item\em Get the current number of records in the dbf data file. \end{DoxyCompactList}\item
virtual char $\ast$ \mbox{\hyperlink{classxb_1_1xbDbf_aa3e38c4057d726a28a27d07a1610d124}{Get\+Record\+Buf}} (xb\+Int16 i\+Opt=0) const
@@ -92,12 +92,12 @@ virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc
\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_ac856fc1b110b46aefa1b2f5c0f530aa2}{Memo\+Fields\+Exist}} () const
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a97366c7362e409d7f09973a6aef8dad0}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name)
-\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ac658818bf9b8f8ff7467d8d80495b324}{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}})
-\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}} ()
@@ -112,10 +112,12 @@ virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a060541addb5bb1f0fe12959ed6f
\begin{DoxyCompactList}\small\item\em Read dbf file header information. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a94d7d626ba691fd4b740c034673e6fc6}{Record\+Deleted}} (xb\+Int16 i\+Opt=0) const
\begin{DoxyCompactList}\small\item\em Return record deletion status. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}{Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} s\+New\+Name)=0
+\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a4cf7f0d423164f3cf074ae41f96f4e90}{Set\+Auto\+Commit}} (xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ab506450954bc86e7bf1d7c4efe681f43}{i\+Auto\+Commit}})
\begin{DoxyCompactList}\small\item\em Set auto commit. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae94cb1bf9f75184f39d9e1a80ab49d4a}{Undelete\+All\+Records}} ()
-\begin{DoxyCompactList}\small\item\em Undelete all records. \end{DoxyCompactList}\item
+\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}} ()
@@ -342,8 +344,6 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}{
\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
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab0b2a2c88947921d98ebcb5b5ec34ed9}{xb\+Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Old\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+New\+Name, xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Rename file. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}{xb\+Rewind}} ()
\begin{DoxyCompactList}\small\item\em Xbase wrapper for rewind. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}{xb\+Truncate}} (xb\+Int64 ll\+Size)
@@ -366,6 +366,10 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+D
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
@@ -550,6 +554,18 @@ Note\+: Locking memo files is not needed as the memo file updates are handled ou
\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}}
@@ -845,18 +861,58 @@ Display error message on console for a given error number.
{\em i\+Error\+Code} & Error number to reference \\
\hline
\end{DoxyParams}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ab1f4a515533402f872cedcd0322aabd4}\label{classxb_1_1xbDbf_ab1f4a515533402f872cedcd0322aabd4}}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a309b5b1fb6a5c048c4bfb404d011ac55}\label{classxb_1_1xbDbf_a309b5b1fb6a5c048c4bfb404d011ac55}}
\index{xb::xbDbf@{xb::xbDbf}!DumpHeader@{DumpHeader}}
\index{DumpHeader@{DumpHeader}!xb::xbDbf@{xb::xbDbf}}
\doxysubsubsection{\texorpdfstring{DumpHeader()}{DumpHeader()}}
-{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Dump\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Dump\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Dump dbf file header.
-\mbox{\Hypertarget{classxb_1_1xbDbf_a3a6a068addffd06fc9a996639d6ca69e}\label{classxb_1_1xbDbf_a3a6a068addffd06fc9a996639d6ca69e}}
+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 virtual 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]}}
+{\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}}
@@ -1208,12 +1264,7 @@ Block Size
-Get Auto Lock setting.
-
-\begin{DoxyReturn}{Returns}
-Auto lock setting.
-\end{DoxyReturn}
-Get a pointer to the current index object.
+Get a pointer to the current index object.
\begin{DoxyReturn}{Returns}
Pointer to current index.
@@ -2385,12 +2436,6 @@ XB\+\_\+\+READ~\newline
XB\+\_\+\+WRITE~\newline
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a13393704a8a191d4d6555ae31d3c3e92}\label{classxb_1_1xbDbf_a13393704a8a191d4d6555ae31d3c3e92}}
-\index{xb::xbDbf@{xb::xbDbf}!GetPhysicalIxCnt@{GetPhysicalIxCnt}}
-\index{GetPhysicalIxCnt@{GetPhysicalIxCnt}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{GetPhysicalIxCnt()}{GetPhysicalIxCnt()}}
-{\footnotesize\ttfamily virtual xb\+Int32 xb\+::xb\+Dbf\+::\+Get\+Physical\+Ix\+Cnt (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
-
\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}}
@@ -2514,6 +2559,19 @@ Get the current number of records in the dbf data file.
\begin{DoxyReturn}{Returns}
\href{xbretcod_8h.html}{\texttt{ Return Codes}}
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a0aaa06d6028e75efc6b5131f7356ecce}\label{classxb_1_1xbDbf_a0aaa06d6028e75efc6b5131f7356ecce}}
+\index{xb::xbDbf@{xb::xbDbf}!GetRecordCount@{GetRecordCount}}
+\index{GetRecordCount@{GetRecordCount}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetRecordCount()}{GetRecordCount()}}
+{\footnotesize\ttfamily xb\+UInt32 xb\+::xb\+Dbf\+::\+Get\+Record\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get the current number of records in the dbf data file.
+
+\begin{DoxyReturn}{Returns}
+Record count or \href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbDbf_ab50d76c6e29e81e347a6feb04c2f62bb}\label{classxb_1_1xbDbf_ab50d76c6e29e81e347a6feb04c2f62bb}}
\index{xb::xbDbf@{xb::xbDbf}!GetRecordLen@{GetRecordLen}}
\index{GetRecordLen@{GetRecordLen}!xb::xbDbf@{xb::xbDbf}}
@@ -2700,12 +2758,20 @@ Pointer to xb\+Xbase structure.
\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_ac856fc1b110b46aefa1b2f5c0f530aa2}\label{classxb_1_1xbDbf_ac856fc1b110b46aefa1b2f5c0f530aa2}}
+\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 virtual \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Dbf\+::\+Memo\+Fields\+Exist (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+{\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}}
@@ -2734,18 +2800,46 @@ Determines status of file extension.
2 is suffix not found, upper case~\newline
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_a97366c7362e409d7f09973a6aef8dad0}\label{classxb_1_1xbDbf_a97366c7362e409d7f09973a6aef8dad0}}
+\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 virtual 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]}}
+{\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]}}
+
-\mbox{\Hypertarget{classxb_1_1xbDbf_ac658818bf9b8f8ff7467d8d80495b324}\label{classxb_1_1xbDbf_ac658818bf9b8f8ff7467d8d80495b324}}
+
+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 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 }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+{\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}}
@@ -3323,6 +3417,12 @@ This routine returns the record deletion status.
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}}
@@ -3500,7 +3600,54 @@ Get the multi user setting.
-Undelete all records.
+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}}
@@ -3968,7 +4115,7 @@ Delete file.
\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()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+\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]}}
@@ -3985,28 +4132,6 @@ Rename file.
\begin{DoxyReturn}{Returns}
\href{xbretcod_8h.html}{\texttt{ Return Codes}}
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab0b2a2c88947921d98ebcb5b5ec34ed9}\label{classxb_1_1xbFile_ab0b2a2c88947921d98ebcb5b5ec34ed9}}
-\index{xb::xbDbf@{xb::xbDbf}!xbRename@{xbRename}}
-\index{xbRename@{xbRename}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{xbRename()}{xbRename()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\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, }\item[{xb\+Int16}]{i\+Option }\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
-{\em i\+Option} & If Set to 1, assume this is a rename 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_a7996b6e084665c37c3892faea64b3505}\label{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}}
\index{xb::xbDbf@{xb::xbDbf}!xbRewind@{xbRewind}}
\index{xbRewind@{xbRewind}!xb::xbDbf@{xb::xbDbf}}
@@ -4199,6 +4324,6 @@ This routine eliminates everything from the dbf file and dbt memo file. \begin{D
The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbFile.pdf b/docs/doxygen/latex/classxb_1_1xbFile.pdf
index 40f098c..e15505b 100644
--- a/docs/doxygen/latex/classxb_1_1xbFile.pdf
+++ b/docs/doxygen/latex/classxb_1_1xbFile.pdf
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbFile.tex b/docs/doxygen/latex/classxb_1_1xbFile.tex
index 21d0680..2ae5244 100644
--- a/docs/doxygen/latex/classxb_1_1xbFile.tex
+++ b/docs/doxygen/latex/classxb_1_1xbFile.tex
@@ -156,8 +156,6 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab3c668a8570433188382d31d7c60bd48}{
\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
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab0b2a2c88947921d98ebcb5b5ec34ed9}{xb\+Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Old\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+New\+Name, xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Rename file. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}{xb\+Rewind}} ()
\begin{DoxyCompactList}\small\item\em Xbase wrapper for rewind. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}{xb\+Truncate}} (xb\+Int64 ll\+Size)
@@ -180,6 +178,10 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+D
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
@@ -255,6 +257,18 @@ 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}}
@@ -1780,7 +1794,7 @@ Delete file.
\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()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+\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})}
@@ -1797,28 +1811,6 @@ Rename file.
\begin{DoxyReturn}{Returns}
\href{xbretcod_8h.html}{\texttt{ Return Codes}}
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ab0b2a2c88947921d98ebcb5b5ec34ed9}\label{classxb_1_1xbFile_ab0b2a2c88947921d98ebcb5b5ec34ed9}}
-\index{xb::xbFile@{xb::xbFile}!xbRename@{xbRename}}
-\index{xbRename@{xbRename}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{xbRename()}{xbRename()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\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, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})}
-
-
-
-Rename file.
-
-
-\begin{DoxyParams}{Parameters}
-{\em s\+Old\+Name} & Original file name \\
-\hline
-{\em s\+New\+Name} & New file name \\
-\hline
-{\em i\+Option} & If Set to 1, assume this is a rename 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_a7996b6e084665c37c3892faea64b3505}\label{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}}
\index{xb::xbFile@{xb::xbFile}!xbRewind@{xbRewind}}
\index{xbRewind@{xbRewind}!xb::xbFile@{xb::xbFile}}
@@ -1878,5 +1870,5 @@ Set file size to ll\+Size
The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbSsv.pdf b/docs/doxygen/latex/classxb_1_1xbSsv.pdf
index 9e9391f..d2c5129 100644
--- a/docs/doxygen/latex/classxb_1_1xbSsv.pdf
+++ b/docs/doxygen/latex/classxb_1_1xbSsv.pdf
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbSsv.tex b/docs/doxygen/latex/classxb_1_1xbSsv.tex
index fd829bb..5a19427 100644
--- a/docs/doxygen/latex/classxb_1_1xbSsv.tex
+++ b/docs/doxygen/latex/classxb_1_1xbSsv.tex
@@ -36,6 +36,10 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+D
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
@@ -90,6 +94,18 @@ 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}}
@@ -335,5 +351,5 @@ Get the multi user setting.
The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbString.tex b/docs/doxygen/latex/classxb_1_1xbString.tex
index 1665042..1d6fca8 100644
--- a/docs/doxygen/latex/classxb_1_1xbString.tex
+++ b/docs/doxygen/latex/classxb_1_1xbString.tex
@@ -86,9 +86,9 @@ char \& \mbox{\hyperlink{classxb_1_1xbString_a4deaa68d9571753349c29baacb5613e8}{
\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_a210707223fffc7b3ab31eca4ef29f731}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 pos, xb\+UInt32 n)
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ac6afd224dfbe439ce083c8dd1ad3246c}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 pos, xb\+UInt32 l\+Copy\+Len)
\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_ab9045442e57293843652dfce6522ff83}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 n)
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a4f1d709d9f6c56959e8549157b4ee68c}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 l\+Copy\+Len)
\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_ac7a8466b03c04df838bd182ef244f792}{Copy}} () const
\begin{DoxyCompactList}\small\item\em Copy a string. \end{DoxyCompactList}\item
@@ -144,6 +144,8 @@ xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbString_a8705d7277b72f5aa98021e84438914d
\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}} ()
@@ -448,7 +450,7 @@ Assign portion of string.
\begin{DoxyReturn}{Returns}
Reference to this string.
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ab9045442e57293843652dfce6522ff83}\label{classxb_1_1xbString_ab9045442e57293843652dfce6522ff83}}
+\mbox{\Hypertarget{classxb_1_1xbString_a4f1d709d9f6c56959e8549157b4ee68c}\label{classxb_1_1xbString_a4f1d709d9f6c56959e8549157b4ee68c}}
\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
@@ -468,7 +470,7 @@ Assign portion of string.
\begin{DoxyReturn}{Returns}
Reference to this string.
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a210707223fffc7b3ab31eca4ef29f731}\label{classxb_1_1xbString_a210707223fffc7b3ab31eca4ef29f731}}
+\mbox{\Hypertarget{classxb_1_1xbString_ac6afd224dfbe439ce083c8dd1ad3246c}\label{classxb_1_1xbString_ac6afd224dfbe439ce083c8dd1ad3246c}}
\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
@@ -1362,6 +1364,28 @@ Remove portion of string.
\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}}
@@ -1698,5 +1722,5 @@ std\+::cout \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} My\+String \texorpdfs
The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf b/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf
index 61ec0f3..389c568 100644
--- a/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf
+++ b/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbTblMgr.tex b/docs/doxygen/latex/classxb_1_1xbTblMgr.tex
index 6cb56a0..695e61e 100644
--- a/docs/doxygen/latex/classxb_1_1xbTblMgr.tex
+++ b/docs/doxygen/latex/classxb_1_1xbTblMgr.tex
@@ -27,6 +27,8 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50
\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)
@@ -49,6 +51,10 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+D
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
@@ -110,6 +116,18 @@ static \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{class
\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\+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}}
@@ -272,6 +290,12 @@ xb\+True -\/ Multi user mode turned on.~\newline
\doxysubsubsection{\texorpdfstring{GetOpenTableCount()}{GetOpenTableCount()}}
{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Get\+Open\+Table\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}\label{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetTblListEntry@{GetTblListEntry}}
+\index{GetTblListEntry@{GetTblListEntry}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetTblListEntry()}{GetTblListEntry()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Tbl\+List\+Entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})}
+
\mbox{\Hypertarget{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}\label{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}}
\index{xb::xbTblMgr@{xb::xbTblMgr}!RemoveTblFromTblList@{RemoveTblFromTblList}}
\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
@@ -391,5 +415,5 @@ Get the multi user setting.
The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbXBase.pdf b/docs/doxygen/latex/classxb_1_1xbXBase.pdf
index 8896f3c..8a4a3d1 100644
--- a/docs/doxygen/latex/classxb_1_1xbXBase.pdf
+++ b/docs/doxygen/latex/classxb_1_1xbXBase.pdf
Binary files differ
diff --git a/docs/doxygen/latex/classxb_1_1xbXBase.tex b/docs/doxygen/latex/classxb_1_1xbXBase.tex
index 4cdec63..b08ea8c 100644
--- a/docs/doxygen/latex/classxb_1_1xbXBase.tex
+++ b/docs/doxygen/latex/classxb_1_1xbXBase.tex
@@ -68,6 +68,8 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbTblMgr_a5eebffb9e8cc64141e35c2622045cb50
\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)
@@ -90,6 +92,10 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+D
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+Dump}} (char c) const
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a6982f973e81587b04916f4509746aaf5}{Get\+Default\+Auto\+Commit}} () const
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
@@ -178,6 +184,18 @@ Class Deconstructor.
\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\+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}}
@@ -401,6 +419,12 @@ xb\+True -\/ Multi user mode turned on.~\newline
\doxysubsubsection{\texorpdfstring{GetOpenTableCount()}{GetOpenTableCount()}}
{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Tbl\+Mgr\+::\+Get\+Open\+Table\+Count (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+\mbox{\Hypertarget{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}\label{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}}
+\index{xb::xbXBase@{xb::xbXBase}!GetTblListEntry@{GetTblListEntry}}
+\index{GetTblListEntry@{GetTblListEntry}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetTblListEntry()}{GetTblListEntry()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Tbl\+List\+Entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
\mbox{\Hypertarget{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}\label{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}}
\index{xb::xbXBase@{xb::xbXBase}!Open@{Open}}
\index{Open@{Open}!xb::xbXBase@{xb::xbXBase}}
@@ -659,5 +683,5 @@ Cross platform sleep function.
The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex b/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
index 172d234..3613498 100644
--- a/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
+++ b/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
@@ -1,12 +1,16 @@
-\hypertarget{dir_25b94c3afce00ed38231227d8141f932}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/sql Directory Reference}
-\label{dir_25b94c3afce00ed38231227d8141f932}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql Directory Reference}}
+\hypertarget{dir_25b94c3afce00ed38231227d8141f932}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql Directory Reference}
+\label{dir_25b94c3afce00ed38231227d8141f932}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
+file \mbox{\hyperlink{xbalttbl_8cpp}{xbalttbl.\+cpp}}
+\item
file \mbox{\hyperlink{xbcrix_8cpp}{xbcrix.\+cpp}}
\item
file \mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}}
\item
+file \mbox{\hyperlink{xbdelete_8cpp}{xbdelete.\+cpp}}
+\item
file \mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}}
\item
file \mbox{\hyperlink{xbdrptbl_8cpp}{xbdrptbl.\+cpp}}
diff --git a/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex b/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
index d66d38b..f4e47fb 100644
--- a/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
+++ b/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
@@ -1,14 +1,8 @@
-\hypertarget{dir_313caf1132e152dd9b58bea13a4052ca}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils Directory Reference}
-\label{dir_313caf1132e152dd9b58bea13a4052ca}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils Directory Reference}}
+\hypertarget{dir_313caf1132e152dd9b58bea13a4052ca}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils Directory Reference}
+\label{dir_313caf1132e152dd9b58bea13a4052ca}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
-file \mbox{\hyperlink{checkndx_8cpp}{checkndx.\+cpp}}
-\item
-file \mbox{\hyperlink{dbfxtrct_8cpp}{dbfxtrct.\+cpp}}
-\item
-file \mbox{\hyperlink{reindex_8cpp}{reindex.\+cpp}}
-\item
file \mbox{\hyperlink{xb__cfg__check_8cpp}{xb\+\_\+cfg\+\_\+check.\+cpp}}
\item
file \mbox{\hyperlink{xb__copydbf_8cpp}{xb\+\_\+copydbf.\+cpp}}
diff --git a/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex b/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex
index 29fcc9d..8120370 100644
--- a/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex
+++ b/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex
@@ -1,5 +1,5 @@
-\hypertarget{dir_68267d1309a1af8e8297ef4c3efbcdba}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src Directory Reference}
-\label{dir_68267d1309a1af8e8297ef4c3efbcdba}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src Directory Reference}}
+\hypertarget{dir_68267d1309a1af8e8297ef4c3efbcdba}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src Directory Reference}
+\label{dir_68267d1309a1af8e8297ef4c3efbcdba}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src Directory Reference}}
\doxysubsection*{Directories}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex b/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex
index 36bf939..e75fef9 100644
--- a/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex
+++ b/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex
@@ -1,5 +1,5 @@
-\hypertarget{dir_aebb8dcc11953d78e620bbef0b9e2183}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core Directory Reference}
-\label{dir_aebb8dcc11953d78e620bbef0b9e2183}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core Directory Reference}}
+\hypertarget{dir_aebb8dcc11953d78e620bbef0b9e2183}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core Directory Reference}
+\label{dir_aebb8dcc11953d78e620bbef0b9e2183}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex b/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex
index ffaa610..ec479db 100644
--- a/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex
+++ b/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex
@@ -1,5 +1,5 @@
-\hypertarget{dir_b0856f6b0d80ccb263b2f415c91f9e17}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include Directory Reference}
-\label{dir_b0856f6b0d80ccb263b2f415c91f9e17}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include Directory Reference}}
+\hypertarget{dir_b0856f6b0d80ccb263b2f415c91f9e17}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include Directory Reference}
+\label{dir_b0856f6b0d80ccb263b2f415c91f9e17}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex b/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex
index b6da6b1..c325fc6 100644
--- a/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex
+++ b/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex
@@ -1,5 +1,5 @@
-\hypertarget{dir_d93a1d4020dea85bb71b237545b5e722}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests Directory Reference}
-\label{dir_d93a1d4020dea85bb71b237545b5e722}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests Directory Reference}}
+\hypertarget{dir_d93a1d4020dea85bb71b237545b5e722}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests Directory Reference}
+\label{dir_d93a1d4020dea85bb71b237545b5e722}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
@@ -39,8 +39,6 @@ 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__ndx2_8cpp}{xb\+\_\+test\+\_\+ndx2.\+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}}
diff --git a/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex b/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex
index 95a3031..42a8762 100644
--- a/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex
+++ b/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex
@@ -1,5 +1,5 @@
-\hypertarget{dir_e931c1a3f0014e624d0645a271726ad2}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/examples Directory Reference}
-\label{dir_e931c1a3f0014e624d0645a271726ad2}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples Directory Reference}}
+\hypertarget{dir_e931c1a3f0014e624d0645a271726ad2}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/examples Directory Reference}
+\label{dir_e931c1a3f0014e624d0645a271726ad2}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/files.tex b/docs/doxygen/latex/files.tex
index f02ab4a..5562162 100644
--- a/docs/doxygen/latex/files.tex
+++ b/docs/doxygen/latex/files.tex
@@ -1,104 +1,102 @@
\doxysection{File List}
Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbbcd_8cpp}{xbbcd.\+cpp}} }{\pageref{xbbcd_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}} }{\pageref{xbdate_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}} }{\pageref{xbdbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbdbf3_8cpp}{xbdbf3.\+cpp}} }{\pageref{xbdbf3_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbdbf4_8cpp}{xbdbf4.\+cpp}} }{\pageref{xbdbf4_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbexp_8cpp}{xbexp.\+cpp}} }{\pageref{xbexp_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbexpnode_8cpp}{xbexpnode.\+cpp}} }{\pageref{xbexpnode_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}} }{\pageref{xbfields_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}} }{\pageref{xbfile_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbfilter_8cpp}{xbfilter.\+cpp}} }{\pageref{xbfilter_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbfuncs_8cpp}{xbfuncs.\+cpp}} }{\pageref{xbfuncs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbixbase_8cpp}{xbixbase.\+cpp}} }{\pageref{xbixbase_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbixmdx_8cpp}{xbixmdx.\+cpp}} }{\pageref{xbixmdx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbixndx_8cpp}{xbixndx.\+cpp}} }{\pageref{xbixndx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xblog_8cpp}{xblog.\+cpp}} }{\pageref{xblog_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbmemo_8cpp}{xbmemo.\+cpp}} }{\pageref{xbmemo_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbmemo3_8cpp}{xbmemo3.\+cpp}} }{\pageref{xbmemo3_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbmemo4_8cpp}{xbmemo4.\+cpp}} }{\pageref{xbmemo4_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}} }{\pageref{xbssv_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}} }{\pageref{xbstring_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbtag_8cpp}{xbtag.\+cpp}} }{\pageref{xbtag_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}} }{\pageref{xbtblmgr_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbuda_8cpp}{xbuda.\+cpp}} }{\pageref{xbuda_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}} }{\pageref{xbxbase_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/src/include/\mbox{\hyperlink{xbase_8h}{xbase.\+h}} }{\pageref{xbase_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbbcd_8h}{xbbcd.\+h}} }{\pageref{xbbcd_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}} }{\pageref{xbdate_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}} }{\pageref{xbdbf_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbexp_8h}{xbexp.\+h}} }{\pageref{xbexp_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.\+h}} }{\pageref{xbexpnode_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}} }{\pageref{xbfile_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbfilter_8h}{xbfilter.\+h}} }{\pageref{xbfilter_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbindex_8h}{xbindex.\+h}} }{\pageref{xbindex_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xblnklst_8h}{xblnklst.\+h}} }{\pageref{xblnklst_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.\+h}} }{\pageref{xblnklstord_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xblnknod_8h}{xblnknod.\+h}} }{\pageref{xblnknod_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xblog_8h}{xblog.\+h}} }{\pageref{xblog_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbmemo_8h}{xbmemo.\+h}} }{\pageref{xbmemo_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbretcod_8h}{xbretcod.\+h}} }{\pageref{xbretcod_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbsql_8h}{xbsql.\+h}} }{\pageref{xbsql_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}} }{\pageref{xbssv_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}} }{\pageref{xbstring_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbtag_8h}{xbtag.\+h}} }{\pageref{xbtag_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}} }{\pageref{xbtblmgr_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbtypes_8h}{xbtypes.\+h}} }{\pageref{xbtypes_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbuda_8h}{xbuda.\+h}} }{\pageref{xbuda_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}} }{\pageref{xbxbase_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/sql/\mbox{\hyperlink{xbcrix_8cpp}{xbcrix.\+cpp}} }{\pageref{xbcrix_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/sql/\mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}} }{\pageref{xbcrtbl_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/sql/\mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}} }{\pageref{xbdrpix_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/sql/\mbox{\hyperlink{xbdrptbl_8cpp}{xbdrptbl.\+cpp}} }{\pageref{xbdrptbl_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/sql/\mbox{\hyperlink{xbinsert_8cpp}{xbinsert.\+cpp}} }{\pageref{xbinsert_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/sql/\mbox{\hyperlink{xbset_8cpp}{xbset.\+cpp}} }{\pageref{xbset_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/sql/\mbox{\hyperlink{xbsql_8cpp}{xbsql.\+cpp}} }{\pageref{xbsql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/tests/\mbox{\hyperlink{tstfuncs_8cpp}{tstfuncs.\+cpp}} }{\pageref{tstfuncs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/src/tests/\mbox{\hyperlink{xb__test__ndx2_8cpp}{xb\+\_\+test\+\_\+ndx2.\+cpp}} }{\pageref{xb__test__ndx2_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/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.\+0.\+2/src/utils/\mbox{\hyperlink{checkndx_8cpp}{checkndx.\+cpp}} }{\pageref{checkndx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{dbfxtrct_8cpp}{dbfxtrct.\+cpp}} }{\pageref{dbfxtrct_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{reindex_8cpp}{reindex.\+cpp}} }{\pageref{reindex_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/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.\+0.\+2/src/utils/\mbox{\hyperlink{xb__copydbf_8cpp}{xb\+\_\+copydbf.\+cpp}} }{\pageref{xb__copydbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__dbfutil_8cpp}{xb\+\_\+dbfutil.\+cpp}} }{\pageref{xb__dbfutil_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__deletall_8cpp}{xb\+\_\+deletall.\+cpp}} }{\pageref{xb__deletall_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__dumpdbt_8cpp}{xb\+\_\+dumpdbt.\+cpp}} }{\pageref{xb__dumpdbt_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__dumphdr_8cpp}{xb\+\_\+dumphdr.\+cpp}} }{\pageref{xb__dumphdr_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__dumpix_8cpp}{xb\+\_\+dumpix.\+cpp}} }{\pageref{xb__dumpix_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__dumprecs_8cpp}{xb\+\_\+dumprecs.\+cpp}} }{\pageref{xb__dumprecs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__execsql_8cpp}{xb\+\_\+execsql.\+cpp}} }{\pageref{xb__execsql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__pack_8cpp}{xb\+\_\+pack.\+cpp}} }{\pageref{xb__pack_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__tblinfo_8cpp}{xb\+\_\+tblinfo.\+cpp}} }{\pageref{xb__tblinfo_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__undelall_8cpp}{xb\+\_\+undelall.\+cpp}} }{\pageref{xb__undelall_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/utils/\mbox{\hyperlink{xb__zap_8cpp}{xb\+\_\+zap.\+cpp}} }{\pageref{xb__zap_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbbcd_8cpp}{xbbcd.\+cpp}} }{\pageref{xbbcd_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}} }{\pageref{xbdate_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}} }{\pageref{xbdbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbdbf3_8cpp}{xbdbf3.\+cpp}} }{\pageref{xbdbf3_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbdbf4_8cpp}{xbdbf4.\+cpp}} }{\pageref{xbdbf4_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbexp_8cpp}{xbexp.\+cpp}} }{\pageref{xbexp_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbexpnode_8cpp}{xbexpnode.\+cpp}} }{\pageref{xbexpnode_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}} }{\pageref{xbfields_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}} }{\pageref{xbfile_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbfilter_8cpp}{xbfilter.\+cpp}} }{\pageref{xbfilter_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbfuncs_8cpp}{xbfuncs.\+cpp}} }{\pageref{xbfuncs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbixbase_8cpp}{xbixbase.\+cpp}} }{\pageref{xbixbase_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbixmdx_8cpp}{xbixmdx.\+cpp}} }{\pageref{xbixmdx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbixndx_8cpp}{xbixndx.\+cpp}} }{\pageref{xbixndx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xblog_8cpp}{xblog.\+cpp}} }{\pageref{xblog_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbmemo_8cpp}{xbmemo.\+cpp}} }{\pageref{xbmemo_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbmemo3_8cpp}{xbmemo3.\+cpp}} }{\pageref{xbmemo3_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbmemo4_8cpp}{xbmemo4.\+cpp}} }{\pageref{xbmemo4_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}} }{\pageref{xbssv_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}} }{\pageref{xbstring_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbtag_8cpp}{xbtag.\+cpp}} }{\pageref{xbtag_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}} }{\pageref{xbtblmgr_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbuda_8cpp}{xbuda.\+cpp}} }{\pageref{xbuda_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}} }{\pageref{xbxbase_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/src/include/\mbox{\hyperlink{xbase_8h}{xbase.\+h}} }{\pageref{xbase_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbbcd_8h}{xbbcd.\+h}} }{\pageref{xbbcd_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}} }{\pageref{xbdate_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}} }{\pageref{xbdbf_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbexp_8h}{xbexp.\+h}} }{\pageref{xbexp_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.\+h}} }{\pageref{xbexpnode_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}} }{\pageref{xbfile_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbfilter_8h}{xbfilter.\+h}} }{\pageref{xbfilter_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbindex_8h}{xbindex.\+h}} }{\pageref{xbindex_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xblnklst_8h}{xblnklst.\+h}} }{\pageref{xblnklst_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.\+h}} }{\pageref{xblnklstord_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xblnknod_8h}{xblnknod.\+h}} }{\pageref{xblnknod_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xblog_8h}{xblog.\+h}} }{\pageref{xblog_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbmemo_8h}{xbmemo.\+h}} }{\pageref{xbmemo_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbretcod_8h}{xbretcod.\+h}} }{\pageref{xbretcod_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbsql_8h}{xbsql.\+h}} }{\pageref{xbsql_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}} }{\pageref{xbssv_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}} }{\pageref{xbstring_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbtag_8h}{xbtag.\+h}} }{\pageref{xbtag_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}} }{\pageref{xbtblmgr_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbtypes_8h}{xbtypes.\+h}} }{\pageref{xbtypes_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbuda_8h}{xbuda.\+h}} }{\pageref{xbuda_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}} }{\pageref{xbxbase_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/sql/\mbox{\hyperlink{xbalttbl_8cpp}{xbalttbl.\+cpp}} }{\pageref{xbalttbl_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/sql/\mbox{\hyperlink{xbcrix_8cpp}{xbcrix.\+cpp}} }{\pageref{xbcrix_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/sql/\mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}} }{\pageref{xbcrtbl_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/sql/\mbox{\hyperlink{xbdelete_8cpp}{xbdelete.\+cpp}} }{\pageref{xbdelete_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/sql/\mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}} }{\pageref{xbdrpix_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/sql/\mbox{\hyperlink{xbdrptbl_8cpp}{xbdrptbl.\+cpp}} }{\pageref{xbdrptbl_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/sql/\mbox{\hyperlink{xbinsert_8cpp}{xbinsert.\+cpp}} }{\pageref{xbinsert_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/sql/\mbox{\hyperlink{xbset_8cpp}{xbset.\+cpp}} }{\pageref{xbset_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/sql/\mbox{\hyperlink{xbsql_8cpp}{xbsql.\+cpp}} }{\pageref{xbsql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/tests/\mbox{\hyperlink{tstfuncs_8cpp}{tstfuncs.\+cpp}} }{\pageref{tstfuncs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/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.\+0.\+3/src/utils/\mbox{\hyperlink{xb__copydbf_8cpp}{xb\+\_\+copydbf.\+cpp}} }{\pageref{xb__copydbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__dbfutil_8cpp}{xb\+\_\+dbfutil.\+cpp}} }{\pageref{xb__dbfutil_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__deletall_8cpp}{xb\+\_\+deletall.\+cpp}} }{\pageref{xb__deletall_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__dumpdbt_8cpp}{xb\+\_\+dumpdbt.\+cpp}} }{\pageref{xb__dumpdbt_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__dumphdr_8cpp}{xb\+\_\+dumphdr.\+cpp}} }{\pageref{xb__dumphdr_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__dumpix_8cpp}{xb\+\_\+dumpix.\+cpp}} }{\pageref{xb__dumpix_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__dumprecs_8cpp}{xb\+\_\+dumprecs.\+cpp}} }{\pageref{xb__dumprecs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__execsql_8cpp}{xb\+\_\+execsql.\+cpp}} }{\pageref{xb__execsql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__pack_8cpp}{xb\+\_\+pack.\+cpp}} }{\pageref{xb__pack_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__tblinfo_8cpp}{xb\+\_\+tblinfo.\+cpp}} }{\pageref{xb__tblinfo_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__undelall_8cpp}{xb\+\_\+undelall.\+cpp}} }{\pageref{xb__undelall_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/utils/\mbox{\hyperlink{xb__zap_8cpp}{xb\+\_\+zap.\+cpp}} }{\pageref{xb__zap_8cpp}}{}
\end{DoxyCompactList}
diff --git a/docs/doxygen/latex/refman.tex b/docs/doxygen/latex/refman.tex
index 3f408ed..6a9ec26 100644
--- a/docs/doxygen/latex/refman.tex
+++ b/docs/doxygen/latex/refman.tex
@@ -273,8 +273,10 @@
\input{xbuda_8h_source}
\input{xbxbase_8h}
\input{xbxbase_8h_source}
+\input{xbalttbl_8cpp}
\input{xbcrix_8cpp}
\input{xbcrtbl_8cpp}
+\input{xbdelete_8cpp}
\input{xbdrpix_8cpp}
\input{xbdrptbl_8cpp}
\input{xbinsert_8cpp}
@@ -298,15 +300,11 @@
\input{xb__test__log_8cpp}
\input{xb__test__mdx_8cpp}
\input{xb__test__ndx_8cpp}
-\input{xb__test__ndx2_8cpp}
\input{xb__test__sql_8cpp}
\input{xb__test__string_8cpp}
\input{xb__test__tblmgr_8cpp}
\input{xb__test__uda_8cpp}
\input{xb__test__xbase_8cpp}
-\input{checkndx_8cpp}
-\input{dbfxtrct_8cpp}
-\input{reindex_8cpp}
\input{xb__cfg__check_8cpp}
\input{xb__copydbf_8cpp}
\input{xb__dbfutil_8cpp}
diff --git a/docs/doxygen/latex/structxb_1_1xbSchema.tex b/docs/doxygen/latex/structxb_1_1xbSchema.tex
index 290259b..6e49e45 100644
--- a/docs/doxygen/latex/structxb_1_1xbSchema.tex
+++ b/docs/doxygen/latex/structxb_1_1xbSchema.tex
@@ -74,4 +74,4 @@ See program \mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\
The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/structxb_1_1xbTblList.tex b/docs/doxygen/latex/structxb_1_1xbTblList.tex
index 2c3bddb..4ddaab0 100644
--- a/docs/doxygen/latex/structxb_1_1xbTblList.tex
+++ b/docs/doxygen/latex/structxb_1_1xbTblList.tex
@@ -46,4 +46,4 @@
The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+2/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+0.\+3/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/tstfuncs_8cpp.tex b/docs/doxygen/latex/tstfuncs_8cpp.tex
index 5156893..acec80e 100644
--- a/docs/doxygen/latex/tstfuncs_8cpp.tex
+++ b/docs/doxygen/latex/tstfuncs_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{tstfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/tstfuncs.cpp File Reference}
-\label{tstfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/tstfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/tstfuncs.cpp}}
+\hypertarget{tstfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/tstfuncs.cpp File Reference}
+\label{tstfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/tstfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/tstfuncs.cpp}}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item
@@ -23,8 +23,6 @@ xb\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_af1c78fb72bcd39eb86f11aa2887fe62c}{Test
\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\+Int16 \mbox{\hyperlink{tstfuncs_8cpp_aa5dbb64c6135ac01f79e5b6087270cf5}{File\+Compare}} (xb\+XBase \&x, xb\+Int16 i\+Po, const xb\+String \&s\+File1, const xb\+String \&s\+File2, const xb\+String \&s\+Skip\+Bytes)
-\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)
@@ -61,12 +59,6 @@ time\+\_\+t \mbox{\hyperlink{tstfuncs_8cpp_ae2281da6157495d69406c35f69a61f9f}{ti
\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_aa5dbb64c6135ac01f79e5b6087270cf5}\label{tstfuncs_8cpp_aa5dbb64c6135ac01f79e5b6087270cf5}}
-\index{tstfuncs.cpp@{tstfuncs.cpp}!FileCompare@{FileCompare}}
-\index{FileCompare@{FileCompare}!tstfuncs.cpp@{tstfuncs.cpp}}
-\doxysubsubsection{\texorpdfstring{FileCompare()}{FileCompare()}}
-{\footnotesize\ttfamily xb\+Int16 File\+Compare (\begin{DoxyParamCaption}\item[{xb\+XBase \&}]{x, }\item[{xb\+Int16}]{i\+Po, }\item[{const xb\+String \&}]{s\+File1, }\item[{const xb\+String \&}]{s\+File2, }\item[{const xb\+String \&}]{s\+Skip\+Bytes }\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}}
diff --git a/docs/doxygen/latex/xb__cfg__check_8cpp.tex b/docs/doxygen/latex/xb__cfg__check_8cpp.tex
index 1a04cc5..4e50ce2 100644
--- a/docs/doxygen/latex/xb__cfg__check_8cpp.tex
+++ b/docs/doxygen/latex/xb__cfg__check_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__cfg__check_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+cfg\+\_\+check.cpp File Reference}
-\label{xb__cfg__check_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_cfg\_check.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_cfg\_check.cpp}}
+\hypertarget{xb__cfg__check_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+cfg\+\_\+check.cpp File Reference}
+\label{xb__cfg__check_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_cfg\_check.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_cfg\_check.cpp}}
{\ttfamily \#include $<$stdio.\+h$>$}\newline
{\ttfamily \#include $<$stdlib.\+h$>$}\newline
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xb__copydbf_8cpp.tex b/docs/doxygen/latex/xb__copydbf_8cpp.tex
index d9cd854..a7de780 100644
--- a/docs/doxygen/latex/xb__copydbf_8cpp.tex
+++ b/docs/doxygen/latex/xb__copydbf_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__copydbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+copydbf.cpp File Reference}
-\label{xb__copydbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_copydbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_copydbf.cpp}}
+\hypertarget{xb__copydbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+copydbf.cpp File Reference}
+\label{xb__copydbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_copydbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_copydbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__dbfutil_8cpp.tex b/docs/doxygen/latex/xb__dbfutil_8cpp.tex
index 029d025..6e6b9d0 100644
--- a/docs/doxygen/latex/xb__dbfutil_8cpp.tex
+++ b/docs/doxygen/latex/xb__dbfutil_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__dbfutil_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+dbfutil.cpp File Reference}
-\label{xb__dbfutil_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dbfutil.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dbfutil.cpp}}
+\hypertarget{xb__dbfutil_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+dbfutil.cpp File Reference}
+\label{xb__dbfutil_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dbfutil.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dbfutil.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__deletall_8cpp.tex b/docs/doxygen/latex/xb__deletall_8cpp.tex
index b85752c..25dfb54 100644
--- a/docs/doxygen/latex/xb__deletall_8cpp.tex
+++ b/docs/doxygen/latex/xb__deletall_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__deletall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+deletall.cpp File Reference}
-\label{xb__deletall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_deletall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_deletall.cpp}}
+\hypertarget{xb__deletall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+deletall.cpp File Reference}
+\label{xb__deletall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_deletall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_deletall.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__dumpdbt_8cpp.tex b/docs/doxygen/latex/xb__dumpdbt_8cpp.tex
index 334d1a5..422a8f7 100644
--- a/docs/doxygen/latex/xb__dumpdbt_8cpp.tex
+++ b/docs/doxygen/latex/xb__dumpdbt_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__dumpdbt_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+dumpdbt.cpp File Reference}
-\label{xb__dumpdbt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dumpdbt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dumpdbt.cpp}}
+\hypertarget{xb__dumpdbt_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+dumpdbt.cpp File Reference}
+\label{xb__dumpdbt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dumpdbt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dumpdbt.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__dumphdr_8cpp.tex b/docs/doxygen/latex/xb__dumphdr_8cpp.tex
index 4f0b5c3..6793238 100644
--- a/docs/doxygen/latex/xb__dumphdr_8cpp.tex
+++ b/docs/doxygen/latex/xb__dumphdr_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__dumphdr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+dumphdr.cpp File Reference}
-\label{xb__dumphdr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dumphdr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dumphdr.cpp}}
+\hypertarget{xb__dumphdr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+dumphdr.cpp File Reference}
+\label{xb__dumphdr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dumphdr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dumphdr.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__dumpix_8cpp.tex b/docs/doxygen/latex/xb__dumpix_8cpp.tex
index 52f034d..347b4cd 100644
--- a/docs/doxygen/latex/xb__dumpix_8cpp.tex
+++ b/docs/doxygen/latex/xb__dumpix_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__dumpix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+dumpix.cpp File Reference}
-\label{xb__dumpix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dumpix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dumpix.cpp}}
+\hypertarget{xb__dumpix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+dumpix.cpp File Reference}
+\label{xb__dumpix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dumpix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dumpix.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__dumprecs_8cpp.tex b/docs/doxygen/latex/xb__dumprecs_8cpp.tex
index 4216e03..bc104e6 100644
--- a/docs/doxygen/latex/xb__dumprecs_8cpp.tex
+++ b/docs/doxygen/latex/xb__dumprecs_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__dumprecs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+dumprecs.cpp File Reference}
-\label{xb__dumprecs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dumprecs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_dumprecs.cpp}}
+\hypertarget{xb__dumprecs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+dumprecs.cpp File Reference}
+\label{xb__dumprecs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dumprecs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_dumprecs.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__date_8cpp.tex b/docs/doxygen/latex/xb__ex__date_8cpp.tex
index b43cf2e..d9a4bb0 100644
--- a/docs/doxygen/latex/xb__ex__date_8cpp.tex
+++ b/docs/doxygen/latex/xb__ex__date_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__ex__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\+\_\+ex\+\_\+date.cpp File Reference}
-\label{xb__ex__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_date.cpp}}
+\hypertarget{xb__ex__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\+\_\+ex\+\_\+date.cpp File Reference}
+\label{xb__ex__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_date.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__sql_8cpp.tex b/docs/doxygen/latex/xb__ex__sql_8cpp.tex
index 13b6ceb..b4e8e20 100644
--- a/docs/doxygen/latex/xb__ex__sql_8cpp.tex
+++ b/docs/doxygen/latex/xb__ex__sql_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__ex__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\+\_\+ex\+\_\+sql.cpp File Reference}
-\label{xb__ex__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_sql.cpp}}
+\hypertarget{xb__ex__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\+\_\+ex\+\_\+sql.cpp File Reference}
+\label{xb__ex__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_sql.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__string_8cpp.tex b/docs/doxygen/latex/xb__ex__string_8cpp.tex
index 94306b6..4043c79 100644
--- a/docs/doxygen/latex/xb__ex__string_8cpp.tex
+++ b/docs/doxygen/latex/xb__ex__string_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__ex__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\+\_\+ex\+\_\+string.cpp File Reference}
-\label{xb__ex__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_string.cpp}}
+\hypertarget{xb__ex__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\+\_\+ex\+\_\+string.cpp File Reference}
+\label{xb__ex__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_string.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex b/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex
index 22a434e..5448ce1 100644
--- a/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex
+++ b/docs/doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__ex__v3__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v3__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_v3\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_v3\_create\_dbf.cpp}}
+\hypertarget{xb__ex__v3__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v3__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_v3\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_v3\_create\_dbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex b/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex
index edcc446..8a1f6ee 100644
--- a/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex
+++ b/docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__ex__v3__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v3__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_v3\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_v3\_upd\_dbf.cpp}}
+\hypertarget{xb__ex__v3__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v3__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_v3\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_v3\_upd\_dbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex b/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex
index a34ee54..e5180f5 100644
--- a/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex
+++ b/docs/doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__ex__v4__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v4__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_v4\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_v4\_create\_dbf.cpp}}
+\hypertarget{xb__ex__v4__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v4__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_v4\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_v4\_create\_dbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex b/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex
index b4b15ff..d06ada7 100644
--- a/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex
+++ b/docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__ex__v4__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v4__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_v4\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/examples/xb\_ex\_v4\_upd\_dbf.cpp}}
+\hypertarget{xb__ex__v4__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v4__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_v4\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/examples/xb\_ex\_v4\_upd\_dbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__execsql_8cpp.tex b/docs/doxygen/latex/xb__execsql_8cpp.tex
index 28ddd4c..e165f03 100644
--- a/docs/doxygen/latex/xb__execsql_8cpp.tex
+++ b/docs/doxygen/latex/xb__execsql_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__execsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+execsql.cpp File Reference}
-\label{xb__execsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_execsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_execsql.cpp}}
+\hypertarget{xb__execsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+execsql.cpp File Reference}
+\label{xb__execsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_execsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_execsql.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__pack_8cpp.tex b/docs/doxygen/latex/xb__pack_8cpp.tex
index 9a2a9a9..0c0bbac 100644
--- a/docs/doxygen/latex/xb__pack_8cpp.tex
+++ b/docs/doxygen/latex/xb__pack_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__pack_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+pack.cpp File Reference}
-\label{xb__pack_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_pack.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_pack.cpp}}
+\hypertarget{xb__pack_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+pack.cpp File Reference}
+\label{xb__pack_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_pack.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_pack.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__tblinfo_8cpp.tex b/docs/doxygen/latex/xb__tblinfo_8cpp.tex
index 1effddc..dc90d9f 100644
--- a/docs/doxygen/latex/xb__tblinfo_8cpp.tex
+++ b/docs/doxygen/latex/xb__tblinfo_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__tblinfo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+tblinfo.cpp File Reference}
-\label{xb__tblinfo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_tblinfo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_tblinfo.cpp}}
+\hypertarget{xb__tblinfo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+tblinfo.cpp File Reference}
+\label{xb__tblinfo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_tblinfo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_tblinfo.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__test__bcd_8cpp.tex b/docs/doxygen/latex/xb__test__bcd_8cpp.tex
index db40641..2da8baa 100644
--- a/docs/doxygen/latex/xb__test__bcd_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__bcd_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__bcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+bcd.cpp File Reference}
-\label{xb__test__bcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_bcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_bcd.cpp}}
+\hypertarget{xb__test__bcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+bcd.cpp File Reference}
+\label{xb__test__bcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_bcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_bcd.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__date_8cpp.tex b/docs/doxygen/latex/xb__test__date_8cpp.tex
index a978788..ae6f280 100644
--- a/docs/doxygen/latex/xb__test__date_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__date_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+date.cpp File Reference}
-\label{xb__test__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_date.cpp}}
+\hypertarget{xb__test__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+date.cpp File Reference}
+\label{xb__test__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_date.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex b/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex
index 4974621..847b1da 100644
--- a/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__dbf__v3__memos_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__dbf__v3__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.cpp File Reference}
-\label{xb__test__dbf__v3__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_dbf\_v3\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_dbf\_v3\_memos.cpp}}
+\hypertarget{xb__test__dbf__v3__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.cpp File Reference}
+\label{xb__test__dbf__v3__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_dbf\_v3\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_dbf\_v3\_memos.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex b/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex
index 35e32d5..d22af64 100644
--- a/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__dbf__v3__nomemos_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__dbf__v3__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.cpp File Reference}
-\label{xb__test__dbf__v3__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp}}
+\hypertarget{xb__test__dbf__v3__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.cpp File Reference}
+\label{xb__test__dbf__v3__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex b/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex
index 34a6200..96a427e 100644
--- a/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__dbf__v4__memos_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__dbf__v4__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.cpp File Reference}
-\label{xb__test__dbf__v4__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_dbf\_v4\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_dbf\_v4\_memos.cpp}}
+\hypertarget{xb__test__dbf__v4__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.cpp File Reference}
+\label{xb__test__dbf__v4__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_dbf\_v4\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_dbf\_v4\_memos.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex b/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex
index c859ec4..4bd23a0 100644
--- a/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__dbf__v4__nomemos_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__dbf__v4__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.cpp File Reference}
-\label{xb__test__dbf__v4__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp}}
+\hypertarget{xb__test__dbf__v4__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.cpp File Reference}
+\label{xb__test__dbf__v4__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__expnode_8cpp.tex b/docs/doxygen/latex/xb__test__expnode_8cpp.tex
index 2cde3bb..a95fea8 100644
--- a/docs/doxygen/latex/xb__test__expnode_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__expnode_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__expnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+expnode.cpp File Reference}
-\label{xb__test__expnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_expnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_expnode.cpp}}
+\hypertarget{xb__test__expnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+expnode.cpp File Reference}
+\label{xb__test__expnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_expnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_expnode.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__expression_8cpp.tex b/docs/doxygen/latex/xb__test__expression_8cpp.tex
index b7584d5..6822ce3 100644
--- a/docs/doxygen/latex/xb__test__expression_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__expression_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__expression_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+expression.cpp File Reference}
-\label{xb__test__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_expression.cpp}}
+\hypertarget{xb__test__expression_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+expression.cpp File Reference}
+\label{xb__test__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_expression.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__file_8cpp.tex b/docs/doxygen/latex/xb__test__file_8cpp.tex
index 453934d..7b59e72 100644
--- a/docs/doxygen/latex/xb__test__file_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__file_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__file_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+file.cpp File Reference}
-\label{xb__test__file_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_file.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_file.cpp}}
+\hypertarget{xb__test__file_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+file.cpp File Reference}
+\label{xb__test__file_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_file.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_file.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__filter_8cpp.tex b/docs/doxygen/latex/xb__test__filter_8cpp.tex
index 2133a8f..a9c8390 100644
--- a/docs/doxygen/latex/xb__test__filter_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__filter_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__filter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+filter.cpp File Reference}
-\label{xb__test__filter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_filter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_filter.cpp}}
+\hypertarget{xb__test__filter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+filter.cpp File Reference}
+\label{xb__test__filter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_filter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_filter.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__funcs_8cpp.tex b/docs/doxygen/latex/xb__test__funcs_8cpp.tex
index 8f4707b..b72dc8f 100644
--- a/docs/doxygen/latex/xb__test__funcs_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__funcs_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__funcs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+funcs.cpp File Reference}
-\label{xb__test__funcs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_funcs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_funcs.cpp}}
+\hypertarget{xb__test__funcs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+funcs.cpp File Reference}
+\label{xb__test__funcs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_funcs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_funcs.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__linklist_8cpp.tex b/docs/doxygen/latex/xb__test__linklist_8cpp.tex
index 4958af6..3b3f30d 100644
--- a/docs/doxygen/latex/xb__test__linklist_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__linklist_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__linklist_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+linklist.cpp File Reference}
-\label{xb__test__linklist_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_linklist.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_linklist.cpp}}
+\hypertarget{xb__test__linklist_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+linklist.cpp File Reference}
+\label{xb__test__linklist_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_linklist.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_linklist.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__lock2_8cpp.tex b/docs/doxygen/latex/xb__test__lock2_8cpp.tex
index c356482..240d8a3 100644
--- a/docs/doxygen/latex/xb__test__lock2_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__lock2_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__lock2_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+lock2.cpp File Reference}
-\label{xb__test__lock2_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_lock2.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_lock2.cpp}}
+\hypertarget{xb__test__lock2_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+lock2.cpp File Reference}
+\label{xb__test__lock2_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_lock2.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_lock2.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__lock_8cpp.tex b/docs/doxygen/latex/xb__test__lock_8cpp.tex
index 92829df..4623d0c 100644
--- a/docs/doxygen/latex/xb__test__lock_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__lock_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__lock_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+lock.cpp File Reference}
-\label{xb__test__lock_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_lock.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_lock.cpp}}
+\hypertarget{xb__test__lock_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+lock.cpp File Reference}
+\label{xb__test__lock_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_lock.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_lock.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__log_8cpp.tex b/docs/doxygen/latex/xb__test__log_8cpp.tex
index 1587195..0178366 100644
--- a/docs/doxygen/latex/xb__test__log_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__log_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__log_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+log.cpp File Reference}
-\label{xb__test__log_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_log.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_log.cpp}}
+\hypertarget{xb__test__log_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+log.cpp File Reference}
+\label{xb__test__log_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_log.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_log.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__mdx_8cpp.tex b/docs/doxygen/latex/xb__test__mdx_8cpp.tex
index 3715bff..0b9950d 100644
--- a/docs/doxygen/latex/xb__test__mdx_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__mdx_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__mdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+mdx.cpp File Reference}
-\label{xb__test__mdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_mdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_mdx.cpp}}
+\hypertarget{xb__test__mdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+mdx.cpp File Reference}
+\label{xb__test__mdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_mdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_mdx.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__ndx_8cpp.tex b/docs/doxygen/latex/xb__test__ndx_8cpp.tex
index ea77fa3..29b8240 100644
--- a/docs/doxygen/latex/xb__test__ndx_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__ndx_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__ndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+ndx.cpp File Reference}
-\label{xb__test__ndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_ndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_ndx.cpp}}
+\hypertarget{xb__test__ndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+ndx.cpp File Reference}
+\label{xb__test__ndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_ndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_ndx.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__sql_8cpp.tex b/docs/doxygen/latex/xb__test__sql_8cpp.tex
index 982eee2..d85011b 100644
--- a/docs/doxygen/latex/xb__test__sql_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__sql_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+sql.cpp File Reference}
-\label{xb__test__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_sql.cpp}}
+\hypertarget{xb__test__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+sql.cpp File Reference}
+\label{xb__test__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_sql.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__string_8cpp.tex b/docs/doxygen/latex/xb__test__string_8cpp.tex
index 425e05b..8a869d4 100644
--- a/docs/doxygen/latex/xb__test__string_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__string_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+string.cpp File Reference}
-\label{xb__test__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_string.cpp}}
+\hypertarget{xb__test__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+string.cpp File Reference}
+\label{xb__test__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_string.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Macros}
diff --git a/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex b/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex
index b1bf3b6..f31b5b3 100644
--- a/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__tblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+tblmgr.cpp File Reference}
-\label{xb__test__tblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_tblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_tblmgr.cpp}}
+\hypertarget{xb__test__tblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+tblmgr.cpp File Reference}
+\label{xb__test__tblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_tblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_tblmgr.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__uda_8cpp.tex b/docs/doxygen/latex/xb__test__uda_8cpp.tex
index 734c593..3f6753d 100644
--- a/docs/doxygen/latex/xb__test__uda_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__uda_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__uda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+uda.cpp File Reference}
-\label{xb__test__uda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_uda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_uda.cpp}}
+\hypertarget{xb__test__uda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+uda.cpp File Reference}
+\label{xb__test__uda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_uda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_uda.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__xbase_8cpp.tex b/docs/doxygen/latex/xb__test__xbase_8cpp.tex
index 82b8868..e43218f 100644
--- a/docs/doxygen/latex/xb__test__xbase_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__xbase_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__xbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\+\_\+test\+\_\+xbase.cpp File Reference}
-\label{xb__test__xbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_xbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/tests/xb\_test\_xbase.cpp}}
+\hypertarget{xb__test__xbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\+\_\+test\+\_\+xbase.cpp File Reference}
+\label{xb__test__xbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_xbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/tests/xb\_test\_xbase.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__undelall_8cpp.tex b/docs/doxygen/latex/xb__undelall_8cpp.tex
index 755564d..93d5bf4 100644
--- a/docs/doxygen/latex/xb__undelall_8cpp.tex
+++ b/docs/doxygen/latex/xb__undelall_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__undelall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+undelall.cpp File Reference}
-\label{xb__undelall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_undelall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_undelall.cpp}}
+\hypertarget{xb__undelall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+undelall.cpp File Reference}
+\label{xb__undelall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_undelall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_undelall.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__zap_8cpp.tex b/docs/doxygen/latex/xb__zap_8cpp.tex
index 38b6e9e..f8b3371 100644
--- a/docs/doxygen/latex/xb__zap_8cpp.tex
+++ b/docs/doxygen/latex/xb__zap_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__zap_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\+\_\+zap.cpp File Reference}
-\label{xb__zap_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_zap.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/utils/xb\_zap.cpp}}
+\hypertarget{xb__zap_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\+\_\+zap.cpp File Reference}
+\label{xb__zap_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_zap.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/utils/xb\_zap.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbalttbl_8cpp.tex b/docs/doxygen/latex/xbalttbl_8cpp.tex
new file mode 100644
index 0000000..c470daa
--- /dev/null
+++ b/docs/doxygen/latex/xbalttbl_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbalttbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql/xbalttbl.cpp File Reference}
+\label{xbalttbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbalttbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbalttbl.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbase_8h.tex b/docs/doxygen/latex/xbase_8h.tex
index e25b125..ab9b258 100644
--- a/docs/doxygen/latex/xbase_8h.tex
+++ b/docs/doxygen/latex/xbase_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbase.h File Reference}
-\label{xbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbase.h}}
+\hypertarget{xbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbase.h File Reference}
+\label{xbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbase.h}}
{\ttfamily \#include $<$xbconfig.\+h$>$}\newline
{\ttfamily \#include $<$stdio.\+h$>$}\newline
{\ttfamily \#include $<$errno.\+h$>$}\newline
diff --git a/docs/doxygen/latex/xbase_8h_source.tex b/docs/doxygen/latex/xbase_8h_source.tex
index d9cbba6..e8a52ec 100644
--- a/docs/doxygen/latex/xbase_8h_source.tex
+++ b/docs/doxygen/latex/xbase_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbase_8h_source}{}\doxysection{xbase.\+h}
-\label{xbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbase.h}}
+\label{xbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbase.h}}
\mbox{\hyperlink{xbase_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbase.h}}
@@ -62,38 +62,40 @@
\DoxyCodeLine{58 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{59 }
\DoxyCodeLine{60 \textcolor{preprocessor}{\#ifdef HAVE\_VARARGS\_H}}
-\DoxyCodeLine{61 \textcolor{preprocessor}{\#include <varargs.h>}}
-\DoxyCodeLine{62 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{63 }
-\DoxyCodeLine{64 \textcolor{preprocessor}{\#ifdef HAVE\_WINDOWS\_H}}
-\DoxyCodeLine{65 \textcolor{preprocessor}{\#include <windows.h>}}
-\DoxyCodeLine{66 \textcolor{preprocessor}{\#include <io.h>}}
-\DoxyCodeLine{67 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{68 }
-\DoxyCodeLine{69 \textcolor{preprocessor}{\#include <iomanip>}}
+\DoxyCodeLine{61 \textcolor{preprocessor}{\#ifndef HAVE\_STDARG\_H}}
+\DoxyCodeLine{62 \textcolor{preprocessor}{\#include <varargs.h>}}
+\DoxyCodeLine{63 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{64 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{65 }
+\DoxyCodeLine{66 \textcolor{preprocessor}{\#ifdef HAVE\_WINDOWS\_H}}
+\DoxyCodeLine{67 \textcolor{preprocessor}{\#include <windows.h>}}
+\DoxyCodeLine{68 \textcolor{preprocessor}{\#include <io.h>}}
+\DoxyCodeLine{69 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{70 }
-\DoxyCodeLine{71 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbretcod_8h}{xbretcod.h}}>}}
-\DoxyCodeLine{72 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtypes_8h}{xbtypes.h}}>}}
-\DoxyCodeLine{73 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbstring_8h}{xbstring.h}}>}}
-\DoxyCodeLine{74 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbssv_8h}{xbssv.h}}>}}
-\DoxyCodeLine{75 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbdate_8h}{xbdate.h}}>}}
-\DoxyCodeLine{76 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.h}}>}}
-\DoxyCodeLine{77 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbxbase_8h}{xbxbase.h}}>}}
-\DoxyCodeLine{78 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnknod_8h}{xblnknod.h}}>}}
-\DoxyCodeLine{79 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnklst_8h}{xblnklst.h}}>}}
-\DoxyCodeLine{80 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.h}}>}}
-\DoxyCodeLine{81 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbfile_8h}{xbfile.h}}>}}
-\DoxyCodeLine{82 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblog_8h}{xblog.h}}>}}
-\DoxyCodeLine{83 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbmemo_8h}{xbmemo.h}}>}}
-\DoxyCodeLine{84 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbbcd_8h}{xbbcd.h}}>}}
-\DoxyCodeLine{85 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbuda_8h}{xbuda.h}}>}}
-\DoxyCodeLine{86 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.h}}>}}
-\DoxyCodeLine{87 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbexp_8h}{xbexp.h}}>}}
-\DoxyCodeLine{88 }
-\DoxyCodeLine{89 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtag_8h}{xbtag.h}}>}}
-\DoxyCodeLine{90 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbdbf_8h}{xbdbf.h}}>} \textcolor{comment}{/* dbf base class */}}
-\DoxyCodeLine{91 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbindex_8h}{xbindex.h}}>} \textcolor{comment}{/* index base class */}}
-\DoxyCodeLine{92 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbfilter_8h}{xbfilter.h}}>}}
-\DoxyCodeLine{93 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbsql_8h}{xbsql.h}}>}}
+\DoxyCodeLine{71 \textcolor{preprocessor}{\#include <iomanip>}}
+\DoxyCodeLine{72 }
+\DoxyCodeLine{73 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbretcod_8h}{xbretcod.h}}>}}
+\DoxyCodeLine{74 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtypes_8h}{xbtypes.h}}>}}
+\DoxyCodeLine{75 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbstring_8h}{xbstring.h}}>}}
+\DoxyCodeLine{76 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbssv_8h}{xbssv.h}}>}}
+\DoxyCodeLine{77 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbdate_8h}{xbdate.h}}>}}
+\DoxyCodeLine{78 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.h}}>}}
+\DoxyCodeLine{79 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbxbase_8h}{xbxbase.h}}>}}
+\DoxyCodeLine{80 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnknod_8h}{xblnknod.h}}>}}
+\DoxyCodeLine{81 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnklst_8h}{xblnklst.h}}>}}
+\DoxyCodeLine{82 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.h}}>}}
+\DoxyCodeLine{83 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbfile_8h}{xbfile.h}}>}}
+\DoxyCodeLine{84 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xblog_8h}{xblog.h}}>}}
+\DoxyCodeLine{85 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbmemo_8h}{xbmemo.h}}>}}
+\DoxyCodeLine{86 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbbcd_8h}{xbbcd.h}}>}}
+\DoxyCodeLine{87 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbuda_8h}{xbuda.h}}>}}
+\DoxyCodeLine{88 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.h}}>}}
+\DoxyCodeLine{89 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbexp_8h}{xbexp.h}}>}}
+\DoxyCodeLine{90 }
+\DoxyCodeLine{91 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbtag_8h}{xbtag.h}}>}}
+\DoxyCodeLine{92 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbdbf_8h}{xbdbf.h}}>} \textcolor{comment}{/* dbf base class */}}
+\DoxyCodeLine{93 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbindex_8h}{xbindex.h}}>} \textcolor{comment}{/* index base class */}}
+\DoxyCodeLine{94 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbfilter_8h}{xbfilter.h}}>}}
+\DoxyCodeLine{95 \textcolor{preprocessor}{\#include <\mbox{\hyperlink{xbsql_8h}{xbsql.h}}>}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbbcd_8cpp.tex b/docs/doxygen/latex/xbbcd_8cpp.tex
index bf70abd..4da19bf 100644
--- a/docs/doxygen/latex/xbbcd_8cpp.tex
+++ b/docs/doxygen/latex/xbbcd_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbbcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbbcd.cpp File Reference}
-\label{xbbcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbbcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbbcd.cpp}}
+\hypertarget{xbbcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbbcd.cpp File Reference}
+\label{xbbcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbbcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbbcd.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbbcd_8h.tex b/docs/doxygen/latex/xbbcd_8h.tex
index 67739bd..08782f6 100644
--- a/docs/doxygen/latex/xbbcd_8h.tex
+++ b/docs/doxygen/latex/xbbcd_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xbbcd_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbbcd.h File Reference}
-\label{xbbcd_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbbcd.h}}
+\hypertarget{xbbcd_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbbcd.h File Reference}
+\label{xbbcd_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbbcd.h}}
diff --git a/docs/doxygen/latex/xbbcd_8h_source.tex b/docs/doxygen/latex/xbbcd_8h_source.tex
index 7ff643a..060d1ee 100644
--- a/docs/doxygen/latex/xbbcd_8h_source.tex
+++ b/docs/doxygen/latex/xbbcd_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbbcd_8h_source}{}\doxysection{xbbcd.\+h}
-\label{xbbcd_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbbcd.h}}
+\label{xbbcd_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbbcd.h}}
\mbox{\hyperlink{xbbcd_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbbcd.h}}
@@ -68,32 +68,30 @@
\DoxyCodeLine{65 \textcolor{comment}{// const unsigned char * GetBcd() const;}}
\DoxyCodeLine{66 \textcolor{keywordtype}{void} StringToBcd( \textcolor{keyword}{const} xbString \&sStringIn );}
\DoxyCodeLine{67 }
-\DoxyCodeLine{68 \textcolor{comment}{// void StringToBcdOld( const xbString \&sStringIn );}}
-\DoxyCodeLine{69 }
-\DoxyCodeLine{70 xbInt16 Compare( \textcolor{keyword}{const} xbBcd \&bcdIn );}
-\DoxyCodeLine{71 xbInt16 Compare( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} d );}
-\DoxyCodeLine{72 }
-\DoxyCodeLine{73 \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *GetData() \textcolor{keyword}{const};}
-\DoxyCodeLine{74 \textcolor{keyword}{const} \textcolor{keywordtype}{void} * GetBcd() \textcolor{keyword}{const};}
-\DoxyCodeLine{75 }
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 \textcolor{keyword}{private}:}
-\DoxyCodeLine{78 \textcolor{keywordtype}{void} ctor();}
-\DoxyCodeLine{79 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} GetEncDigitsNoSign() \textcolor{keyword}{const};}
-\DoxyCodeLine{80 \textcolor{keywordtype}{unsigned} GetSign() \textcolor{keyword}{const};}
-\DoxyCodeLine{81 \textcolor{keywordtype}{unsigned} GetSigDigits() \textcolor{keyword}{const};}
-\DoxyCodeLine{82 \textcolor{keywordtype}{unsigned} GetActualSigDigits() \textcolor{keyword}{const};}
-\DoxyCodeLine{83 }
-\DoxyCodeLine{84 }
-\DoxyCodeLine{85 \textcolor{comment}{// xbBcdStruc bcdOld;}}
-\DoxyCodeLine{86 xbBcdStruct bcd;}
-\DoxyCodeLine{87 \};}
+\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 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{90 }
+\DoxyCodeLine{89 }
\DoxyCodeLine{91 }
-\DoxyCodeLine{93 }
-\DoxyCodeLine{94 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_INDEX\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{95 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_BCD\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{92 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_INDEX\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{93 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_BCD\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbcrix_8cpp.tex b/docs/doxygen/latex/xbcrix_8cpp.tex
index a9416a1..408ab0f 100644
--- a/docs/doxygen/latex/xbcrix_8cpp.tex
+++ b/docs/doxygen/latex/xbcrix_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbcrix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/sql/xbcrix.cpp File Reference}
-\label{xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbcrix.cpp}}
+\hypertarget{xbcrix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql/xbcrix.cpp File Reference}
+\label{xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbcrix.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbcrtbl_8cpp.tex b/docs/doxygen/latex/xbcrtbl_8cpp.tex
index e2cfea6..329a219 100644
--- a/docs/doxygen/latex/xbcrtbl_8cpp.tex
+++ b/docs/doxygen/latex/xbcrtbl_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbcrtbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/sql/xbcrtbl.cpp File Reference}
-\label{xbcrtbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbcrtbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbcrtbl.cpp}}
+\hypertarget{xbcrtbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql/xbcrtbl.cpp File Reference}
+\label{xbcrtbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbcrtbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbcrtbl.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdate_8cpp.tex b/docs/doxygen/latex/xbdate_8cpp.tex
index 7076949..ac14170 100644
--- a/docs/doxygen/latex/xbdate_8cpp.tex
+++ b/docs/doxygen/latex/xbdate_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbdate_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbdate.cpp File Reference}
-\label{xbdate_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbdate.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbdate.cpp}}
+\hypertarget{xbdate_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbdate.cpp File Reference}
+\label{xbdate_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbdate.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbdate.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include $<$time.\+h$>$}\newline
\doxysubsection*{Namespaces}
diff --git a/docs/doxygen/latex/xbdate_8h.tex b/docs/doxygen/latex/xbdate_8h.tex
index 577344e..8470948 100644
--- a/docs/doxygen/latex/xbdate_8h.tex
+++ b/docs/doxygen/latex/xbdate_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbdate_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbdate.h File Reference}
-\label{xbdate_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbdate.h}}
+\hypertarget{xbdate_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbdate.h File Reference}
+\label{xbdate_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbdate.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbdate_8h_source.tex b/docs/doxygen/latex/xbdate_8h_source.tex
index 09c5690..e3c5e25 100644
--- a/docs/doxygen/latex/xbdate_8h_source.tex
+++ b/docs/doxygen/latex/xbdate_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbdate_8h_source}{}\doxysection{xbdate.\+h}
-\label{xbdate_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbdate.h}}
+\label{xbdate_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbdate.h}}
\mbox{\hyperlink{xbdate_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbdate.h}}
diff --git a/docs/doxygen/latex/xbdbf3_8cpp.tex b/docs/doxygen/latex/xbdbf3_8cpp.tex
index 4132f6b..051e18d 100644
--- a/docs/doxygen/latex/xbdbf3_8cpp.tex
+++ b/docs/doxygen/latex/xbdbf3_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbdbf3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbdbf3.cpp File Reference}
-\label{xbdbf3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbdbf3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbdbf3.cpp}}
+\hypertarget{xbdbf3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbdbf3.cpp File Reference}
+\label{xbdbf3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbdbf3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbdbf3.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdbf4_8cpp.tex b/docs/doxygen/latex/xbdbf4_8cpp.tex
index ef9dc8b..e7d2997 100644
--- a/docs/doxygen/latex/xbdbf4_8cpp.tex
+++ b/docs/doxygen/latex/xbdbf4_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbdbf4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbdbf4.cpp File Reference}
-\label{xbdbf4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbdbf4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbdbf4.cpp}}
+\hypertarget{xbdbf4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbdbf4.cpp File Reference}
+\label{xbdbf4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbdbf4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbdbf4.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdbf_8cpp.tex b/docs/doxygen/latex/xbdbf_8cpp.tex
index 398a44d..71c3a1d 100644
--- a/docs/doxygen/latex/xbdbf_8cpp.tex
+++ b/docs/doxygen/latex/xbdbf_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbdbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbdbf.cpp File Reference}
-\label{xbdbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbdbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbdbf.cpp}}
+\hypertarget{xbdbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbdbf.cpp File Reference}
+\label{xbdbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbdbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbdbf.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbdbf_8h.tex b/docs/doxygen/latex/xbdbf_8h.tex
index 0574d62..40e74f6 100644
--- a/docs/doxygen/latex/xbdbf_8h.tex
+++ b/docs/doxygen/latex/xbdbf_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbdbf_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbdbf.h File Reference}
-\label{xbdbf_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbdbf.h}}
+\hypertarget{xbdbf_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbdbf.h File Reference}
+\label{xbdbf_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbdbf.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbdbf_8h_source.tex b/docs/doxygen/latex/xbdbf_8h_source.tex
index b83d689..620bbad 100644
--- a/docs/doxygen/latex/xbdbf_8h_source.tex
+++ b/docs/doxygen/latex/xbdbf_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbdbf_8h_source}{}\doxysection{xbdbf.\+h}
-\label{xbdbf_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbdbf.h}}
+\label{xbdbf_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbdbf.h}}
\mbox{\hyperlink{xbdbf_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbdbf.h}}
@@ -126,8 +126,8 @@
\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 \mbox{\hyperlink{classxb_1_1xbDbf_ab1f4a515533402f872cedcd0322aabd4}{DumpHeader}} ( xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{168 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a3a6a068addffd06fc9a996639d6ca69e}{DumpRecord}} ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );}
+\DoxyCodeLine{167 \textcolor{keyword}{virtual} xbInt16 DumpHeader ( xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{168 \textcolor{keyword}{virtual} xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );}
\DoxyCodeLine{169 \textcolor{keyword}{virtual} xbInt16 GetAutoCommit () \textcolor{keyword}{const};}
\DoxyCodeLine{170 \textcolor{keyword}{virtual} xbInt16 GetAutoCommit ( xbInt16 iOption ) \textcolor{keyword}{const};}
\DoxyCodeLine{171 \textcolor{keyword}{virtual} xbUInt32 GetCurRecNo () \textcolor{keyword}{const};}
@@ -141,351 +141,356 @@
\DoxyCodeLine{179 \textcolor{keyword}{virtual} xbInt16 GetNextRecord ();}
\DoxyCodeLine{180 \textcolor{keyword}{virtual} xbInt16 GetNextRecord ( xbInt16 iOption );}
\DoxyCodeLine{181 \textcolor{keyword}{virtual} xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );}
-\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt32 \mbox{\hyperlink{classxb_1_1xbDbf_a13393704a8a191d4d6555ae31d3c3e92}{GetPhysicalIxCnt}} () \textcolor{keyword}{const};}
-\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 GetPrevRecord ();}
-\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 GetPrevRecord ( xbInt16 iOption );}
-\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 GetRecord ( xbUInt32 ulRecNo );}
-\DoxyCodeLine{186 \textcolor{keyword}{virtual} xbInt16 GetRecordCnt ( xbUInt32 \& ulRecCnt );}
-\DoxyCodeLine{187 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} * GetRecordBuf ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
-\DoxyCodeLine{188 \textcolor{keyword}{virtual} xbUInt16 GetRecordLen () \textcolor{keyword}{const};}
-\DoxyCodeLine{189 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetTblAlias() \textcolor{keyword}{const};}
-\DoxyCodeLine{190 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}{GetVersion}} () \textcolor{keyword}{const} = 0; }
-\DoxyCodeLine{191 \textcolor{keyword}{virtual} \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *GetXbasePtr () \textcolor{keyword}{const}; \textcolor{comment}{// return xbase pointer}}
-\DoxyCodeLine{192 }
-\DoxyCodeLine{193 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \mbox{\hyperlink{classxb_1_1xbDbf_ac856fc1b110b46aefa1b2f5c0f530aa2}{MemoFieldsExist}} () \textcolor{keyword}{const};}
+\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt16 GetPrevRecord ();}
+\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 GetPrevRecord ( xbInt16 iOption );}
+\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 GetRecord ( xbUInt32 ulRecNo );}
+\DoxyCodeLine{185 }
+\DoxyCodeLine{186 \textcolor{keyword}{virtual} xbUInt32 GetRecordCount ();}
+\DoxyCodeLine{187 \textcolor{keyword}{virtual} xbInt16 GetRecordCnt ( xbUInt32 \& ulRecCnt );}
+\DoxyCodeLine{188 }
+\DoxyCodeLine{189 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} * GetRecordBuf ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
+\DoxyCodeLine{190 \textcolor{keyword}{virtual} xbUInt16 GetRecordLen () \textcolor{keyword}{const};}
+\DoxyCodeLine{191 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetTblAlias() \textcolor{keyword}{const};}
+\DoxyCodeLine{192 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a49212a9eb17f7fa9f303e08d5fc50fc6}{GetVersion}} () \textcolor{keyword}{const} = 0; }
+\DoxyCodeLine{193 \textcolor{keyword}{virtual} \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *GetXbasePtr () \textcolor{keyword}{const}; \textcolor{comment}{// return xbase pointer}}
\DoxyCodeLine{194 }
-\DoxyCodeLine{195 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_a97366c7362e409d7f09973a6aef8dad0}{Open}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName );}
-\DoxyCodeLine{196 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_ac658818bf9b8f8ff7467d8d80495b324}{Open}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias );}
-\DoxyCodeLine{197 \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{198 \textcolor{keyword}{virtual} xbInt16 Pack ();}
-\DoxyCodeLine{199 \textcolor{keyword}{virtual} xbInt16 Pack ( xbUInt32 \&ulDeletedRecCnt );}
-\DoxyCodeLine{200 }
-\DoxyCodeLine{201 }
-\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 PutRecord (); \textcolor{comment}{// Put record to current location}}
-\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 PutRecord ( xbUInt32 ulRecNo );}
-\DoxyCodeLine{204 \textcolor{keyword}{virtual} xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );}
-\DoxyCodeLine{205 \textcolor{keyword}{virtual} xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
-\DoxyCodeLine{206 }
-\DoxyCodeLine{207 \textcolor{keyword}{virtual} xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );}
-\DoxyCodeLine{208 }
-\DoxyCodeLine{209 \textcolor{keyword}{virtual} xbInt16 UndeleteAllRecords();}
-\DoxyCodeLine{210 \textcolor{keyword}{virtual} xbInt16 UndeleteRecord ();}
-\DoxyCodeLine{211 \textcolor{keyword}{virtual} xbInt16 Zap ();}
+\DoxyCodeLine{195 }
+\DoxyCodeLine{196 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldsExist () \textcolor{keyword}{const};}
+\DoxyCodeLine{197 }
+\DoxyCodeLine{198 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName );}
+\DoxyCodeLine{199 \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{200 \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{201 \textcolor{keyword}{virtual} xbInt16 Pack ();}
+\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 Pack ( xbUInt32 \&ulDeletedRecCnt );}
+\DoxyCodeLine{203 }
+\DoxyCodeLine{204 }
+\DoxyCodeLine{205 \textcolor{keyword}{virtual} xbInt16 PutRecord (); \textcolor{comment}{// Put record to current location}}
+\DoxyCodeLine{206 \textcolor{keyword}{virtual} xbInt16 PutRecord ( xbUInt32 ulRecNo );}
+\DoxyCodeLine{207 \textcolor{keyword}{virtual} xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );}
+\DoxyCodeLine{208 \textcolor{keyword}{virtual} xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
+\DoxyCodeLine{209 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}{Rename}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sNewName ) = 0;}
+\DoxyCodeLine{210 }
+\DoxyCodeLine{211 \textcolor{keyword}{virtual} xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );}
\DoxyCodeLine{212 }
-\DoxyCodeLine{213 }
-\DoxyCodeLine{214 \textcolor{comment}{/* field methods */}}
-\DoxyCodeLine{215 \textcolor{comment}{//virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;}}
-\DoxyCodeLine{216 \textcolor{keyword}{virtual} xbInt16 GetField(xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
-\DoxyCodeLine{217 \textcolor{keyword}{virtual} xbInt16 GetField(xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue) \textcolor{keyword}{const};}
-\DoxyCodeLine{218 \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{219 \textcolor{keyword}{virtual} xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 \&iFieldDecimal ) \textcolor{keyword}{const};}
-\DoxyCodeLine{220 \textcolor{keyword}{virtual} xbInt16 GetFieldDecimal( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldDecimal ) \textcolor{keyword}{const};}
-\DoxyCodeLine{221 \textcolor{keyword}{virtual} xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 \&iFieldLen ) \textcolor{keyword}{const};}
-\DoxyCodeLine{222 \textcolor{keyword}{virtual} xbInt16 GetFieldLen( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldLen ) \textcolor{keyword}{const};}
-\DoxyCodeLine{223 \textcolor{keyword}{virtual} xbInt16 GetFieldName( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{224 }
-\DoxyCodeLine{225 \textcolor{keyword}{virtual} xbInt16 GetFieldNo( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{226 \textcolor{keyword}{virtual} xbInt16 GetFieldNo( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{227 }
-\DoxyCodeLine{228 \textcolor{keyword}{virtual} xbInt16 GetFieldType( xbInt16 iFieldNo, \textcolor{keywordtype}{char} \&cFieldType ) \textcolor{keyword}{const};}
-\DoxyCodeLine{229 \textcolor{keyword}{virtual} xbInt16 GetFieldType( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keywordtype}{char} \&cFieldType ) \textcolor{keyword}{const};}
-\DoxyCodeLine{230 \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{231 \textcolor{keyword}{virtual} xbInt16 PutField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
-\DoxyCodeLine{232 }
-\DoxyCodeLine{233 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
-\DoxyCodeLine{234 \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{235 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData ) \textcolor{keyword}{const};}
-\DoxyCodeLine{236 \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{237 }
-\DoxyCodeLine{238 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFieldData );}
-\DoxyCodeLine{239 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFieldData );}
-\DoxyCodeLine{240 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData ) \textcolor{keyword}{const};}
-\DoxyCodeLine{241 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
-\DoxyCodeLine{242 \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{243 }
-\DoxyCodeLine{244 \textcolor{keyword}{virtual} xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{245 \textcolor{keyword}{virtual} xbInt16 GetLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{246 \textcolor{keyword}{virtual} xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );}
-\DoxyCodeLine{247 \textcolor{keyword}{virtual} xbInt16 PutLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldNo, xbInt32 lFieldValue );}
-\DoxyCodeLine{248 }
-\DoxyCodeLine{249 \textcolor{keyword}{virtual} xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{250 \textcolor{keyword}{virtual} xbInt16 GetULongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{251 \textcolor{keyword}{virtual} xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );}
-\DoxyCodeLine{252 \textcolor{keyword}{virtual} xbInt16 PutULongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldNo, xbUInt32 lFieldValue );}
-\DoxyCodeLine{253 }
-\DoxyCodeLine{254 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{255 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
-\DoxyCodeLine{256 \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{257 \textcolor{keyword}{virtual} xbInt16 PutDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dFieldValue );}
-\DoxyCodeLine{258 \textcolor{keyword}{virtual} xbInt16 PutDoubleField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&FieldName, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dFieldValue );}
-\DoxyCodeLine{259 }
-\DoxyCodeLine{260 \textcolor{keyword}{virtual} xbInt16 GetFloatField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} \&fFieldValue ) \textcolor{keyword}{const};}
-\DoxyCodeLine{261 \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{262 \textcolor{keyword}{virtual} xbInt16 PutFloatField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} fFieldValue );}
-\DoxyCodeLine{263 \textcolor{keyword}{virtual} xbInt16 PutFloatField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} fFieldValue );}
-\DoxyCodeLine{264 }
-\DoxyCodeLine{265 \textcolor{keyword}{virtual} xbInt16 GetDateField( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{266 \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{267 \textcolor{keyword}{virtual} xbInt16 PutDateField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt );}
-\DoxyCodeLine{268 \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{269 }
-\DoxyCodeLine{270 }
-\DoxyCodeLine{271 }
-\DoxyCodeLine{272 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{273 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldCnt () \textcolor{keyword}{const};}
-\DoxyCodeLine{274 \textcolor{keyword}{virtual} xbMemo *GetMemoPtr ();}
-\DoxyCodeLine{275 \textcolor{keyword}{virtual} xbUInt32 GetCreateMemoBlockSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{276 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{277 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{278 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 \&ullMemoFieldLen );}
-\DoxyCodeLine{279 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, xbUInt32 \&ulMemoFieldLen );}
-\DoxyCodeLine{280 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( xbInt16 iFieldNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{281 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{282 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;}
-\DoxyCodeLine{283 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{284 \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{285 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{286 }
-\DoxyCodeLine{287 }
-\DoxyCodeLine{288 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{289 \textcolor{keyword}{virtual} xbInt16 LockTable ( xbInt16 iLockFunction );}
-\DoxyCodeLine{290 \textcolor{keyword}{virtual} xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );}
-\DoxyCodeLine{291 \textcolor{keyword}{virtual} xbInt16 LockAppend ( xbInt16 iLockFunction );}
-\DoxyCodeLine{292 \textcolor{keyword}{virtual} xbInt16 LockHeader ( xbInt16 iLockFunction );}
-\DoxyCodeLine{293 }
-\DoxyCodeLine{294 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{295 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
-\DoxyCodeLine{296 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const}; }
-\DoxyCodeLine{297 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_LOCK}}
-\DoxyCodeLine{298 }
-\DoxyCodeLine{299 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{300 \textcolor{keyword}{virtual} xbInt16 LockIndices ( xbInt16 iLockFunction );}
-\DoxyCodeLine{301 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{213 \textcolor{keyword}{virtual} xbInt16 UndeleteAllRecords();}
+\DoxyCodeLine{214 \textcolor{keyword}{virtual} xbInt16 UndeleteRecord ();}
+\DoxyCodeLine{215 \textcolor{keyword}{virtual} xbInt16 Zap ();}
+\DoxyCodeLine{216 }
+\DoxyCodeLine{217 }
+\DoxyCodeLine{218 \textcolor{comment}{/* field methods */}}
+\DoxyCodeLine{219 \textcolor{comment}{//virtual xbInt16 GetRawField( xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) const;}}
+\DoxyCodeLine{220 \textcolor{keyword}{virtual} xbInt16 GetField(xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{221 \textcolor{keyword}{virtual} xbInt16 GetField(xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldValue) \textcolor{keyword}{const};}
+\DoxyCodeLine{222 \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{223 \textcolor{keyword}{virtual} xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 \&iFieldDecimal ) \textcolor{keyword}{const};}
+\DoxyCodeLine{224 \textcolor{keyword}{virtual} xbInt16 GetFieldDecimal( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldDecimal ) \textcolor{keyword}{const};}
+\DoxyCodeLine{225 \textcolor{keyword}{virtual} xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 \&iFieldLen ) \textcolor{keyword}{const};}
+\DoxyCodeLine{226 \textcolor{keyword}{virtual} xbInt16 GetFieldLen( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldLen ) \textcolor{keyword}{const};}
+\DoxyCodeLine{227 \textcolor{keyword}{virtual} xbInt16 GetFieldName( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{228 }
+\DoxyCodeLine{229 \textcolor{keyword}{virtual} xbInt16 GetFieldNo( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt16 \&iFieldNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{230 \textcolor{keyword}{virtual} xbInt16 GetFieldNo( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{231 }
+\DoxyCodeLine{232 \textcolor{keyword}{virtual} xbInt16 GetFieldType( xbInt16 iFieldNo, \textcolor{keywordtype}{char} \&cFieldType ) \textcolor{keyword}{const};}
+\DoxyCodeLine{233 \textcolor{keyword}{virtual} xbInt16 GetFieldType( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keywordtype}{char} \&cFieldType ) \textcolor{keyword}{const};}
+\DoxyCodeLine{234 \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{235 \textcolor{keyword}{virtual} xbInt16 PutField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
+\DoxyCodeLine{236 }
+\DoxyCodeLine{237 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData );}
+\DoxyCodeLine{238 \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{239 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldData ) \textcolor{keyword}{const};}
+\DoxyCodeLine{240 \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{241 }
+\DoxyCodeLine{242 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFieldData );}
+\DoxyCodeLine{243 \textcolor{keyword}{virtual} xbInt16 PutLogicalField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFieldData );}
+\DoxyCodeLine{244 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData ) \textcolor{keyword}{const};}
+\DoxyCodeLine{245 \textcolor{keyword}{virtual} xbInt16 GetLogicalField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFieldData, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{246 \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{247 }
+\DoxyCodeLine{248 \textcolor{keyword}{virtual} xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{249 \textcolor{keyword}{virtual} xbInt16 GetLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{250 \textcolor{keyword}{virtual} xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );}
+\DoxyCodeLine{251 \textcolor{keyword}{virtual} xbInt16 PutLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldNo, xbInt32 lFieldValue );}
+\DoxyCodeLine{252 }
+\DoxyCodeLine{253 \textcolor{keyword}{virtual} xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{254 \textcolor{keyword}{virtual} xbInt16 GetULongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{255 \textcolor{keyword}{virtual} xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );}
+\DoxyCodeLine{256 \textcolor{keyword}{virtual} xbInt16 PutULongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldNo, xbUInt32 lFieldValue );}
+\DoxyCodeLine{257 }
+\DoxyCodeLine{258 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{259 \textcolor{keyword}{virtual} xbInt16 GetDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dFieldValue, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{260 \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{261 \textcolor{keyword}{virtual} xbInt16 PutDoubleField( xbInt16 FieldNo, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dFieldValue );}
+\DoxyCodeLine{262 \textcolor{keyword}{virtual} xbInt16 PutDoubleField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&FieldName, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dFieldValue );}
+\DoxyCodeLine{263 }
+\DoxyCodeLine{264 \textcolor{keyword}{virtual} xbInt16 GetFloatField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} \&fFieldValue ) \textcolor{keyword}{const};}
+\DoxyCodeLine{265 \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{266 \textcolor{keyword}{virtual} xbInt16 PutFloatField( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} fFieldValue );}
+\DoxyCodeLine{267 \textcolor{keyword}{virtual} xbInt16 PutFloatField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_a83aa6a550398db55973aa9fb4257e66e}{xbFloat}} fFieldValue );}
+\DoxyCodeLine{268 }
+\DoxyCodeLine{269 \textcolor{keyword}{virtual} xbInt16 GetDateField( xbInt16 iFieldNo, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{270 \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{271 \textcolor{keyword}{virtual} xbInt16 PutDateField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt );}
+\DoxyCodeLine{272 \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{273 }
+\DoxyCodeLine{274 }
+\DoxyCodeLine{275 }
+\DoxyCodeLine{276 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{277 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldCnt () \textcolor{keyword}{const};}
+\DoxyCodeLine{278 \textcolor{keyword}{virtual} xbMemo *GetMemoPtr ();}
+\DoxyCodeLine{279 \textcolor{keyword}{virtual} xbUInt32 GetCreateMemoBlockSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{280 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{281 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{282 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 \&ullMemoFieldLen );}
+\DoxyCodeLine{283 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, xbUInt32 \&ulMemoFieldLen );}
+\DoxyCodeLine{284 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( xbInt16 iFieldNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{285 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{286 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;}
+\DoxyCodeLine{287 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{288 \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{289 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{290 }
+\DoxyCodeLine{291 }
+\DoxyCodeLine{292 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{293 \textcolor{keyword}{virtual} xbInt16 LockTable ( xbInt16 iLockFunction );}
+\DoxyCodeLine{294 \textcolor{keyword}{virtual} xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );}
+\DoxyCodeLine{295 \textcolor{keyword}{virtual} xbInt16 LockAppend ( xbInt16 iLockFunction );}
+\DoxyCodeLine{296 \textcolor{keyword}{virtual} xbInt16 LockHeader ( xbInt16 iLockFunction );}
+\DoxyCodeLine{297 }
+\DoxyCodeLine{298 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{299 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
+\DoxyCodeLine{300 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const}; }
+\DoxyCodeLine{301 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_LOCK}}
\DoxyCodeLine{302 }
-\DoxyCodeLine{303 xbInt16 GetAutoLock () \textcolor{keyword}{const};}
-\DoxyCodeLine{304 \textcolor{keywordtype}{void} SetAutoLock ( xbInt16 iAutoLock );}
-\DoxyCodeLine{305 xbInt16 GetLockFlavor () \textcolor{keyword}{const};}
-\DoxyCodeLine{306 \textcolor{keywordtype}{void} SetLockFlavor ( xbInt16 iLockFlavor );}
-\DoxyCodeLine{307 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetTableLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{308 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetHeaderLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{309 xbUInt32 GetAppendLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{310 xbLinkListNode<xbUInt32> * GetFirstRecLock () \textcolor{keyword}{const};}
-\DoxyCodeLine{311 }
-\DoxyCodeLine{312 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{313 \textcolor{keywordtype}{void} DumpTableLockStatus() \textcolor{keyword}{const};}
-\DoxyCodeLine{314 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{315 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{316 }
-\DoxyCodeLine{317 }
-\DoxyCodeLine{318 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{319 \textcolor{keyword}{virtual} xbInt16 CloseIndexFile( xbIx *pIx );}
-\DoxyCodeLine{320 \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{321 xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, \textcolor{keywordtype}{void} **vpTagOut );}
-\DoxyCodeLine{322 \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{323 \textcolor{keyword}{virtual} xbInt16 DeleteAllIndexFiles();}
-\DoxyCodeLine{324 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey );}
-\DoxyCodeLine{325 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dtKey );}
-\DoxyCodeLine{326 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dKey );}
-\DoxyCodeLine{327 \textcolor{keyword}{virtual} xbIx *GetCurIx() \textcolor{keyword}{const};}
-\DoxyCodeLine{328 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetCurTag() \textcolor{keyword}{const};}
-\DoxyCodeLine{329 }
-\DoxyCodeLine{330 \textcolor{keyword}{virtual} xbInt16 GetFirstKey();}
-\DoxyCodeLine{331 \textcolor{keyword}{virtual} xbInt16 GetNextKey();}
-\DoxyCodeLine{332 \textcolor{keyword}{virtual} xbInt16 GetPrevKey();}
-\DoxyCodeLine{333 \textcolor{keyword}{virtual} xbInt16 GetLastKey();}
-\DoxyCodeLine{334 }
-\DoxyCodeLine{335 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurIxType() \textcolor{keyword}{const};}
-\DoxyCodeLine{336 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurTagName() \textcolor{keyword}{const};}
-\DoxyCodeLine{337 \textcolor{keyword}{virtual} xbIxList *GetIxList() \textcolor{keyword}{const};}
-\DoxyCodeLine{338 xbLinkListNode<xbTag *> *GetTagList () \textcolor{keyword}{const};}
-\DoxyCodeLine{339 \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{340 \textcolor{keyword}{virtual} xbInt16 SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTagName );}
-\DoxyCodeLine{341 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, xbIx *pIx, \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{342 }
-\DoxyCodeLine{343 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{344 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );}
-\DoxyCodeLine{345 \textcolor{keyword}{virtual} xbInt16 Reindex( xbInt16 iTagOpt );}
-\DoxyCodeLine{346 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{347 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{348 }
-\DoxyCodeLine{349 \textcolor{preprocessor}{ \#ifdef XB\_NDXINF\_SUPPORT}}
-\DoxyCodeLine{350 \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{351 xbLinkListNode<xbString> *GetNdxInfList() \textcolor{keyword}{const};}
-\DoxyCodeLine{352 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_NDXINF\_SUPPORT}}
-\DoxyCodeLine{353 }
-\DoxyCodeLine{354 \textcolor{comment}{//\#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{355 \textcolor{comment}{//virtual xbInt16 GetCreateMdxBlockSize() const;}}
-\DoxyCodeLine{356 \textcolor{comment}{//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}}
-\DoxyCodeLine{357 \textcolor{comment}{//\#endif}}
-\DoxyCodeLine{358 }
-\DoxyCodeLine{359 }
-\DoxyCodeLine{360 }
-\DoxyCodeLine{361 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{362 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{363 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIx;}
-\DoxyCodeLine{364 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIxMdx;}
-\DoxyCodeLine{365 }
-\DoxyCodeLine{366 xbInt16 AddIndex( xbIx *ix, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmt );}
-\DoxyCodeLine{367 \textcolor{keywordtype}{void} ClearTagList();}
-\DoxyCodeLine{368 \textcolor{keyword}{virtual} xbInt16 GetNdxInfFileName( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNdxIdxFileName );}
-\DoxyCodeLine{369 xbInt16 RemoveIndex( xbIx * ix );}
-\DoxyCodeLine{370 \textcolor{keywordtype}{void} UpdateSchemaIxFlag( xbInt16 iFldNo, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVal );}
-\DoxyCodeLine{371 \textcolor{keyword}{virtual} xbInt16 UpdateTagList ();}
-\DoxyCodeLine{372 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{373 }
-\DoxyCodeLine{374 }
-\DoxyCodeLine{375 }
-\DoxyCodeLine{376 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{377 \textcolor{keywordtype}{void} SetHeaderLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
-\DoxyCodeLine{378 \textcolor{keywordtype}{void} SetTableLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
-\DoxyCodeLine{379 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPORT}}
+\DoxyCodeLine{303 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{304 \textcolor{keyword}{virtual} xbInt16 LockIndices ( xbInt16 iLockFunction );}
+\DoxyCodeLine{305 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{306 }
+\DoxyCodeLine{307 xbInt16 GetAutoLock () \textcolor{keyword}{const};}
+\DoxyCodeLine{308 \textcolor{keywordtype}{void} SetAutoLock ( xbInt16 iAutoLock );}
+\DoxyCodeLine{309 xbInt16 GetLockFlavor () \textcolor{keyword}{const};}
+\DoxyCodeLine{310 \textcolor{keywordtype}{void} SetLockFlavor ( xbInt16 iLockFlavor );}
+\DoxyCodeLine{311 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetTableLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{312 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetHeaderLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{313 xbUInt32 GetAppendLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{314 xbLinkListNode<xbUInt32> * GetFirstRecLock () \textcolor{keyword}{const};}
+\DoxyCodeLine{315 }
+\DoxyCodeLine{316 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{317 \textcolor{keywordtype}{void} DumpTableLockStatus() \textcolor{keyword}{const};}
+\DoxyCodeLine{318 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{319 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{320 }
+\DoxyCodeLine{321 }
+\DoxyCodeLine{322 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{323 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );}
+\DoxyCodeLine{324 \textcolor{keyword}{virtual} xbInt16 CloseIndexFile( xbIx *pIx );}
+\DoxyCodeLine{325 \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{326 xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, \textcolor{keywordtype}{void} **vpTagOut );}
+\DoxyCodeLine{327 \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{328 \textcolor{keyword}{virtual} xbInt16 DeleteAllIndexFiles();}
+\DoxyCodeLine{329 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey );}
+\DoxyCodeLine{330 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dtKey );}
+\DoxyCodeLine{331 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dKey );}
+\DoxyCodeLine{332 \textcolor{keyword}{virtual} xbIx *GetCurIx() \textcolor{keyword}{const};}
+\DoxyCodeLine{333 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetCurTag() \textcolor{keyword}{const};}
+\DoxyCodeLine{334 }
+\DoxyCodeLine{335 \textcolor{keyword}{virtual} xbInt16 GetFirstKey();}
+\DoxyCodeLine{336 \textcolor{keyword}{virtual} xbInt16 GetNextKey();}
+\DoxyCodeLine{337 \textcolor{keyword}{virtual} xbInt16 GetPrevKey();}
+\DoxyCodeLine{338 \textcolor{keyword}{virtual} xbInt16 GetLastKey();}
+\DoxyCodeLine{339 }
+\DoxyCodeLine{340 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurIxType() \textcolor{keyword}{const};}
+\DoxyCodeLine{341 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurTagName() \textcolor{keyword}{const};}
+\DoxyCodeLine{342 \textcolor{keyword}{virtual} xbIxList *GetIxList() \textcolor{keyword}{const};}
+\DoxyCodeLine{343 \textcolor{keyword}{virtual} xbInt32 GetPhysicalIxCnt () \textcolor{keyword}{const};}
+\DoxyCodeLine{344 xbLinkListNode<xbTag *> *GetTagList () \textcolor{keyword}{const};}
+\DoxyCodeLine{345 }
+\DoxyCodeLine{346 \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{347 \textcolor{keyword}{virtual} xbInt16 Reindex( xbInt16 iTagOpt );}
+\DoxyCodeLine{348 \textcolor{keyword}{virtual} xbInt16 SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTagName );}
+\DoxyCodeLine{349 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, xbIx *pIx, \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{350 }
+\DoxyCodeLine{351 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{352 }
+\DoxyCodeLine{353 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{354 \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{355 xbLinkListNode<xbString> *GetInfList() \textcolor{keyword}{const};}
+\DoxyCodeLine{356 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
+\DoxyCodeLine{357 }
+\DoxyCodeLine{358 \textcolor{comment}{//\#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{359 \textcolor{comment}{//virtual xbInt16 GetCreateMdxBlockSize() const;}}
+\DoxyCodeLine{360 \textcolor{comment}{//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}}
+\DoxyCodeLine{361 \textcolor{comment}{//\#endif}}
+\DoxyCodeLine{362 }
+\DoxyCodeLine{363 }
+\DoxyCodeLine{364 }
+\DoxyCodeLine{365 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{366 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{367 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIx;}
+\DoxyCodeLine{368 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIxMdx;}
+\DoxyCodeLine{369 }
+\DoxyCodeLine{370 xbInt16 AddIndex( xbIx *ix, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmt );}
+\DoxyCodeLine{371 \textcolor{keywordtype}{void} ClearTagList();}
+\DoxyCodeLine{372 xbInt16 RemoveIndex( xbIx * ix );}
+\DoxyCodeLine{373 \textcolor{keywordtype}{void} UpdateSchemaIxFlag( xbInt16 iFldNo, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVal );}
+\DoxyCodeLine{374 \textcolor{keyword}{virtual} xbInt16 UpdateTagList ();}
+\DoxyCodeLine{375 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{376 }
+\DoxyCodeLine{377 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{378 \textcolor{keyword}{virtual} xbInt16 GetInfFileName( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNdxIdxFileName );}
+\DoxyCodeLine{379 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
\DoxyCodeLine{380 }
-\DoxyCodeLine{381 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{382 xbInt16 iMemoFieldCnt; \textcolor{comment}{// Memo field cnt in the table}}
-\DoxyCodeLine{383 xbMemo *Memo; \textcolor{comment}{// Pointer to memo class}}
-\DoxyCodeLine{384 xbUInt32 ulCreateMemoBlockSize; \textcolor{comment}{// blocksize to use when creating dbt file}}
-\DoxyCodeLine{385 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{381 }
+\DoxyCodeLine{382 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{383 \textcolor{keywordtype}{void} SetHeaderLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
+\DoxyCodeLine{384 \textcolor{keywordtype}{void} SetTableLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
+\DoxyCodeLine{385 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPORT}}
\DoxyCodeLine{386 }
-\DoxyCodeLine{387 \textcolor{preprocessor}{ \#ifdef XB\_NDXINF\_SUPPORT}}
-\DoxyCodeLine{388 \textcolor{keyword}{virtual} xbInt16 DeleteNdxInfData();}
-\DoxyCodeLine{389 \textcolor{keyword}{virtual} xbInt16 LoadNdxInfData();}
-\DoxyCodeLine{390 \textcolor{keyword}{virtual} xbInt16 SaveNdxInfData();}
-\DoxyCodeLine{391 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_NDXINF\_SUPPORT}}
+\DoxyCodeLine{387 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{388 xbInt16 iMemoFieldCnt; \textcolor{comment}{// Memo field cnt in the table}}
+\DoxyCodeLine{389 xbMemo *Memo; \textcolor{comment}{// Pointer to memo class}}
+\DoxyCodeLine{390 xbUInt32 ulCreateMemoBlockSize; \textcolor{comment}{// blocksize to use when creating dbt file}}
+\DoxyCodeLine{391 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{392 }
-\DoxyCodeLine{393 \textcolor{comment}{/*}}
-\DoxyCodeLine{394 \textcolor{comment}{ \#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{395 \textcolor{comment}{ xbInt16 iCreateMdxBlockSize;}}
-\DoxyCodeLine{396 \textcolor{comment}{ \#endif // XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{397 \textcolor{comment}{*/}}
+\DoxyCodeLine{393 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{394 \textcolor{keyword}{virtual} xbInt16 DeleteInfData();}
+\DoxyCodeLine{395 \textcolor{keyword}{virtual} xbInt16 LoadInfData();}
+\DoxyCodeLine{396 \textcolor{keyword}{virtual} xbInt16 SaveInfData();}
+\DoxyCodeLine{397 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
\DoxyCodeLine{398 }
-\DoxyCodeLine{399 \textcolor{keyword}{virtual} xbInt16 GetRawField( xbInt16 iFieldNo, \textcolor{keywordtype}{char} *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
-\DoxyCodeLine{400 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} InitVars(); }
-\DoxyCodeLine{401 \textcolor{keyword}{virtual} xbInt16 SetVersion() = 0;}
-\DoxyCodeLine{402 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} * s ) = 0;}
-\DoxyCodeLine{403 xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );}
+\DoxyCodeLine{399 \textcolor{comment}{/*}}
+\DoxyCodeLine{400 \textcolor{comment}{ \#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{401 \textcolor{comment}{ xbInt16 iCreateMdxBlockSize;}}
+\DoxyCodeLine{402 \textcolor{comment}{ \#endif // XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{403 \textcolor{comment}{*/}}
\DoxyCodeLine{404 }
-\DoxyCodeLine{405 }
-\DoxyCodeLine{406 xbUInt32 ulCurRec; \textcolor{comment}{// Current record or zero}}
-\DoxyCodeLine{407 xbInt16 iAutoCommit; \textcolor{comment}{// Auto commit updates if not explicitly performed before moving off record?}}
-\DoxyCodeLine{408 \textcolor{comment}{// -\/1 -\/-\/> Use DBMS default}}
-\DoxyCodeLine{409 \textcolor{comment}{// 0 -\/-\/> No auto update on this table, regardless of DBMS setting}}
-\DoxyCodeLine{410 \textcolor{comment}{// 1 -\/-\/> Auto update on this table, regardless of DBMS setting}}
+\DoxyCodeLine{405 \textcolor{keyword}{virtual} xbInt16 GetRawField( xbInt16 iFieldNo, \textcolor{keywordtype}{char} *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{406 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} InitVars(); }
+\DoxyCodeLine{407 \textcolor{keyword}{virtual} xbInt16 SetVersion() = 0;}
+\DoxyCodeLine{408 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} * s ) = 0;}
+\DoxyCodeLine{409 xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );}
+\DoxyCodeLine{410 }
\DoxyCodeLine{411 }
-\DoxyCodeLine{412 xbInt16 iFileVersion; \textcolor{comment}{// xBase file version -\/ which class is in play}}
-\DoxyCodeLine{413 }
-\DoxyCodeLine{414 }
-\DoxyCodeLine{415 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sAlias; \textcolor{comment}{// table alias}}
-\DoxyCodeLine{416 xbInt16 iNoOfFields;}
-\DoxyCodeLine{417 xbInt16 iDbfStatus; \textcolor{comment}{// 0 = closed}}
-\DoxyCodeLine{418 \textcolor{comment}{// 1 = open}}
-\DoxyCodeLine{419 \textcolor{comment}{// 2 = updates pending}}
+\DoxyCodeLine{412 xbUInt32 ulCurRec; \textcolor{comment}{// Current record or zero}}
+\DoxyCodeLine{413 xbInt16 iAutoCommit; \textcolor{comment}{// Auto commit updates if not explicitly performed before moving off record?}}
+\DoxyCodeLine{414 \textcolor{comment}{// -\/1 -\/-\/> Use DBMS default}}
+\DoxyCodeLine{415 \textcolor{comment}{// 0 -\/-\/> No auto update on this table, regardless of DBMS setting}}
+\DoxyCodeLine{416 \textcolor{comment}{// 1 -\/-\/> Auto update on this table, regardless of DBMS setting}}
+\DoxyCodeLine{417 }
+\DoxyCodeLine{418 xbInt16 iFileVersion; \textcolor{comment}{// xBase file version -\/ which class is in play}}
+\DoxyCodeLine{419 }
\DoxyCodeLine{420 }
-\DoxyCodeLine{421 xbSchemaRec *SchemaPtr; \textcolor{comment}{// Pointer to field data}}
-\DoxyCodeLine{422 \textcolor{keywordtype}{char} *RecBuf; \textcolor{comment}{// Pointer to record buffer}}
-\DoxyCodeLine{423 \textcolor{keywordtype}{char} *RecBuf2; \textcolor{comment}{// Pointer to original rec buf}}
-\DoxyCodeLine{424 }
-\DoxyCodeLine{425 }
-\DoxyCodeLine{426 \textcolor{comment}{/* Next several variables are database header fields, up through dbase V */}}
-\DoxyCodeLine{427 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVersion;}
-\DoxyCodeLine{428 \textcolor{keywordtype}{char} cUpdateYY;}
-\DoxyCodeLine{429 \textcolor{keywordtype}{char} cUpdateMM;}
-\DoxyCodeLine{430 \textcolor{keywordtype}{char} cUpdateDD;}
-\DoxyCodeLine{431 xbUInt32 ulNoOfRecs;}
-\DoxyCodeLine{432 xbUInt16 uiHeaderLen;}
-\DoxyCodeLine{433 xbUInt16 uiRecordLen;}
-\DoxyCodeLine{434 \textcolor{keywordtype}{char} cTransactionFlag;}
-\DoxyCodeLine{435 \textcolor{keywordtype}{char} cEncryptionFlag;}
-\DoxyCodeLine{436 \textcolor{keywordtype}{char} cIndexFlag;}
-\DoxyCodeLine{437 \textcolor{keywordtype}{char} cLangDriver; \textcolor{comment}{// dbase 7 sets to 1B}}
-\DoxyCodeLine{438 }
-\DoxyCodeLine{439 }
-\DoxyCodeLine{440 }
-\DoxyCodeLine{441 \textcolor{keyword}{private}:}
-\DoxyCodeLine{442 \textcolor{keywordtype}{void} ResetNoOfRecords(); }
-\DoxyCodeLine{443 }
+\DoxyCodeLine{421 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sAlias; \textcolor{comment}{// table alias}}
+\DoxyCodeLine{422 xbInt16 iNoOfFields;}
+\DoxyCodeLine{423 xbInt16 iDbfStatus; \textcolor{comment}{// 0 = closed}}
+\DoxyCodeLine{424 \textcolor{comment}{// 1 = open}}
+\DoxyCodeLine{425 \textcolor{comment}{// 2 = updates pending}}
+\DoxyCodeLine{426 }
+\DoxyCodeLine{427 xbSchemaRec *SchemaPtr; \textcolor{comment}{// Pointer to field data}}
+\DoxyCodeLine{428 \textcolor{keywordtype}{char} *RecBuf; \textcolor{comment}{// Pointer to record buffer}}
+\DoxyCodeLine{429 \textcolor{keywordtype}{char} *RecBuf2; \textcolor{comment}{// Pointer to original rec buf}}
+\DoxyCodeLine{430 }
+\DoxyCodeLine{431 }
+\DoxyCodeLine{432 \textcolor{comment}{/* Next several variables are database header fields, up through dbase V */}}
+\DoxyCodeLine{433 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVersion;}
+\DoxyCodeLine{434 \textcolor{keywordtype}{char} cUpdateYY;}
+\DoxyCodeLine{435 \textcolor{keywordtype}{char} cUpdateMM;}
+\DoxyCodeLine{436 \textcolor{keywordtype}{char} cUpdateDD;}
+\DoxyCodeLine{437 xbUInt32 ulNoOfRecs;}
+\DoxyCodeLine{438 xbUInt16 uiHeaderLen;}
+\DoxyCodeLine{439 xbUInt16 uiRecordLen;}
+\DoxyCodeLine{440 \textcolor{keywordtype}{char} cTransactionFlag;}
+\DoxyCodeLine{441 \textcolor{keywordtype}{char} cEncryptionFlag;}
+\DoxyCodeLine{442 \textcolor{keywordtype}{char} cIndexFlag;}
+\DoxyCodeLine{443 \textcolor{keywordtype}{char} cLangDriver; \textcolor{comment}{// dbase 7 sets to 1B}}
\DoxyCodeLine{444 }
-\DoxyCodeLine{445 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{446 xbInt16 iAutoLock; \textcolor{comment}{// 0 -\/ autolock off, 1 -\/ autolock on}}
-\DoxyCodeLine{447 xbInt16 iLockFlavor;}
-\DoxyCodeLine{448 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked; \textcolor{comment}{// is the table locked}}
-\DoxyCodeLine{449 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHeaderLocked; \textcolor{comment}{// is the header locked}}
-\DoxyCodeLine{450 xbUInt32 ulAppendLocked; \textcolor{comment}{// record number of the new record for the append lock operation}}
-\DoxyCodeLine{451 xbLinkListOrd<xbUInt32> lloRecLocks; \textcolor{comment}{// ordered link list of locked records}}
-\DoxyCodeLine{452 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{453 }
-\DoxyCodeLine{454 }
-\DoxyCodeLine{455 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{456 xbIxList *ixList; \textcolor{comment}{// pointer to a list of indices associated with the table}}
-\DoxyCodeLine{457 \textcolor{comment}{// \#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{458 \textcolor{comment}{// xbIx *ixMdx; // pointer to production multi-\/tag index file}}
-\DoxyCodeLine{459 \textcolor{comment}{// \#endif}}
-\DoxyCodeLine{460 xbIx *pCurIx; \textcolor{comment}{// Pointer to current index class}}
-\DoxyCodeLine{461 \textcolor{keywordtype}{void} *vpCurIxTag; \textcolor{comment}{// Pointer to current tag}}
-\DoxyCodeLine{462 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sCurIxType; \textcolor{comment}{// Current index type}}
-\DoxyCodeLine{463 xbLinkList<xbTag *> llTags; \textcolor{comment}{// linked list of open tags}}
-\DoxyCodeLine{464 }
-\DoxyCodeLine{465 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{466 }
-\DoxyCodeLine{467 \textcolor{preprocessor}{\#ifdef XB\_NDXINF\_SUPPORT}}
-\DoxyCodeLine{468 xbLinkList<xbString> llNdxInfData; \textcolor{comment}{// linked list of strings containing ndx file entries}}
-\DoxyCodeLine{469 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_NDXINF\_SUPPORT}}
-\DoxyCodeLine{470 }
-\DoxyCodeLine{471 }
-\DoxyCodeLine{472 \};}
+\DoxyCodeLine{445 }
+\DoxyCodeLine{446 }
+\DoxyCodeLine{447 \textcolor{keyword}{private}:}
+\DoxyCodeLine{448 \textcolor{keywordtype}{void} ResetNoOfRecords(); }
+\DoxyCodeLine{449 }
+\DoxyCodeLine{450 }
+\DoxyCodeLine{451 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{452 xbInt16 iAutoLock; \textcolor{comment}{// 0 -\/ autolock off, 1 -\/ autolock on}}
+\DoxyCodeLine{453 xbInt16 iLockFlavor;}
+\DoxyCodeLine{454 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked; \textcolor{comment}{// is the table locked}}
+\DoxyCodeLine{455 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHeaderLocked; \textcolor{comment}{// is the header locked}}
+\DoxyCodeLine{456 xbUInt32 ulAppendLocked; \textcolor{comment}{// record number of the new record for the append lock operation}}
+\DoxyCodeLine{457 xbLinkListOrd<xbUInt32> lloRecLocks; \textcolor{comment}{// ordered link list of locked records}}
+\DoxyCodeLine{458 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{459 }
+\DoxyCodeLine{460 }
+\DoxyCodeLine{461 \textcolor{preprocessor}{\#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{462 xbIxList *ixList; \textcolor{comment}{// pointer to a list of indices associated with the table}}
+\DoxyCodeLine{463 xbIx *pCurIx; \textcolor{comment}{// Pointer to current index class}}
+\DoxyCodeLine{464 \textcolor{keywordtype}{void} *vpCurIxTag; \textcolor{comment}{// Pointer to current tag}}
+\DoxyCodeLine{465 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sCurIxType; \textcolor{comment}{// Current index type}}
+\DoxyCodeLine{466 xbLinkList<xbTag *> llTags; \textcolor{comment}{// linked list of open tags}}
+\DoxyCodeLine{467 }
+\DoxyCodeLine{468 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{469 }
+\DoxyCodeLine{470 \textcolor{preprocessor}{\#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{471 xbLinkList<xbString> llInfData; \textcolor{comment}{// linked list of strings containing ndx file entries}}
+\DoxyCodeLine{472 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
\DoxyCodeLine{473 }
\DoxyCodeLine{474 }
-\DoxyCodeLine{475 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
+\DoxyCodeLine{475 \};}
+\DoxyCodeLine{476 }
\DoxyCodeLine{477 }
-\DoxyCodeLine{483 \textcolor{keyword}{class }XBDLLEXPORT xbDbf3 : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \{}
-\DoxyCodeLine{484 \textcolor{keyword}{public}:}
-\DoxyCodeLine{485 xbDbf3(\mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *x);}
-\DoxyCodeLine{486 \string~xbDbf3();}
-\DoxyCodeLine{487 \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{488 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
-\DoxyCodeLine{489 \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{490 }
-\DoxyCodeLine{491 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{492 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
-\DoxyCodeLine{493 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{478 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
+\DoxyCodeLine{480 }
+\DoxyCodeLine{486 \textcolor{keyword}{class }XBDLLEXPORT xbDbf3 : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \{}
+\DoxyCodeLine{487 \textcolor{keyword}{public}:}
+\DoxyCodeLine{488 xbDbf3(\mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *x);}
+\DoxyCodeLine{489 \string~xbDbf3();}
+\DoxyCodeLine{490 \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{491 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
+\DoxyCodeLine{492 \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{493 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sNewName );}
\DoxyCodeLine{494 }
-\DoxyCodeLine{495 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{496 xbInt16 SetVersion ();}
-\DoxyCodeLine{497 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *s );}
+\DoxyCodeLine{495 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{496 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
+\DoxyCodeLine{497 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{498 }
-\DoxyCodeLine{499 \textcolor{keyword}{private}:}
-\DoxyCodeLine{500 }
-\DoxyCodeLine{501 \};}
-\DoxyCodeLine{502 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF3\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{503 }
+\DoxyCodeLine{499 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{500 xbInt16 SetVersion ();}
+\DoxyCodeLine{501 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *s );}
+\DoxyCodeLine{502 }
+\DoxyCodeLine{503 \textcolor{keyword}{private}:}
\DoxyCodeLine{504 }
-\DoxyCodeLine{505 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
+\DoxyCodeLine{505 \};}
+\DoxyCodeLine{506 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF3\_SUPPORT */}\textcolor{preprocessor}{}}
\DoxyCodeLine{507 }
-\DoxyCodeLine{512 \textcolor{keyword}{class }XBDLLEXPORT xbDbf4 : \textcolor{keyword}{public} \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} \{}
-\DoxyCodeLine{513 \textcolor{keyword}{public}:}
-\DoxyCodeLine{514 xbDbf4( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
-\DoxyCodeLine{515 }
-\DoxyCodeLine{516 \string~xbDbf4();}
-\DoxyCodeLine{517 }
-\DoxyCodeLine{518 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );}
-\DoxyCodeLine{519 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
-\DoxyCodeLine{520 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{508 }
+\DoxyCodeLine{509 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
+\DoxyCodeLine{511 }
+\DoxyCodeLine{516 \textcolor{keyword}{class }XBDLLEXPORT xbDbf4 : \textcolor{keyword}{public} \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} \{}
+\DoxyCodeLine{517 \textcolor{keyword}{public}:}
+\DoxyCodeLine{518 xbDbf4( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
+\DoxyCodeLine{519 }
+\DoxyCodeLine{520 \string~xbDbf4();}
\DoxyCodeLine{521 }
-\DoxyCodeLine{522 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{523 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
-\DoxyCodeLine{524 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{525 }
-\DoxyCodeLine{526 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{527 \textcolor{comment}{// void InitVars ();}}
-\DoxyCodeLine{528 xbInt16 SetVersion();}
-\DoxyCodeLine{529 \textcolor{keyword}{virtual} xbInt16 ValidateSchema ( xbSchema *s );}
+\DoxyCodeLine{522 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );}
+\DoxyCodeLine{523 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
+\DoxyCodeLine{524 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{525 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} xbString sNewName );}
+\DoxyCodeLine{526 }
+\DoxyCodeLine{527 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{528 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
+\DoxyCodeLine{529 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{530 }
-\DoxyCodeLine{531 \textcolor{keyword}{private}:}
-\DoxyCodeLine{532 }
-\DoxyCodeLine{533 \};}
-\DoxyCodeLine{534 }
-\DoxyCodeLine{535 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF4\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{536 }
-\DoxyCodeLine{537 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{538 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBF\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{531 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{532 \textcolor{comment}{// void InitVars ();}}
+\DoxyCodeLine{533 xbInt16 SetVersion();}
+\DoxyCodeLine{534 \textcolor{keyword}{virtual} xbInt16 ValidateSchema ( xbSchema *s );}
+\DoxyCodeLine{535 }
+\DoxyCodeLine{536 \textcolor{keyword}{private}:}
+\DoxyCodeLine{537 }
+\DoxyCodeLine{538 \};}
+\DoxyCodeLine{539 }
+\DoxyCodeLine{540 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF4\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{541 }
+\DoxyCodeLine{542 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{543 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBF\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbdelete_8cpp.tex b/docs/doxygen/latex/xbdelete_8cpp.tex
new file mode 100644
index 0000000..6c9a05a
--- /dev/null
+++ b/docs/doxygen/latex/xbdelete_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbdelete_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql/xbdelete.cpp File Reference}
+\label{xbdelete_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbdelete.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbdelete.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdrpix_8cpp.tex b/docs/doxygen/latex/xbdrpix_8cpp.tex
index 5e24367..f4975e6 100644
--- a/docs/doxygen/latex/xbdrpix_8cpp.tex
+++ b/docs/doxygen/latex/xbdrpix_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbdrpix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/sql/xbdrpix.cpp File Reference}
-\label{xbdrpix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbdrpix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbdrpix.cpp}}
+\hypertarget{xbdrpix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql/xbdrpix.cpp File Reference}
+\label{xbdrpix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbdrpix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbdrpix.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdrptbl_8cpp.tex b/docs/doxygen/latex/xbdrptbl_8cpp.tex
index 95f12a7..c62fd23 100644
--- a/docs/doxygen/latex/xbdrptbl_8cpp.tex
+++ b/docs/doxygen/latex/xbdrptbl_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbdrptbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/sql/xbdrptbl.cpp File Reference}
-\label{xbdrptbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbdrptbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbdrptbl.cpp}}
+\hypertarget{xbdrptbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql/xbdrptbl.cpp File Reference}
+\label{xbdrptbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbdrptbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbdrptbl.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbexp_8cpp.tex b/docs/doxygen/latex/xbexp_8cpp.tex
index f8439bc..c0a4e04 100644
--- a/docs/doxygen/latex/xbexp_8cpp.tex
+++ b/docs/doxygen/latex/xbexp_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbexp_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbexp.cpp File Reference}
-\label{xbexp_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbexp.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbexp.cpp}}
+\hypertarget{xbexp_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbexp.cpp File Reference}
+\label{xbexp_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbexp.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbexp.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbexp_8h.tex b/docs/doxygen/latex/xbexp_8h.tex
index edcfc3d..8c4d497 100644
--- a/docs/doxygen/latex/xbexp_8h.tex
+++ b/docs/doxygen/latex/xbexp_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xbexp_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbexp.h File Reference}
-\label{xbexp_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbexp.h}}
+\hypertarget{xbexp_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbexp.h File Reference}
+\label{xbexp_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexp.h}}
diff --git a/docs/doxygen/latex/xbexp_8h_source.tex b/docs/doxygen/latex/xbexp_8h_source.tex
index 7801e11..5d21561 100644
--- a/docs/doxygen/latex/xbexp_8h_source.tex
+++ b/docs/doxygen/latex/xbexp_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbexp_8h_source}{}\doxysection{xbexp.\+h}
-\label{xbexp_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbexp.h}}
+\label{xbexp_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexp.h}}
\mbox{\hyperlink{xbexp_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbexp.h}}
diff --git a/docs/doxygen/latex/xbexpnode_8cpp.tex b/docs/doxygen/latex/xbexpnode_8cpp.tex
index d5fce07..b92c84a 100644
--- a/docs/doxygen/latex/xbexpnode_8cpp.tex
+++ b/docs/doxygen/latex/xbexpnode_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbexpnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbexpnode.cpp File Reference}
-\label{xbexpnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbexpnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbexpnode.cpp}}
+\hypertarget{xbexpnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbexpnode.cpp File Reference}
+\label{xbexpnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbexpnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbexpnode.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbexpnode_8h.tex b/docs/doxygen/latex/xbexpnode_8h.tex
index 574b650..e247062 100644
--- a/docs/doxygen/latex/xbexpnode_8h.tex
+++ b/docs/doxygen/latex/xbexpnode_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xbexpnode_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbexpnode.h File Reference}
-\label{xbexpnode_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbexpnode.h}}
+\hypertarget{xbexpnode_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbexpnode.h File Reference}
+\label{xbexpnode_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexpnode.h}}
diff --git a/docs/doxygen/latex/xbexpnode_8h_source.tex b/docs/doxygen/latex/xbexpnode_8h_source.tex
index a0cbdd8..00b8f9c 100644
--- a/docs/doxygen/latex/xbexpnode_8h_source.tex
+++ b/docs/doxygen/latex/xbexpnode_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbexpnode_8h_source}{}\doxysection{xbexpnode.\+h}
-\label{xbexpnode_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbexpnode.h}}
+\label{xbexpnode_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbexpnode.h}}
\mbox{\hyperlink{xbexpnode_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbexpnode.h}}
diff --git a/docs/doxygen/latex/xbfields_8cpp.tex b/docs/doxygen/latex/xbfields_8cpp.tex
index 83e84b3..803cb06 100644
--- a/docs/doxygen/latex/xbfields_8cpp.tex
+++ b/docs/doxygen/latex/xbfields_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbfields_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbfields.cpp File Reference}
-\label{xbfields_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbfields.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbfields.cpp}}
+\hypertarget{xbfields_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbfields.cpp File Reference}
+\label{xbfields_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbfields.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbfields.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbfile_8cpp.tex b/docs/doxygen/latex/xbfile_8cpp.tex
index 795870f..8f4dee3 100644
--- a/docs/doxygen/latex/xbfile_8cpp.tex
+++ b/docs/doxygen/latex/xbfile_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbfile_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbfile.cpp File Reference}
-\label{xbfile_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbfile.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbfile.cpp}}
+\hypertarget{xbfile_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbfile.cpp File Reference}
+\label{xbfile_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbfile.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbfile.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbfile_8h.tex b/docs/doxygen/latex/xbfile_8h.tex
index d3ddbb8..c5079e8 100644
--- a/docs/doxygen/latex/xbfile_8h.tex
+++ b/docs/doxygen/latex/xbfile_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbfile_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbfile.h File Reference}
-\label{xbfile_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbfile.h}}
+\hypertarget{xbfile_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbfile.h File Reference}
+\label{xbfile_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbfile.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbfile_8h_source.tex b/docs/doxygen/latex/xbfile_8h_source.tex
index 19fb9c7..506fe71 100644
--- a/docs/doxygen/latex/xbfile_8h_source.tex
+++ b/docs/doxygen/latex/xbfile_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbfile_8h_source}{}\doxysection{xbfile.\+h}
-\label{xbfile_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbfile.h}}
+\label{xbfile_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbfile.h}}
\mbox{\hyperlink{xbfile_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbfile.h}}
@@ -135,46 +135,45 @@
\DoxyCodeLine{151 xbInt16 xbRemove ();}
\DoxyCodeLine{152 }
\DoxyCodeLine{153 xbInt16 xbRename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNewName );}
-\DoxyCodeLine{154 xbInt16 xbRename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNewName, xbInt16 iOption );}
-\DoxyCodeLine{155 \textcolor{keywordtype}{void} xbRewind ();}
-\DoxyCodeLine{156 }
-\DoxyCodeLine{157 xbInt16 xbTruncate ( xbInt64 llSize );}
-\DoxyCodeLine{158 xbInt16 NameSuffixMissing( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{159 }
-\DoxyCodeLine{160 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{161 xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} lBlockSize );}
-\DoxyCodeLine{162 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{154 \textcolor{keywordtype}{void} xbRewind ();}
+\DoxyCodeLine{155 }
+\DoxyCodeLine{156 xbInt16 xbTruncate ( xbInt64 llSize );}
+\DoxyCodeLine{157 xbInt16 NameSuffixMissing( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{158 }
+\DoxyCodeLine{159 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{160 xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} lBlockSize );}
+\DoxyCodeLine{161 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{162 }
\DoxyCodeLine{163 }
-\DoxyCodeLine{164 }
-\DoxyCodeLine{165 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{166 }
-\DoxyCodeLine{167 \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *\mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}; \textcolor{comment}{/* pointer to the main structures */}}
-\DoxyCodeLine{168 }
-\DoxyCodeLine{169 \textcolor{keyword}{private}:}
-\DoxyCodeLine{170 FILE *fp;}
-\DoxyCodeLine{171 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFqFileName; \textcolor{comment}{/* fully qualified file name */}}
-\DoxyCodeLine{172 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFileName; \textcolor{comment}{/* file name */}}
-\DoxyCodeLine{173 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDirectory; \textcolor{comment}{/* directory, ends with / or \(\backslash\) */}}
-\DoxyCodeLine{174 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileOpen; \textcolor{comment}{/* true if file is open */}}
-\DoxyCodeLine{175 xbUInt32 ulBlockSize; \textcolor{comment}{/* used for memo and index files */}}
-\DoxyCodeLine{176 }
-\DoxyCodeLine{177 xbInt16 iOpenMode; \textcolor{comment}{/* XB\_READ || XB\_READ\_WRITE || XB\_WRITE */}}
-\DoxyCodeLine{178 xbInt16 iShareMode; \textcolor{comment}{/* XB\_SINGLE\_USER || XB\_MULTI\_USER -\/ set file buffering */}}
-\DoxyCodeLine{179 xbInt32 iFileNo; \textcolor{comment}{/* Library File No */}}
-\DoxyCodeLine{180 }
-\DoxyCodeLine{181 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{182 xbInt16 iLockRetries; \textcolor{comment}{/* file override number of lock attempts */}}
-\DoxyCodeLine{183 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{184 }
-\DoxyCodeLine{185 \textcolor{preprocessor}{ \#ifdef HAVE\_SETENDOFFILE\_F}}
-\DoxyCodeLine{186 HANDLE fHandle;}
-\DoxyCodeLine{187 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{164 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{165 }
+\DoxyCodeLine{166 \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *\mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}; \textcolor{comment}{/* pointer to the main structures */}}
+\DoxyCodeLine{167 }
+\DoxyCodeLine{168 \textcolor{keyword}{private}:}
+\DoxyCodeLine{169 FILE *fp;}
+\DoxyCodeLine{170 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFqFileName; \textcolor{comment}{/* fully qualified file name */}}
+\DoxyCodeLine{171 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFileName; \textcolor{comment}{/* file name */}}
+\DoxyCodeLine{172 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDirectory; \textcolor{comment}{/* directory, ends with / or \(\backslash\) */}}
+\DoxyCodeLine{173 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileOpen; \textcolor{comment}{/* true if file is open */}}
+\DoxyCodeLine{174 xbUInt32 ulBlockSize; \textcolor{comment}{/* used for memo and index files */}}
+\DoxyCodeLine{175 }
+\DoxyCodeLine{176 xbInt16 iOpenMode; \textcolor{comment}{/* XB\_READ || XB\_READ\_WRITE || XB\_WRITE */}}
+\DoxyCodeLine{177 xbInt16 iShareMode; \textcolor{comment}{/* XB\_SINGLE\_USER || XB\_MULTI\_USER -\/ set file buffering */}}
+\DoxyCodeLine{178 xbInt32 iFileNo; \textcolor{comment}{/* Library File No */}}
+\DoxyCodeLine{179 }
+\DoxyCodeLine{180 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{181 xbInt16 iLockRetries; \textcolor{comment}{/* file override number of lock attempts */}}
+\DoxyCodeLine{182 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{183 }
+\DoxyCodeLine{184 \textcolor{preprocessor}{ \#ifdef HAVE\_SETENDOFFILE\_F}}
+\DoxyCodeLine{185 HANDLE fHandle;}
+\DoxyCodeLine{186 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{187 }
\DoxyCodeLine{188 }
-\DoxyCodeLine{189 }
-\DoxyCodeLine{190 \};}
-\DoxyCodeLine{191 }
-\DoxyCodeLine{192 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{193 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBFILE\_H\_\_ */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{194 }
+\DoxyCodeLine{189 \};}
+\DoxyCodeLine{190 }
+\DoxyCodeLine{191 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{192 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBFILE\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{193 }
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbfilter_8cpp.tex b/docs/doxygen/latex/xbfilter_8cpp.tex
index a3711d4..0b88920 100644
--- a/docs/doxygen/latex/xbfilter_8cpp.tex
+++ b/docs/doxygen/latex/xbfilter_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbfilter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbfilter.cpp File Reference}
-\label{xbfilter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbfilter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbfilter.cpp}}
+\hypertarget{xbfilter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbfilter.cpp File Reference}
+\label{xbfilter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbfilter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbfilter.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbfilter_8h.tex b/docs/doxygen/latex/xbfilter_8h.tex
index e9ccb84..b19421f 100644
--- a/docs/doxygen/latex/xbfilter_8h.tex
+++ b/docs/doxygen/latex/xbfilter_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xbfilter_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbfilter.h File Reference}
-\label{xbfilter_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbfilter.h}}
+\hypertarget{xbfilter_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbfilter.h File Reference}
+\label{xbfilter_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbfilter.h}}
diff --git a/docs/doxygen/latex/xbfilter_8h_source.tex b/docs/doxygen/latex/xbfilter_8h_source.tex
index 114fb1f..c0f8e55 100644
--- a/docs/doxygen/latex/xbfilter_8h_source.tex
+++ b/docs/doxygen/latex/xbfilter_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbfilter_8h_source}{}\doxysection{xbfilter.\+h}
-\label{xbfilter_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbfilter.h}}
+\label{xbfilter_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbfilter.h}}
\mbox{\hyperlink{xbfilter_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbfilter.h}}
diff --git a/docs/doxygen/latex/xbfuncs_8cpp.tex b/docs/doxygen/latex/xbfuncs_8cpp.tex
index 237da74..58aeb21 100644
--- a/docs/doxygen/latex/xbfuncs_8cpp.tex
+++ b/docs/doxygen/latex/xbfuncs_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbfuncs.cpp File Reference}
-\label{xbfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbfuncs.cpp}}
+\hypertarget{xbfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbfuncs.cpp File Reference}
+\label{xbfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbfuncs.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbindex_8h.tex b/docs/doxygen/latex/xbindex_8h.tex
index 01bdb4f..8090a64 100644
--- a/docs/doxygen/latex/xbindex_8h.tex
+++ b/docs/doxygen/latex/xbindex_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xbindex_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbindex.h File Reference}
-\label{xbindex_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbindex.h}}
+\hypertarget{xbindex_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbindex.h File Reference}
+\label{xbindex_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbindex.h}}
diff --git a/docs/doxygen/latex/xbindex_8h_source.tex b/docs/doxygen/latex/xbindex_8h_source.tex
index e104f5a..d234125 100644
--- a/docs/doxygen/latex/xbindex_8h_source.tex
+++ b/docs/doxygen/latex/xbindex_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbindex_8h_source}{}\doxysection{xbindex.\+h}
-\label{xbindex_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbindex.h}}
+\label{xbindex_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbindex.h}}
\mbox{\hyperlink{xbindex_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbindex.h}}
diff --git a/docs/doxygen/latex/xbinsert_8cpp.tex b/docs/doxygen/latex/xbinsert_8cpp.tex
index 394c391..ffb7fe6 100644
--- a/docs/doxygen/latex/xbinsert_8cpp.tex
+++ b/docs/doxygen/latex/xbinsert_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbinsert_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/sql/xbinsert.cpp File Reference}
-\label{xbinsert_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbinsert.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbinsert.cpp}}
+\hypertarget{xbinsert_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql/xbinsert.cpp File Reference}
+\label{xbinsert_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbinsert.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbinsert.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixbase_8cpp.tex b/docs/doxygen/latex/xbixbase_8cpp.tex
index a2adcb8..f987129 100644
--- a/docs/doxygen/latex/xbixbase_8cpp.tex
+++ b/docs/doxygen/latex/xbixbase_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbixbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbixbase.cpp File Reference}
-\label{xbixbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbixbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbixbase.cpp}}
+\hypertarget{xbixbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbixbase.cpp File Reference}
+\label{xbixbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbixbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbixbase.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixmdx_8cpp.tex b/docs/doxygen/latex/xbixmdx_8cpp.tex
index 71b27f8..07a7006 100644
--- a/docs/doxygen/latex/xbixmdx_8cpp.tex
+++ b/docs/doxygen/latex/xbixmdx_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbixmdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbixmdx.cpp File Reference}
-\label{xbixmdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbixmdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbixmdx.cpp}}
+\hypertarget{xbixmdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbixmdx.cpp File Reference}
+\label{xbixmdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbixmdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbixmdx.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixndx_8cpp.tex b/docs/doxygen/latex/xbixndx_8cpp.tex
index 6d3f9d7..457c279 100644
--- a/docs/doxygen/latex/xbixndx_8cpp.tex
+++ b/docs/doxygen/latex/xbixndx_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbixndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbixndx.cpp File Reference}
-\label{xbixndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbixndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbixndx.cpp}}
+\hypertarget{xbixndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbixndx.cpp File Reference}
+\label{xbixndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbixndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbixndx.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xblnklst_8h.tex b/docs/doxygen/latex/xblnklst_8h.tex
index 27f761b..1734760 100644
--- a/docs/doxygen/latex/xblnklst_8h.tex
+++ b/docs/doxygen/latex/xblnklst_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xblnklst_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklst.h File Reference}
-\label{xblnklst_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklst.h}}
+\hypertarget{xblnklst_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklst.h File Reference}
+\label{xblnklst_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklst.h}}
diff --git a/docs/doxygen/latex/xblnklst_8h_source.tex b/docs/doxygen/latex/xblnklst_8h_source.tex
index f3d8d4c..cbf9fa9 100644
--- a/docs/doxygen/latex/xblnklst_8h_source.tex
+++ b/docs/doxygen/latex/xblnklst_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xblnklst_8h_source}{}\doxysection{xblnklst.\+h}
-\label{xblnklst_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklst.h}}
+\label{xblnklst_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklst.h}}
\mbox{\hyperlink{xblnklst_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xblnklst.h}}
diff --git a/docs/doxygen/latex/xblnklstord_8h.tex b/docs/doxygen/latex/xblnklstord_8h.tex
index 665c61e..f6d60d1 100644
--- a/docs/doxygen/latex/xblnklstord_8h.tex
+++ b/docs/doxygen/latex/xblnklstord_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xblnklstord_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklstord.h File Reference}
-\label{xblnklstord_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklstord.h}}
+\hypertarget{xblnklstord_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklstord.h File Reference}
+\label{xblnklstord_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklstord.h}}
diff --git a/docs/doxygen/latex/xblnklstord_8h_source.tex b/docs/doxygen/latex/xblnklstord_8h_source.tex
index 8d88a7a..5f4c000 100644
--- a/docs/doxygen/latex/xblnklstord_8h_source.tex
+++ b/docs/doxygen/latex/xblnklstord_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xblnklstord_8h_source}{}\doxysection{xblnklstord.\+h}
-\label{xblnklstord_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnklstord.h}}
+\label{xblnklstord_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnklstord.h}}
\mbox{\hyperlink{xblnklstord_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xblnklstord.h}}
diff --git a/docs/doxygen/latex/xblnknod_8h.tex b/docs/doxygen/latex/xblnknod_8h.tex
index 4db5c8b..9be4f78 100644
--- a/docs/doxygen/latex/xblnknod_8h.tex
+++ b/docs/doxygen/latex/xblnknod_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xblnknod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xblnknod.h File Reference}
-\label{xblnknod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnknod.h}}
+\hypertarget{xblnknod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xblnknod.h File Reference}
+\label{xblnknod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnknod.h}}
diff --git a/docs/doxygen/latex/xblnknod_8h_source.tex b/docs/doxygen/latex/xblnknod_8h_source.tex
index 69a083a..73fc62f 100644
--- a/docs/doxygen/latex/xblnknod_8h_source.tex
+++ b/docs/doxygen/latex/xblnknod_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xblnknod_8h_source}{}\doxysection{xblnknod.\+h}
-\label{xblnknod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblnknod.h}}
+\label{xblnknod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblnknod.h}}
\mbox{\hyperlink{xblnknod_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xblnknod.h}}
diff --git a/docs/doxygen/latex/xblog_8cpp.tex b/docs/doxygen/latex/xblog_8cpp.tex
index 5fdc579..e0d9529 100644
--- a/docs/doxygen/latex/xblog_8cpp.tex
+++ b/docs/doxygen/latex/xblog_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xblog_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xblog.cpp File Reference}
-\label{xblog_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xblog.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xblog.cpp}}
+\hypertarget{xblog_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xblog.cpp File Reference}
+\label{xblog_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xblog.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xblog.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xblog_8h.tex b/docs/doxygen/latex/xblog_8h.tex
index e916153..28822ab 100644
--- a/docs/doxygen/latex/xblog_8h.tex
+++ b/docs/doxygen/latex/xblog_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xblog_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xblog.h File Reference}
-\label{xblog_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblog.h}}
+\hypertarget{xblog_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xblog.h File Reference}
+\label{xblog_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblog.h}}
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xblog_8h_source.tex b/docs/doxygen/latex/xblog_8h_source.tex
index 9bdec27..b4f73ea 100644
--- a/docs/doxygen/latex/xblog_8h_source.tex
+++ b/docs/doxygen/latex/xblog_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xblog_8h_source}{}\doxysection{xblog.\+h}
-\label{xblog_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xblog.h}}
+\label{xblog_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xblog.h}}
\mbox{\hyperlink{xblog_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xblog.h}}
diff --git a/docs/doxygen/latex/xbmemo3_8cpp.tex b/docs/doxygen/latex/xbmemo3_8cpp.tex
index f829ce4..b7343e7 100644
--- a/docs/doxygen/latex/xbmemo3_8cpp.tex
+++ b/docs/doxygen/latex/xbmemo3_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbmemo3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbmemo3.cpp File Reference}
-\label{xbmemo3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbmemo3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbmemo3.cpp}}
+\hypertarget{xbmemo3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbmemo3.cpp File Reference}
+\label{xbmemo3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbmemo3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbmemo3.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbmemo4_8cpp.tex b/docs/doxygen/latex/xbmemo4_8cpp.tex
index ba7a70b..2e8bd11 100644
--- a/docs/doxygen/latex/xbmemo4_8cpp.tex
+++ b/docs/doxygen/latex/xbmemo4_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbmemo4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbmemo4.cpp File Reference}
-\label{xbmemo4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbmemo4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbmemo4.cpp}}
+\hypertarget{xbmemo4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbmemo4.cpp File Reference}
+\label{xbmemo4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbmemo4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbmemo4.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbmemo_8cpp.tex b/docs/doxygen/latex/xbmemo_8cpp.tex
index d3d2c67..902360b 100644
--- a/docs/doxygen/latex/xbmemo_8cpp.tex
+++ b/docs/doxygen/latex/xbmemo_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbmemo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbmemo.cpp File Reference}
-\label{xbmemo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbmemo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbmemo.cpp}}
+\hypertarget{xbmemo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbmemo.cpp File Reference}
+\label{xbmemo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbmemo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbmemo.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbmemo_8h.tex b/docs/doxygen/latex/xbmemo_8h.tex
index e1fff45..f3f9a26 100644
--- a/docs/doxygen/latex/xbmemo_8h.tex
+++ b/docs/doxygen/latex/xbmemo_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xbmemo_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbmemo.h File Reference}
-\label{xbmemo_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbmemo.h}}
+\hypertarget{xbmemo_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbmemo.h File Reference}
+\label{xbmemo_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbmemo.h}}
diff --git a/docs/doxygen/latex/xbmemo_8h_source.tex b/docs/doxygen/latex/xbmemo_8h_source.tex
index a948e02..f9628c6 100644
--- a/docs/doxygen/latex/xbmemo_8h_source.tex
+++ b/docs/doxygen/latex/xbmemo_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbmemo_8h_source}{}\doxysection{xbmemo.\+h}
-\label{xbmemo_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbmemo.h}}
+\label{xbmemo_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbmemo.h}}
\mbox{\hyperlink{xbmemo_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbmemo.h}}
@@ -42,145 +42,146 @@
\DoxyCodeLine{59 }
\DoxyCodeLine{60 \textcolor{comment}{/* virtual methods */}}
\DoxyCodeLine{61 \textcolor{keyword}{virtual} \string~xbMemo();}
-\DoxyCodeLine{62 \textcolor{keyword}{virtual} xbInt16 Abort () = 0;}
-\DoxyCodeLine{63 \textcolor{keyword}{virtual} xbInt16 CloseMemoFile ();}
-\DoxyCodeLine{64 \textcolor{keyword}{virtual} xbInt16 Commit () = 0;}
-\DoxyCodeLine{65 }
-\DoxyCodeLine{66 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{67 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
-\DoxyCodeLine{68 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{69 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{70 }
-\DoxyCodeLine{71 \textcolor{comment}{/* pure virtual methods */}}
-\DoxyCodeLine{72 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile () = 0;}
-\DoxyCodeLine{73 }
-\DoxyCodeLine{74 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData ) = 0;}
-\DoxyCodeLine{75 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen ) = 0;}
-\DoxyCodeLine{76 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile () = 0;}
-\DoxyCodeLine{77 \textcolor{keyword}{virtual} xbInt16 GetMemoFileType();}
-\DoxyCodeLine{78 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc)(xbUInt32 ulItemNum, xbUInt32 ulNumItems)) = 0;}
-\DoxyCodeLine{79 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData ) = 0;}
+\DoxyCodeLine{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\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{82 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain() = 0;}
-\DoxyCodeLine{83 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader () = 0;}
+\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 \textcolor{comment}{// *********** FIXME *************}}
-\DoxyCodeLine{87 \textcolor{comment}{// next two methods should be protected but are called in the xb\_test\_xxxx programs testing routines}}
-\DoxyCodeLine{88 \textcolor{comment}{// so for now, they are kept as public}}
-\DoxyCodeLine{89 \textcolor{keyword}{virtual} xbInt16 CalcLastDataBlock ( xbUInt32 \&lLastDataBlock );}
-\DoxyCodeLine{90 \textcolor{keyword}{virtual} xbInt16 GetHdrNextBlock ( xbUInt32 \&ulBlockNo );}
-\DoxyCodeLine{91 }
-\DoxyCodeLine{92 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{93 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
-\DoxyCodeLine{94 }
-\DoxyCodeLine{95 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader ( xbInt16 iOption ) = 0;}
-\DoxyCodeLine{96 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName () = 0;}
-\DoxyCodeLine{97 \textcolor{keyword}{virtual} xbInt16 UpdateHeadNextNode();}
-\DoxyCodeLine{98 \textcolor{keyword}{virtual} xbInt16 Zap () = 0;}
-\DoxyCodeLine{99 }
-\DoxyCodeLine{100 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf; \textcolor{comment}{/* pointer to related dbf instance */}}
-\DoxyCodeLine{101 \textcolor{keywordtype}{char} cVersion; \textcolor{comment}{/* byte 16 off the header block, 0x03 for V3, version IV -\/ ? */}}
-\DoxyCodeLine{102 xbInt16 iMemoFileType; \textcolor{comment}{/* 3 = version III, 4 = version IV */}}
-\DoxyCodeLine{103 xbUInt32 ulHdrNextBlock; \textcolor{comment}{/* next available block , bytes 0-\/3 of the memo header */}}
-\DoxyCodeLine{104 \textcolor{keywordtype}{void} * mbb; \textcolor{comment}{/* memo block buffer */}}
-\DoxyCodeLine{105 }
-\DoxyCodeLine{106 }
-\DoxyCodeLine{107 \textcolor{keyword}{private}:}
+\DoxyCodeLine{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{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{110 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileLocked; \textcolor{comment}{/* memo file locked */}}
-\DoxyCodeLine{111 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{112 }
-\DoxyCodeLine{113 \};}
+\DoxyCodeLine{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{115 \};}
\DoxyCodeLine{116 }
-\DoxyCodeLine{117 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
-\DoxyCodeLine{119 }
-\DoxyCodeLine{131 \textcolor{keyword}{class }XBDLLEXPORT xbMemoDbt3 : \textcolor{keyword}{public} xbMemo \{}
-\DoxyCodeLine{132 \textcolor{keyword}{public}:}
-\DoxyCodeLine{133 xbMemoDbt3( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbString \textcolor{keyword}{const} \&sFileName );}
-\DoxyCodeLine{134 \string~xbMemoDbt3();}
-\DoxyCodeLine{135 \textcolor{keyword}{virtual} xbInt16 Abort ();}
-\DoxyCodeLine{136 \textcolor{keyword}{virtual} xbInt16 Commit ();}
-\DoxyCodeLine{137 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile ();}
-\DoxyCodeLine{138 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData );}
-\DoxyCodeLine{139 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen );}
-\DoxyCodeLine{140 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile ();}
-\DoxyCodeLine{141 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));}
-\DoxyCodeLine{142 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData );}
-\DoxyCodeLine{143 }
-\DoxyCodeLine{144 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{145 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain();}
-\DoxyCodeLine{146 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader ();}
-\DoxyCodeLine{147 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{148 }
-\DoxyCodeLine{149 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{150 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader( xbInt16 iOption );}
-\DoxyCodeLine{151 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName();}
-\DoxyCodeLine{152 \textcolor{keyword}{virtual} xbInt16 Zap();}
-\DoxyCodeLine{153 }
-\DoxyCodeLine{154 \textcolor{keyword}{private}:}
-\DoxyCodeLine{155 \};}
-\DoxyCodeLine{156 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{157 }
-\DoxyCodeLine{158 }
-\DoxyCodeLine{159 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
+\DoxyCodeLine{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{172 \textcolor{keyword}{class }XBDLLEXPORT xbMemoDbt4 : \textcolor{keyword}{public} xbMemo \{}
-\DoxyCodeLine{173 \textcolor{keyword}{public}:}
-\DoxyCodeLine{174 xbMemoDbt4( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, xbString \textcolor{keyword}{const} \&sFileName );}
-\DoxyCodeLine{175 \string~xbMemoDbt4();}
-\DoxyCodeLine{176 \textcolor{keyword}{virtual} xbInt16 Abort ();}
-\DoxyCodeLine{177 \textcolor{keyword}{virtual} xbInt16 Commit ();}
-\DoxyCodeLine{178 \textcolor{keyword}{virtual} xbInt16 CreateMemoFile ();}
-\DoxyCodeLine{179 }
-\DoxyCodeLine{180 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFieldNo, xbString \&sMemoData );}
-\DoxyCodeLine{181 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen );}
-\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFieldNo, xbUInt32 \&ulMemoFieldLen, xbUInt32 \&lBlockNo );}
-\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 OpenMemoFile ();}
-\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 PackMemo ( \textcolor{keywordtype}{void} (*memoStatusFunc) (xbUInt32 ulItemNum, xbUInt32 ulNumItems));}
-\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFieldNo, \textcolor{keyword}{const} xbString \&sMemoData );}
-\DoxyCodeLine{186 }
-\DoxyCodeLine{187 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{188 \textcolor{keyword}{virtual} xbInt16 DumpMemoFreeChain ();}
-\DoxyCodeLine{189 \textcolor{keyword}{virtual} xbInt16 DumpMemoHeader ();}
-\DoxyCodeLine{190 \textcolor{keyword}{virtual} xbInt16 DumpMemoInternals ();}
-\DoxyCodeLine{191 \textcolor{keyword}{virtual} xbInt16 ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 \&ulNextBlock, xbUInt32 \&ulFreeBlockCnt );}
-\DoxyCodeLine{192 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{193 }
-\DoxyCodeLine{194 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{195 \textcolor{keyword}{virtual} xbInt16 FindBlockSetInChain( xbUInt32 ulBlocksNeeded, xbUInt32 \&ulLastDataBlock, xbUInt32 \&ulLocation, xbUInt32 \&ulPrevNode, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bFound );}
-\DoxyCodeLine{196 \textcolor{keyword}{virtual} xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo );}
-\DoxyCodeLine{197 \textcolor{keyword}{virtual} xbInt16 FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 \&ulLastDataBlock );}
-\DoxyCodeLine{198 \textcolor{keyword}{virtual} xbInt16 GetBlockSetFromChain( xbUInt32 ulBlocksNeeded, xbUInt32 ulLocation, xbUInt32 ulPrevNode );}
-\DoxyCodeLine{199 \textcolor{keyword}{virtual} xbInt16 ReadDbtHeader( xbInt16 iOption );}
-\DoxyCodeLine{200 \textcolor{keyword}{virtual} xbInt16 ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );}
-\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 UpdateHeaderName ();}
-\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption );}
-\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 Zap();}
-\DoxyCodeLine{204 }
-\DoxyCodeLine{205 \textcolor{keyword}{private}:}
-\DoxyCodeLine{206 xbString sDbfFileNameWoExt;}
-\DoxyCodeLine{207 xbUInt32 ulNextFreeBlock;}
-\DoxyCodeLine{208 xbUInt32 ulFreeBlockCnt;}
-\DoxyCodeLine{209 xbInt16 iField1;}
-\DoxyCodeLine{210 xbInt16 iStartPos;}
-\DoxyCodeLine{211 xbUInt32 ulFieldLen;}
-\DoxyCodeLine{212 }
-\DoxyCodeLine{213 xbLinkList<xbUInt32> llOldBlocks; \textcolor{comment}{// list of previously used memo blocks for field, used by Commit() / Abort()}}
-\DoxyCodeLine{214 xbLinkList<xbUInt32> llNewBlocks; \textcolor{comment}{// list of newly updated memo blocks for field, used by Commit() / Abort()}}
-\DoxyCodeLine{215 }
-\DoxyCodeLine{216 \};}
-\DoxyCodeLine{217 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{218 }
+\DoxyCodeLine{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 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{221 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_MEMO\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{222 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_MEMO\_H\_\_ */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{223 }
+\DoxyCodeLine{220 }
+\DoxyCodeLine{221 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{222 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_MEMO\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{223 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_MEMO\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{224 }
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbretcod_8h.tex b/docs/doxygen/latex/xbretcod_8h.tex
index d2ce8f0..9e36114 100644
--- a/docs/doxygen/latex/xbretcod_8h.tex
+++ b/docs/doxygen/latex/xbretcod_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbretcod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbretcod.h File Reference}
-\label{xbretcod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbretcod.h}}
+\hypertarget{xbretcod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbretcod.h File Reference}
+\label{xbretcod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbretcod.h}}
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbretcod_8h_source.tex b/docs/doxygen/latex/xbretcod_8h_source.tex
index 3d2ca9e..69b09ed 100644
--- a/docs/doxygen/latex/xbretcod_8h_source.tex
+++ b/docs/doxygen/latex/xbretcod_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbretcod_8h_source}{}\doxysection{xbretcod.\+h}
-\label{xbretcod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbretcod.h}}
+\label{xbretcod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbretcod.h}}
\mbox{\hyperlink{xbretcod_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbretcod.h}}
diff --git a/docs/doxygen/latex/xbset_8cpp.tex b/docs/doxygen/latex/xbset_8cpp.tex
index 2e325e7..4ee080e 100644
--- a/docs/doxygen/latex/xbset_8cpp.tex
+++ b/docs/doxygen/latex/xbset_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbset_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/sql/xbset.cpp File Reference}
-\label{xbset_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbset.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbset.cpp}}
+\hypertarget{xbset_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql/xbset.cpp File Reference}
+\label{xbset_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbset.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbset.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbsql_8cpp.tex b/docs/doxygen/latex/xbsql_8cpp.tex
index f488c9d..e70fabf 100644
--- a/docs/doxygen/latex/xbsql_8cpp.tex
+++ b/docs/doxygen/latex/xbsql_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/sql/xbsql.cpp File Reference}
-\label{xbsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/sql/xbsql.cpp}}
+\hypertarget{xbsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/sql/xbsql.cpp File Reference}
+\label{xbsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/sql/xbsql.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbsql_8h.tex b/docs/doxygen/latex/xbsql_8h.tex
index e398353..df1b008 100644
--- a/docs/doxygen/latex/xbsql_8h.tex
+++ b/docs/doxygen/latex/xbsql_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xbsql_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbsql.h File Reference}
-\label{xbsql_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbsql.h}}
+\hypertarget{xbsql_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbsql.h File Reference}
+\label{xbsql_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbsql.h}}
diff --git a/docs/doxygen/latex/xbsql_8h_source.tex b/docs/doxygen/latex/xbsql_8h_source.tex
index ae69922..f42eca3 100644
--- a/docs/doxygen/latex/xbsql_8h_source.tex
+++ b/docs/doxygen/latex/xbsql_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbsql_8h_source}{}\doxysection{xbsql.\+h}
-\label{xbsql_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbsql.h}}
+\label{xbsql_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbsql.h}}
\mbox{\hyperlink{xbsql_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbsql.h}}
@@ -46,30 +46,37 @@
\DoxyCodeLine{42 }
\DoxyCodeLine{43 \textcolor{keyword}{private}:}
\DoxyCodeLine{44 }
-\DoxyCodeLine{45 xbInt16 SqlCreateTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{46 xbInt16 SqlCreateIndex( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{47 }
-\DoxyCodeLine{48 xbInt16 SqlDropIndex( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{49 xbInt16 SqlDropTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{45 xbInt16 SqlAlterTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{46 }
+\DoxyCodeLine{47 xbInt16 SqlCreateTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{48 }
+\DoxyCodeLine{49 xbInt16 SqlDelete( \textcolor{keyword}{const} xbString \&sCmdLine );}
\DoxyCodeLine{50 }
-\DoxyCodeLine{51 }
-\DoxyCodeLine{52 \textcolor{comment}{// xbInt16 SqlCreateView( const xbString \&sCmdLine );}}
-\DoxyCodeLine{53 \textcolor{comment}{// xbInt16 SqlDropView( const xbString \&sCmdLine );}}
-\DoxyCodeLine{54 \textcolor{comment}{// xbInt16 SqlUpdate( const xbString \&sCmdLine );}}
-\DoxyCodeLine{55 \textcolor{comment}{// xbInt16 SqlSelect( const xbString \&sCmdLine );}}
-\DoxyCodeLine{56 }
-\DoxyCodeLine{57 \textcolor{keywordtype}{void} SqlHelp() \textcolor{keyword}{const};}
-\DoxyCodeLine{58 xbInt16 SqlInsert( \textcolor{keyword}{const} xbString \&sCmLine );}
-\DoxyCodeLine{59 xbInt16 SqlSet( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{60 xbInt16 SqlUse( \textcolor{keyword}{const} xbString \&sCmdLine );}
-\DoxyCodeLine{61 }
-\DoxyCodeLine{62 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase;}
-\DoxyCodeLine{63 xbUda uda;}
-\DoxyCodeLine{64 }
-\DoxyCodeLine{65 \};}
-\DoxyCodeLine{66 }
-\DoxyCodeLine{67 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{68 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_SQL\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{69 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSQL\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{51 xbInt16 SqlDropTable( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{52 }
+\DoxyCodeLine{53 }
+\DoxyCodeLine{54 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{55 xbInt16 SqlCreateIndex( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{56 xbInt16 SqlDropIndex( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{57 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 \textcolor{comment}{// xbInt16 SqlCreateView( const xbString \&sCmdLine );}}
+\DoxyCodeLine{60 \textcolor{comment}{// xbInt16 SqlDropView( const xbString \&sCmdLine );}}
+\DoxyCodeLine{61 \textcolor{comment}{// xbInt16 SqlUpdate( const xbString \&sCmdLine );}}
+\DoxyCodeLine{62 \textcolor{comment}{// xbInt16 SqlSelect( const xbString \&sCmdLine );}}
+\DoxyCodeLine{63 }
+\DoxyCodeLine{64 \textcolor{keywordtype}{void} SqlHelp() \textcolor{keyword}{const};}
+\DoxyCodeLine{65 xbInt16 SqlInsert( \textcolor{keyword}{const} xbString \&sCmLine );}
+\DoxyCodeLine{66 xbInt16 SqlSet( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{67 xbInt16 SqlUse( \textcolor{keyword}{const} xbString \&sCmdLine );}
+\DoxyCodeLine{68 }
+\DoxyCodeLine{69 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase;}
+\DoxyCodeLine{70 xbUda uda;}
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 \};}
+\DoxyCodeLine{73 }
+\DoxyCodeLine{74 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{75 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_SQL\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{76 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSQL\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbssv_8cpp.tex b/docs/doxygen/latex/xbssv_8cpp.tex
index 9f23133..f5492e3 100644
--- a/docs/doxygen/latex/xbssv_8cpp.tex
+++ b/docs/doxygen/latex/xbssv_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbssv_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbssv.cpp File Reference}
-\label{xbssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbssv.cpp}}
+\hypertarget{xbssv_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbssv.cpp File Reference}
+\label{xbssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbssv.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbssv_8h.tex b/docs/doxygen/latex/xbssv_8h.tex
index cfffb14..673bd81 100644
--- a/docs/doxygen/latex/xbssv_8h.tex
+++ b/docs/doxygen/latex/xbssv_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbssv_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbssv.h File Reference}
-\label{xbssv_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbssv.h}}
+\hypertarget{xbssv_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbssv.h File Reference}
+\label{xbssv_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbssv.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbssv_8h_source.tex b/docs/doxygen/latex/xbssv_8h_source.tex
index f0a7055..5a0f66b 100644
--- a/docs/doxygen/latex/xbssv_8h_source.tex
+++ b/docs/doxygen/latex/xbssv_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbssv_8h_source}{}\doxysection{xbssv.\+h}
-\label{xbssv_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbssv.h}}
+\label{xbssv_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbssv.h}}
\mbox{\hyperlink{xbssv_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbssv.h}}
@@ -61,110 +61,107 @@
\DoxyCodeLine{70 \textcolor{keywordtype}{void} SetDataDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDataDirectory );}
\DoxyCodeLine{71 \textcolor{keywordtype}{void} SetDefaultDateFormat ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDefaultDateFormat );}
\DoxyCodeLine{72 }
-\DoxyCodeLine{73 }
-\DoxyCodeLine{74 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} BitSet ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c, xbInt16 iBitNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{75 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{76 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
-\DoxyCodeLine{77 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
-\DoxyCodeLine{78 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{73 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} BitSet ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c, xbInt16 iBitNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{74 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
+\DoxyCodeLine{75 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
+\DoxyCodeLine{76 }
+\DoxyCodeLine{77 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoCommit () \textcolor{keyword}{const};}
+\DoxyCodeLine{78 \textcolor{keywordtype}{void} SetDefaultAutoCommit ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit );}
\DoxyCodeLine{79 }
-\DoxyCodeLine{80 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoCommit () \textcolor{keyword}{const};}
-\DoxyCodeLine{81 \textcolor{keywordtype}{void} SetDefaultAutoCommit ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit );}
-\DoxyCodeLine{82 }
-\DoxyCodeLine{83 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDefaultLogDirectory () \textcolor{keyword}{const};}
-\DoxyCodeLine{84 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDefaultLogFileName () \textcolor{keyword}{const};}
-\DoxyCodeLine{85 \textcolor{keywordtype}{void} SetDefaultLogDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDefaultLogDirectory );}
+\DoxyCodeLine{80 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDefaultLogDirectory () \textcolor{keyword}{const};}
+\DoxyCodeLine{81 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDefaultLogFileName () \textcolor{keyword}{const};}
+\DoxyCodeLine{82 \textcolor{keywordtype}{void} SetDefaultLogDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDefaultLogDirectory );}
+\DoxyCodeLine{83 }
+\DoxyCodeLine{84 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMultiUser () \textcolor{keyword}{const};}
+\DoxyCodeLine{85 \textcolor{keywordtype}{void} SetMultiUser ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser );}
\DoxyCodeLine{86 }
-\DoxyCodeLine{87 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMultiUser () \textcolor{keyword}{const};}
-\DoxyCodeLine{88 \textcolor{keywordtype}{void} SetMultiUser ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser );}
-\DoxyCodeLine{89 }
-\DoxyCodeLine{90 \textcolor{preprocessor}{ \#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
-\DoxyCodeLine{91 xbInt16 GetUniqueKeyOpt () \textcolor{keyword}{const};}
-\DoxyCodeLine{92 xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );}
-\DoxyCodeLine{93 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{94 }
-\DoxyCodeLine{95 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{96 xbInt16 GetDefaultLockRetries () \textcolor{keyword}{const};}
-\DoxyCodeLine{97 \textcolor{keywordtype}{void} SetDefaultLockRetries ( xbInt16 iRetryCount );}
-\DoxyCodeLine{98 xbInt32 GetDefaultLockWait () \textcolor{keyword}{const};}
-\DoxyCodeLine{99 \textcolor{keywordtype}{void} SetDefaultLockWait ( xbInt32 lRetryWait );}
-\DoxyCodeLine{100 xbInt16 GetDefaultLockFlavor () \textcolor{keyword}{const};}
-\DoxyCodeLine{101 \textcolor{keywordtype}{void} SetDefaultLockFlavor ( xbInt16 iLockFlavor );}
-\DoxyCodeLine{102 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoLock () \textcolor{keyword}{const};}
-\DoxyCodeLine{103 \textcolor{keywordtype}{void} SetDefaultAutoLock ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAutoLock );}
-\DoxyCodeLine{104 \textcolor{keywordtype}{void} EnableDefaultAutoLock ();}
-\DoxyCodeLine{105 \textcolor{keywordtype}{void} DisableDefaultAutoLock ();}
-\DoxyCodeLine{106 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{107 }
-\DoxyCodeLine{108 \textcolor{preprocessor}{ \#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{109 xbInt16 GetCreateMdxBlockSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{110 xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}
-\DoxyCodeLine{111 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{112 }
-\DoxyCodeLine{113 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{114 }
-\DoxyCodeLine{115 \textcolor{keywordtype}{void} SetEndianType ();}
+\DoxyCodeLine{87 \textcolor{preprocessor}{ \#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
+\DoxyCodeLine{88 xbInt16 GetUniqueKeyOpt () \textcolor{keyword}{const};}
+\DoxyCodeLine{89 xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );}
+\DoxyCodeLine{90 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{91 }
+\DoxyCodeLine{92 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{93 xbInt16 GetDefaultLockRetries () \textcolor{keyword}{const};}
+\DoxyCodeLine{94 \textcolor{keywordtype}{void} SetDefaultLockRetries ( xbInt16 iRetryCount );}
+\DoxyCodeLine{95 xbInt32 GetDefaultLockWait () \textcolor{keyword}{const};}
+\DoxyCodeLine{96 \textcolor{keywordtype}{void} SetDefaultLockWait ( xbInt32 lRetryWait );}
+\DoxyCodeLine{97 xbInt16 GetDefaultLockFlavor () \textcolor{keyword}{const};}
+\DoxyCodeLine{98 \textcolor{keywordtype}{void} SetDefaultLockFlavor ( xbInt16 iLockFlavor );}
+\DoxyCodeLine{99 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoLock () \textcolor{keyword}{const};}
+\DoxyCodeLine{100 \textcolor{keywordtype}{void} SetDefaultAutoLock ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAutoLock );}
+\DoxyCodeLine{101 \textcolor{keywordtype}{void} EnableDefaultAutoLock ();}
+\DoxyCodeLine{102 \textcolor{keywordtype}{void} DisableDefaultAutoLock ();}
+\DoxyCodeLine{103 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{104 }
+\DoxyCodeLine{105 \textcolor{preprocessor}{ \#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{106 xbInt16 GetCreateMdxBlockSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{107 xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}
+\DoxyCodeLine{108 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{109 }
+\DoxyCodeLine{110 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{111 }
+\DoxyCodeLine{112 \textcolor{keywordtype}{void} SetEndianType ();}
+\DoxyCodeLine{113 }
+\DoxyCodeLine{114 \textcolor{keyword}{static} xbInt16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{iEndianType}}; \textcolor{comment}{// B=Big Endian L=Little Endian}}
+\DoxyCodeLine{115 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{sNullString}}; \textcolor{comment}{// Null String}}
\DoxyCodeLine{116 }
-\DoxyCodeLine{117 \textcolor{keyword}{static} xbInt16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{iEndianType}}; \textcolor{comment}{// B=Big Endian L=Little Endian}}
-\DoxyCodeLine{118 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{sNullString}}; \textcolor{comment}{// Null String}}
+\DoxyCodeLine{117 }
+\DoxyCodeLine{118 \textcolor{keyword}{private}:}
\DoxyCodeLine{119 }
-\DoxyCodeLine{120 }
-\DoxyCodeLine{121 \textcolor{keyword}{private}:}
+\DoxyCodeLine{120 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultDateFormat;}
+\DoxyCodeLine{121 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDataDirectory; \textcolor{comment}{//Data file directory}}
\DoxyCodeLine{122 }
-\DoxyCodeLine{123 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultDateFormat;}
-\DoxyCodeLine{124 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDataDirectory; \textcolor{comment}{//Data file directory}}
-\DoxyCodeLine{125 }
-\DoxyCodeLine{126 \textcolor{preprocessor}{ \#ifdef XB\_LOGGING\_SUPPORT}}
-\DoxyCodeLine{127 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultLogDirectory; \textcolor{comment}{//Default location to store log files}}
-\DoxyCodeLine{128 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultLogFileName; \textcolor{comment}{//Default LogFileName}}
-\DoxyCodeLine{129 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{130 }
-\DoxyCodeLine{131 \textcolor{keyword}{static} xbInt16 iDefaultFileVersion; \textcolor{comment}{// 3 = DBase 3}}
-\DoxyCodeLine{132 \textcolor{comment}{// 4 = DBase 4}}
-\DoxyCodeLine{133 \textcolor{comment}{// default version used in CreateTable command}}
-\DoxyCodeLine{134 \textcolor{comment}{// can be over ridden at the Xbase level, or table level}}
-\DoxyCodeLine{135 \textcolor{comment}{// Different versions can be open simultaneously}}
-\DoxyCodeLine{136 }
-\DoxyCodeLine{137 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit; \textcolor{comment}{// Default dbf auto commit switch}}
-\DoxyCodeLine{138 }
-\DoxyCodeLine{139 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser; \textcolor{comment}{// True if multi user mode is turned on}}
-\DoxyCodeLine{140 \textcolor{comment}{// Turn this off for better performance in single user mode}}
-\DoxyCodeLine{141 \textcolor{comment}{// This needs to be turned on or off before any data tables are opened}}
-\DoxyCodeLine{142 \textcolor{comment}{// turning this on after tables are opened, can result in out of date}}
-\DoxyCodeLine{143 \textcolor{comment}{// file buffers if multiple users are sharing the files}}
-\DoxyCodeLine{144 }
-\DoxyCodeLine{145 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{146 \textcolor{keyword}{static} xbInt32 lDefaultLockWait; \textcolor{comment}{// Number of milliseconds between lock retries}}
-\DoxyCodeLine{147 \textcolor{keyword}{static} xbInt16 iDefaultLockRetries; \textcolor{comment}{// Number of times to retry a lock before conceding}}
-\DoxyCodeLine{148 \textcolor{keyword}{static} xbInt16 bDefaultAutoLock; \textcolor{comment}{// Autolocking enabled?}}
-\DoxyCodeLine{149 \textcolor{keyword}{static} xbInt16 iDefaultLockFlavor; \textcolor{comment}{// 1 = DBase}}
-\DoxyCodeLine{150 \textcolor{comment}{// 2 = Clipper -\/ not developed yet}}
-\DoxyCodeLine{151 \textcolor{comment}{// 3 = FoxPro -\/ not developed yet}}
-\DoxyCodeLine{152 \textcolor{comment}{// 9 = Xbase64 -\/ not developed yet}}
-\DoxyCodeLine{153 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{154 }
+\DoxyCodeLine{123 \textcolor{preprocessor}{ \#ifdef XB\_LOGGING\_SUPPORT}}
+\DoxyCodeLine{124 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultLogDirectory; \textcolor{comment}{//Default location to store log files}}
+\DoxyCodeLine{125 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultLogFileName; \textcolor{comment}{//Default LogFileName}}
+\DoxyCodeLine{126 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{127 }
+\DoxyCodeLine{128 \textcolor{keyword}{static} xbInt16 iDefaultFileVersion; \textcolor{comment}{// 3 = DBase 3}}
+\DoxyCodeLine{129 \textcolor{comment}{// 4 = DBase 4}}
+\DoxyCodeLine{130 \textcolor{comment}{// default version used in CreateTable command}}
+\DoxyCodeLine{131 \textcolor{comment}{// can be over ridden at the Xbase level, or table level}}
+\DoxyCodeLine{132 \textcolor{comment}{// Different versions can be open simultaneously}}
+\DoxyCodeLine{133 }
+\DoxyCodeLine{134 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit; \textcolor{comment}{// Default dbf auto commit switch}}
+\DoxyCodeLine{135 }
+\DoxyCodeLine{136 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser; \textcolor{comment}{// True if multi user mode is turned on}}
+\DoxyCodeLine{137 \textcolor{comment}{// Turn this off for better performance in single user mode}}
+\DoxyCodeLine{138 \textcolor{comment}{// This needs to be turned on or off before any data tables are opened}}
+\DoxyCodeLine{139 \textcolor{comment}{// turning this on after tables are opened, can result in out of date}}
+\DoxyCodeLine{140 \textcolor{comment}{// file buffers if multiple users are sharing the files}}
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{143 \textcolor{keyword}{static} xbInt32 lDefaultLockWait; \textcolor{comment}{// Number of milliseconds between lock retries}}
+\DoxyCodeLine{144 \textcolor{keyword}{static} xbInt16 iDefaultLockRetries; \textcolor{comment}{// Number of times to retry a lock before conceding}}
+\DoxyCodeLine{145 \textcolor{keyword}{static} xbInt16 bDefaultAutoLock; \textcolor{comment}{// Autolocking enabled?}}
+\DoxyCodeLine{146 \textcolor{keyword}{static} xbInt16 iDefaultLockFlavor; \textcolor{comment}{// 1 = DBase}}
+\DoxyCodeLine{147 \textcolor{comment}{// 2 = Clipper -\/ not developed yet}}
+\DoxyCodeLine{148 \textcolor{comment}{// 3 = FoxPro -\/ not developed yet}}
+\DoxyCodeLine{149 \textcolor{comment}{// 9 = Xbase64 -\/ not developed yet}}
+\DoxyCodeLine{150 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{151 }
+\DoxyCodeLine{152 }
+\DoxyCodeLine{153 }
+\DoxyCodeLine{154 \textcolor{preprocessor}{\#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
\DoxyCodeLine{155 }
-\DoxyCodeLine{156 }
-\DoxyCodeLine{157 \textcolor{preprocessor}{\#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
-\DoxyCodeLine{158 }
-\DoxyCodeLine{159 \textcolor{keyword}{static} xbInt16 iUniqueKeyOpt;}
-\DoxyCodeLine{160 }
-\DoxyCodeLine{161 \textcolor{comment}{// is one of:}}
-\DoxyCodeLine{162 \textcolor{comment}{// XB\_HALT\_ON\_DUPKEY}}
-\DoxyCodeLine{163 \textcolor{comment}{// XB\_EMULATE\_DBASE}}
+\DoxyCodeLine{156 \textcolor{keyword}{static} xbInt16 iUniqueKeyOpt;}
+\DoxyCodeLine{157 }
+\DoxyCodeLine{158 \textcolor{comment}{// is one of:}}
+\DoxyCodeLine{159 \textcolor{comment}{// XB\_HALT\_ON\_DUPKEY}}
+\DoxyCodeLine{160 \textcolor{comment}{// XB\_EMULATE\_DBASE}}
+\DoxyCodeLine{161 }
+\DoxyCodeLine{162 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{163 }
\DoxyCodeLine{164 }
-\DoxyCodeLine{165 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{166 }
-\DoxyCodeLine{167 }
-\DoxyCodeLine{168 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{169 \textcolor{keyword}{static} xbInt16 iCreateMdxBlockSize; \textcolor{comment}{// System level Mdx Block Size}}
-\DoxyCodeLine{170 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{171 }
+\DoxyCodeLine{165 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{166 \textcolor{keyword}{static} xbInt16 iCreateMdxBlockSize; \textcolor{comment}{// System level Mdx Block Size}}
+\DoxyCodeLine{167 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{168 }
+\DoxyCodeLine{169 }
+\DoxyCodeLine{170 }
+\DoxyCodeLine{171 \};}
\DoxyCodeLine{172 }
-\DoxyCodeLine{173 }
-\DoxyCodeLine{174 \};}
-\DoxyCodeLine{175 }
-\DoxyCodeLine{176 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{177 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSSV\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{173 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{174 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSSV\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbstring_8cpp.tex b/docs/doxygen/latex/xbstring_8cpp.tex
index 852e57f..0405be8 100644
--- a/docs/doxygen/latex/xbstring_8cpp.tex
+++ b/docs/doxygen/latex/xbstring_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbstring_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbstring.cpp File Reference}
-\label{xbstring_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbstring.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbstring.cpp}}
+\hypertarget{xbstring_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbstring.cpp File Reference}
+\label{xbstring_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbstring.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbstring.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbstring_8h.tex b/docs/doxygen/latex/xbstring_8h.tex
index 6e8f52b..5fe0d07 100644
--- a/docs/doxygen/latex/xbstring_8h.tex
+++ b/docs/doxygen/latex/xbstring_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbstring_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbstring.h File Reference}
-\label{xbstring_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbstring.h}}
+\hypertarget{xbstring_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbstring.h File Reference}
+\label{xbstring_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbstring.h}}
{\ttfamily \#include $<$stdlib.\+h$>$}\newline
{\ttfamily \#include $<$iostream$>$}\newline
\doxysubsection*{Data Structures}
diff --git a/docs/doxygen/latex/xbstring_8h_source.tex b/docs/doxygen/latex/xbstring_8h_source.tex
index b87d4d6..9f6ce21 100644
--- a/docs/doxygen/latex/xbstring_8h_source.tex
+++ b/docs/doxygen/latex/xbstring_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbstring_8h_source}{}\doxysection{xbstring.\+h}
-\label{xbstring_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbstring.h}}
+\label{xbstring_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbstring.h}}
\mbox{\hyperlink{xbstring_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbstring.h}}
@@ -79,8 +79,8 @@
\DoxyCodeLine{95 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Append(\textcolor{keywordtype}{char} c);}
\DoxyCodeLine{96 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen );}
\DoxyCodeLine{97 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *srcStr, xbUInt32 lStartPos );}
-\DoxyCodeLine{98 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 pos, xbUInt32 n );}
-\DoxyCodeLine{99 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 n );}
+\DoxyCodeLine{98 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 pos, xbUInt32 lCopyLen );}
+\DoxyCodeLine{99 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 lCopyLen );}
\DoxyCodeLine{100 }
\DoxyCodeLine{101 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} Copy() \textcolor{keyword}{const};}
\DoxyCodeLine{102 xbUInt32 CountChar( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
@@ -120,50 +120,51 @@
\DoxyCodeLine{136 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PutAt(xbUInt32 ulPos, \textcolor{keywordtype}{char} c);}
\DoxyCodeLine{137 }
\DoxyCodeLine{138 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Remove( xbUInt32 ulPos, xbUInt32 ulN );}
-\DoxyCodeLine{139 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Resize( xbUInt32 lSize );}
-\DoxyCodeLine{140 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Rtrim();}
-\DoxyCodeLine{141 }
-\DoxyCodeLine{142 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s );}
-\DoxyCodeLine{143 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
-\DoxyCodeLine{144 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 ulSize );}
-\DoxyCodeLine{145 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SetNum( xbInt32 lNum );}
-\DoxyCodeLine{146 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Sprintf(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *format, ...);}
-\DoxyCodeLine{147 }
-\DoxyCodeLine{148 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
-\DoxyCodeLine{149 \textcolor{keywordtype}{char} *strncpy( \textcolor{keywordtype}{char} * cDest, xbUInt32 n ) \textcolor{keyword}{const};}
-\DoxyCodeLine{150 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SwapChars( \textcolor{keywordtype}{char} from, \textcolor{keywordtype}{char} to );}
-\DoxyCodeLine{151 }
-\DoxyCodeLine{152 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToLowerCase();}
-\DoxyCodeLine{153 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToUpperCase();}
-\DoxyCodeLine{154 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Trim();}
-\DoxyCodeLine{155 }
-\DoxyCodeLine{156 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidLogicalValue() \textcolor{keyword}{const};}
-\DoxyCodeLine{157 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidNumericValue() \textcolor{keyword}{const};}
-\DoxyCodeLine{158 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapChar( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{159 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapLeadingChar( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{160 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapTrailingChar( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{161 }
-\DoxyCodeLine{162 \textcolor{keyword}{friend} std::ostream\& \mbox{\hyperlink{namespacexb_ad27f348219e895c44f74addba8e1889a}{operator<< }}( std::ostream\& os, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& s );}
-\DoxyCodeLine{163 }
-\DoxyCodeLine{164 \textcolor{keyword}{private}:}
-\DoxyCodeLine{165 }
-\DoxyCodeLine{166 \textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * NullString;}
-\DoxyCodeLine{167 \textcolor{keyword}{static} \textcolor{keywordtype}{char} cJunkBuf;}
-\DoxyCodeLine{168 }
-\DoxyCodeLine{169 \textcolor{keywordtype}{char} *data; \textcolor{comment}{// pointer to actual string data}}
-\DoxyCodeLine{170 xbUInt32 size; \textcolor{comment}{// size of string plus null terminating byte}}
-\DoxyCodeLine{171 }
-\DoxyCodeLine{172 \textcolor{keywordtype}{void} ctor(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
-\DoxyCodeLine{173 \textcolor{comment}{// xbUInt32 CalcSprintfBufSize(const char *format, ...);}}
-\DoxyCodeLine{174 }
-\DoxyCodeLine{175 \textcolor{comment}{// char * xb\_realloc( char *pIn, xbUInt32 iLen );}}
-\DoxyCodeLine{176 }
-\DoxyCodeLine{177 \textcolor{comment}{// next routine could result in buffer over runs if used with improperly sized buffers}}
-\DoxyCodeLine{178 \textcolor{keywordtype}{char} * xb\_strcpy ( \textcolor{keywordtype}{char} *target, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *source);}
-\DoxyCodeLine{179 }
-\DoxyCodeLine{180 \};}
-\DoxyCodeLine{181 }
-\DoxyCodeLine{182 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{183 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBSTRING\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{139 \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{140 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Resize( xbUInt32 lSize );}
+\DoxyCodeLine{141 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Rtrim();}
+\DoxyCodeLine{142 }
+\DoxyCodeLine{143 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s );}
+\DoxyCodeLine{144 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
+\DoxyCodeLine{145 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 ulSize );}
+\DoxyCodeLine{146 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SetNum( xbInt32 lNum );}
+\DoxyCodeLine{147 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Sprintf(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *format, ...);}
+\DoxyCodeLine{148 }
+\DoxyCodeLine{149 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
+\DoxyCodeLine{150 \textcolor{keywordtype}{char} *strncpy( \textcolor{keywordtype}{char} * cDest, xbUInt32 n ) \textcolor{keyword}{const};}
+\DoxyCodeLine{151 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SwapChars( \textcolor{keywordtype}{char} from, \textcolor{keywordtype}{char} to );}
+\DoxyCodeLine{152 }
+\DoxyCodeLine{153 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToLowerCase();}
+\DoxyCodeLine{154 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToUpperCase();}
+\DoxyCodeLine{155 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Trim();}
+\DoxyCodeLine{156 }
+\DoxyCodeLine{157 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidLogicalValue() \textcolor{keyword}{const};}
+\DoxyCodeLine{158 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidNumericValue() \textcolor{keyword}{const};}
+\DoxyCodeLine{159 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapChar( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{160 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapLeadingChar( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{161 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapTrailingChar( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{162 }
+\DoxyCodeLine{163 \textcolor{keyword}{friend} std::ostream\& \mbox{\hyperlink{namespacexb_ad27f348219e895c44f74addba8e1889a}{operator<< }}( std::ostream\& os, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& s );}
+\DoxyCodeLine{164 }
+\DoxyCodeLine{165 \textcolor{keyword}{private}:}
+\DoxyCodeLine{166 }
+\DoxyCodeLine{167 \textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * NullString;}
+\DoxyCodeLine{168 \textcolor{keyword}{static} \textcolor{keywordtype}{char} cJunkBuf;}
+\DoxyCodeLine{169 }
+\DoxyCodeLine{170 \textcolor{keywordtype}{char} *data; \textcolor{comment}{// pointer to actual string data}}
+\DoxyCodeLine{171 xbUInt32 size; \textcolor{comment}{// size of string plus null terminating byte}}
+\DoxyCodeLine{172 }
+\DoxyCodeLine{173 \textcolor{keywordtype}{void} ctor(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
+\DoxyCodeLine{174 \textcolor{comment}{// xbUInt32 CalcSprintfBufSize(const char *format, ...);}}
+\DoxyCodeLine{175 }
+\DoxyCodeLine{176 \textcolor{comment}{// char * xb\_realloc( char *pIn, xbUInt32 iLen );}}
+\DoxyCodeLine{177 }
+\DoxyCodeLine{178 \textcolor{comment}{// next routine could result in buffer over runs if used with improperly sized buffers}}
+\DoxyCodeLine{179 \textcolor{keywordtype}{char} * xb\_strcpy ( \textcolor{keywordtype}{char} *target, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *source);}
+\DoxyCodeLine{180 }
+\DoxyCodeLine{181 \};}
+\DoxyCodeLine{182 }
+\DoxyCodeLine{183 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{184 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBSTRING\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbtag_8cpp.tex b/docs/doxygen/latex/xbtag_8cpp.tex
index 9b867a3..2166160 100644
--- a/docs/doxygen/latex/xbtag_8cpp.tex
+++ b/docs/doxygen/latex/xbtag_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbtag_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbtag.cpp File Reference}
-\label{xbtag_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbtag.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbtag.cpp}}
+\hypertarget{xbtag_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbtag.cpp File Reference}
+\label{xbtag_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbtag.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbtag.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbtag_8h.tex b/docs/doxygen/latex/xbtag_8h.tex
index 4ef8990..b82a5ea 100644
--- a/docs/doxygen/latex/xbtag_8h.tex
+++ b/docs/doxygen/latex/xbtag_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbtag_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbtag.h File Reference}
-\label{xbtag_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtag.h}}
+\hypertarget{xbtag_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbtag.h File Reference}
+\label{xbtag_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtag.h}}
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbtag_8h_source.tex b/docs/doxygen/latex/xbtag_8h_source.tex
index 605c6f3..4bb9c2c 100644
--- a/docs/doxygen/latex/xbtag_8h_source.tex
+++ b/docs/doxygen/latex/xbtag_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbtag_8h_source}{}\doxysection{xbtag.\+h}
-\label{xbtag_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtag.h}}
+\label{xbtag_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtag.h}}
\mbox{\hyperlink{xbtag_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbtag.h}}
diff --git a/docs/doxygen/latex/xbtblmgr_8cpp.tex b/docs/doxygen/latex/xbtblmgr_8cpp.tex
index 8c83985..0374c27 100644
--- a/docs/doxygen/latex/xbtblmgr_8cpp.tex
+++ b/docs/doxygen/latex/xbtblmgr_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbtblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbtblmgr.cpp File Reference}
-\label{xbtblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbtblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbtblmgr.cpp}}
+\hypertarget{xbtblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbtblmgr.cpp File Reference}
+\label{xbtblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbtblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbtblmgr.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbtblmgr_8h.tex b/docs/doxygen/latex/xbtblmgr_8h.tex
index 494f1f9..23668f6 100644
--- a/docs/doxygen/latex/xbtblmgr_8h.tex
+++ b/docs/doxygen/latex/xbtblmgr_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbtblmgr_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbtblmgr.h File Reference}
-\label{xbtblmgr_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtblmgr.h}}
+\hypertarget{xbtblmgr_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbtblmgr.h File Reference}
+\label{xbtblmgr_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtblmgr.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbtblmgr_8h_source.tex b/docs/doxygen/latex/xbtblmgr_8h_source.tex
index 4e43990..83a37a7 100644
--- a/docs/doxygen/latex/xbtblmgr_8h_source.tex
+++ b/docs/doxygen/latex/xbtblmgr_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbtblmgr_8h_source}{}\doxysection{xbtblmgr.\+h}
-\label{xbtblmgr_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtblmgr.h}}
+\label{xbtblmgr_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtblmgr.h}}
\mbox{\hyperlink{xbtblmgr_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbtblmgr.h}}
@@ -43,25 +43,26 @@
\DoxyCodeLine{39 \textcolor{keyword}{public}:}
\DoxyCodeLine{40 \mbox{\hyperlink{classxb_1_1xbTblMgr}{xbTblMgr}}();}
\DoxyCodeLine{41 \mbox{\hyperlink{classxb_1_1xbTblMgr}{\string~xbTblMgr}}();}
-\DoxyCodeLine{42 xbInt16 AddTblToTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblName );}
-\DoxyCodeLine{43 xbInt16 AddTblToTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias );}
-\DoxyCodeLine{44 xbInt16 DisplayTableList () \textcolor{keyword}{const};}
-\DoxyCodeLine{45 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * GetDbfPtr ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias ) \textcolor{keyword}{const};}
-\DoxyCodeLine{46 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * GetDbfPtr ( xbInt16 sItemNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{47 xbInt16 GetOpenTableCount () \textcolor{keyword}{const};}
-\DoxyCodeLine{48 xbInt16 RemoveTblFromTblList ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias );}
-\DoxyCodeLine{49 xbInt16 RemoveTblFromTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d );}
-\DoxyCodeLine{50 }
-\DoxyCodeLine{51 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{52 }
-\DoxyCodeLine{53 \textcolor{keyword}{private}:}
-\DoxyCodeLine{54 \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}} * TblList; \textcolor{comment}{// List of open database tables}}
-\DoxyCodeLine{55 xbInt16 iOpenTableCount; \textcolor{comment}{// Number of open tables}}
-\DoxyCodeLine{56 }
-\DoxyCodeLine{57 \};}
-\DoxyCodeLine{58 }
-\DoxyCodeLine{59 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{60 }
-\DoxyCodeLine{61 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBMGR\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{42 xbInt16 AddTblToTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblName );}
+\DoxyCodeLine{43 xbInt16 AddTblToTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias );}
+\DoxyCodeLine{44 xbInt16 DisplayTableList () \textcolor{keyword}{const};}
+\DoxyCodeLine{45 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * GetDbfPtr ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias ) \textcolor{keyword}{const};}
+\DoxyCodeLine{46 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * GetDbfPtr ( xbInt16 sItemNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{47 \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}} * GetTblListEntry ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d );}
+\DoxyCodeLine{48 xbInt16 GetOpenTableCount () \textcolor{keyword}{const};}
+\DoxyCodeLine{49 xbInt16 RemoveTblFromTblList ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTblAlias );}
+\DoxyCodeLine{50 xbInt16 RemoveTblFromTblList ( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} *d );}
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{53 }
+\DoxyCodeLine{54 \textcolor{keyword}{private}:}
+\DoxyCodeLine{55 \mbox{\hyperlink{structxb_1_1xbTblList}{xbTblList}} * TblList; \textcolor{comment}{// List of open database tables}}
+\DoxyCodeLine{56 xbInt16 iOpenTableCount; \textcolor{comment}{// Number of open tables}}
+\DoxyCodeLine{57 }
+\DoxyCodeLine{58 \};}
+\DoxyCodeLine{59 }
+\DoxyCodeLine{60 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{61 }
+\DoxyCodeLine{62 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBMGR\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbtypes_8h.tex b/docs/doxygen/latex/xbtypes_8h.tex
index fb4d143..48c0ade 100644
--- a/docs/doxygen/latex/xbtypes_8h.tex
+++ b/docs/doxygen/latex/xbtypes_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbtypes_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbtypes.h File Reference}
-\label{xbtypes_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtypes.h}}
+\hypertarget{xbtypes_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbtypes.h File Reference}
+\label{xbtypes_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtypes.h}}
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbtypes_8h_source.tex b/docs/doxygen/latex/xbtypes_8h_source.tex
index 61b6d34..4a76695 100644
--- a/docs/doxygen/latex/xbtypes_8h_source.tex
+++ b/docs/doxygen/latex/xbtypes_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbtypes_8h_source}{}\doxysection{xbtypes.\+h}
-\label{xbtypes_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbtypes.h}}
+\label{xbtypes_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbtypes.h}}
\mbox{\hyperlink{xbtypes_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbtypes.h}}
diff --git a/docs/doxygen/latex/xbuda_8cpp.tex b/docs/doxygen/latex/xbuda_8cpp.tex
index 26c239e..ff9f678 100644
--- a/docs/doxygen/latex/xbuda_8cpp.tex
+++ b/docs/doxygen/latex/xbuda_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbuda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbuda.cpp File Reference}
-\label{xbuda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbuda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbuda.cpp}}
+\hypertarget{xbuda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbuda.cpp File Reference}
+\label{xbuda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbuda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbuda.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbuda_8h.tex b/docs/doxygen/latex/xbuda_8h.tex
index d8e1907..5162f27 100644
--- a/docs/doxygen/latex/xbuda_8h.tex
+++ b/docs/doxygen/latex/xbuda_8h.tex
@@ -1,2 +1,2 @@
-\hypertarget{xbuda_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbuda.h File Reference}
-\label{xbuda_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbuda.h}}
+\hypertarget{xbuda_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbuda.h File Reference}
+\label{xbuda_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbuda.h}}
diff --git a/docs/doxygen/latex/xbuda_8h_source.tex b/docs/doxygen/latex/xbuda_8h_source.tex
index 7438671..5f61588 100644
--- a/docs/doxygen/latex/xbuda_8h_source.tex
+++ b/docs/doxygen/latex/xbuda_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbuda_8h_source}{}\doxysection{xbuda.\+h}
-\label{xbuda_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbuda.h}}
+\label{xbuda_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbuda.h}}
\mbox{\hyperlink{xbuda_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbuda.h}}
diff --git a/docs/doxygen/latex/xbxbase_8cpp.tex b/docs/doxygen/latex/xbxbase_8cpp.tex
index c803e2f..21bbba9 100644
--- a/docs/doxygen/latex/xbxbase_8cpp.tex
+++ b/docs/doxygen/latex/xbxbase_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbxbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/core/xbxbase.cpp File Reference}
-\label{xbxbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbxbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/core/xbxbase.cpp}}
+\hypertarget{xbxbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/core/xbxbase.cpp File Reference}
+\label{xbxbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbxbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/core/xbxbase.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbxbase_8h.tex b/docs/doxygen/latex/xbxbase_8h.tex
index 0a1702e..d6e686c 100644
--- a/docs/doxygen/latex/xbxbase_8h.tex
+++ b/docs/doxygen/latex/xbxbase_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbxbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.2/src/include/xbxbase.h File Reference}
-\label{xbxbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbxbase.h}}
+\hypertarget{xbxbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.0.3/src/include/xbxbase.h File Reference}
+\label{xbxbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbxbase.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbxbase_8h_source.tex b/docs/doxygen/latex/xbxbase_8h_source.tex
index fb56397..5917849 100644
--- a/docs/doxygen/latex/xbxbase_8h_source.tex
+++ b/docs/doxygen/latex/xbxbase_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbxbase_8h_source}{}\doxysection{xbxbase.\+h}
-\label{xbxbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.2/src/include/xbxbase.h}}
+\label{xbxbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.0.3/src/include/xbxbase.h}}
\mbox{\hyperlink{xbxbase_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbxbase.h}}
diff --git a/docs/howto/AddNewMemoFileType.txt b/docs/howto/AddNewMemoFileType.txt
new file mode 100755
index 0000000..a784d69
--- /dev/null
+++ b/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/docs/html/Xbase64ClassDiagram.jpg b/docs/html/Xbase64ClassDiagram.jpg
new file mode 100755
index 0000000..81bb539
--- /dev/null
+++ b/docs/html/Xbase64ClassDiagram.jpg
Binary files differ
diff --git a/docs/html/gpl-3.0.txt b/docs/html/gpl-3.0.txt
new file mode 100755
index 0000000..94a9ed0
--- /dev/null
+++ b/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/docs/html/index.htm b/docs/html/index.htm
deleted file mode 100755
index 3c992f5..0000000
--- a/docs/html/index.htm
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML><TITLE>Xbase DBMS Documentation Table of Contents</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Xbase DBMS<br>
-Last Updated 11/21/22<br>Version 4.x.x</p></H1>
-<h2>Documentation Table Of Contents</h2>
-<h3>Section 1 - Xbase Concepts</h3>
-<h4>
-<A HREF="xbc1.htm">Chapter 1 - Getting Started</A><br>
-<A HREF="xbc2.htm">Chapter 2 - Database Overview</A><br>
-<A HREF="xbc3.htm">Chapter 3 - Fields and Strings</A><br>
-<A HREF="xbc4.htm">Chapter 4 - Date Processing</A><br>
-<A HREF="xbc5.htm">Chapter 5 - Expression Handling</A><br>
-<A HREF="xbc6.htm">Chapter 6 - Index Overview</A><br>
-<A HREF="xbc7.htm">Chapter 7 - NDX (DBase) Indices</A><br>
-<A HREF="xbc8.htm">Chapter 8 - MDX (DBase) Indices</A><br>
-<A HREF="xbc9.htm">Chapter 9 - NTX (Clipper) Indices</A><br>
-<A HREF="xbc10.htm">Chapter 10 - CDX (FoxPro) Indices</A><br>
-<A HREF="xbc11.htm">Chapter 11 - IDX (FoxPro) Indices</A><br>
-<A HREF="xbc12.htm">Chapter 12 - Record and File Locking</A><br>
-<A HREF="xbc13.htm">Chapter 13 - Logfile Support</A><br>
-<A HREF="xbc14.htm">Chapter 14 - SQL Support</A><br>
-<A HREF="xbc15.htm">Chapter 15 - Utility programs</A><br>
-
-</h4>
-<h3>Section 3 - Appendices</h3>
-<h4>
-<A HREF="copying.lib">Appendix C - GPL Library License</A><br>
-<A HREF="xbbib.htm">Appendix D - Bibliography</A><br>
-</h4>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/index.html b/docs/html/index.html
new file mode 100755
index 0000000..098c7ea
--- /dev/null
+++ b/docs/html/index.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML><TITLE>Xbase DBMS Documentation Table of Contents</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H1><p align="center">Xbase DBMS<br>
+Last Updated 12/21/22<br>Version 4.0.3</p></H1>
+<h2>Documentation Table Of Contents</h2>
+<h3>Section 1 - Xbase Concepts</h3>
+<h4>
+<A HREF="xbc1.html">Chapter 1 - Getting Started</A><br>
+<A HREF="xbc2.html">Chapter 2 - Database Overview</A><br>
+<A HREF="xbc3.html">Chapter 3 - Fields and Strings</A><br>
+<A HREF="xbc4.html">Chapter 4 - Date Processing</A><br>
+<A HREF="xbc5.html">Chapter 5 - Expression Handling</A><br>
+<A HREF="xbc6.html">Chapter 6 - Index Overview</A><br>
+<A HREF="xbc7.html">Chapter 7 - NDX (DBase) Indices</A><br>
+<A HREF="xbc8.html">Chapter 8 - MDX (DBase) Indices</A><br>
+<A HREF="xbc9.html">Chapter 9 - NTX (Clipper) Indices</A><br>
+<A HREF="xbc10.html">Chapter 10 - CDX (FoxPro) Indices</A><br>
+<A HREF="xbc11.html">Chapter 11 - IDX (FoxPro) Indices</A><br>
+<A HREF="xbc12.html">Chapter 12 - Record and File Locking</A><br>
+<A HREF="xbc13.html">Chapter 13 - Logfile Support</A><br>
+<A HREF="xbc14.html">Chapter 14 - SQL Support</A><br>
+
+
+</h4>
+<h3>Section 2 - Classes and Objects</h3>
+<h4>
+<A HREF="xbc15.html">Chapter 15 - General Class Information</A><br>
+
+</h4>
+<h3>Section 3 - Appendices</h3>
+<h4>
+<A HREF="gpl-3.0.txt">Appendix A - GPL Library License</A><br>
+<A HREF="xbab.html">Appendix B - Bibliography</A><br>
+<A HREF="xbac.html">Appendix C - Library Build Options</A><br>
+<A HREF="xbad.html">Appendix D - File Types</A><br>
+<A HREF="xbae.html">Appendix E - Error Codes</A><br>
+<A HREF="xbaf.html">Appendix F - Utility and Example Programs</A><br>
+
+</h4>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/docs/html/xbbib.htm b/docs/html/xbab.html
index 70e4e82..809c2ea 100755
--- a/docs/html/xbbib.htm
+++ b/docs/html/xbab.html
@@ -3,7 +3,7 @@
<TITLE>Xbase DBMS Bibliography</TITLE>
<BODY BGCOLOR=#FFFFFF>
<H1><p align="center">Xbase DBMS Bibliography</p></H1>
-<p align="center">Page Updated 2/1/99</p><hr>
+<p align="center">Page Updated 12/9/22</p><hr>
Bachman, Erik<br>
Xbase File Format Description / Erik Bachman, Roskilde, Denmark: Clickety
@@ -59,5 +59,11 @@ The Draft Standard C++ Library by P.J. Plauger, Prentice Hall, New Jersey,
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/docs/html/xbac.html b/docs/html/xbac.html
new file mode 100755
index 0000000..0b0fb0b
--- /dev/null
+++ b/docs/html/xbac.html
@@ -0,0 +1,102 @@
+<!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 12/09/22</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</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>
+</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 from the library when the XB_DEBUG_OPTION is turned on. They
+are mainly used for library debugging purposes and can be safely left turned off.<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>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>
+</table></center>
+
+
+<br><hr><br><br>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/docs/html/xbad.html b/docs/html/xbad.html
new file mode 100755
index 0000000..7356b7b
--- /dev/null
+++ b/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/docs/html/xbae.html b/docs/html/xbae.html
new file mode 100755
index 0000000..5f1dce6
--- /dev/null
+++ b/docs/html/xbae.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Appendix E</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Eror Codes</p></H2>
+<p align="center">Chapter Updated 12/09/22</p><hr>
+
+<h3>Error Codes and Error Processing</h3>
+
+Alomost all Xbase64 methods and functions return and xbInt16 return code, which is zero or positive on success and negative
+if an error condition occurs.
+<br><br>
+As of the 4.x.x release, the library has been extensively updated to use exception processing and most error
+conditions will result in a mesage written to the logfile if logfile processing is enabled. The error routines
+typically write two values to the logfile, an error code value and an iErrorStop value which identifies where
+exactly in the library code the error occurred.
+<br><br>
+Error codes are defined in the xbretcod.h file.<br><br><br>
+
+
+<TR><TH>File Type</TH><TH>Description</TH></TR>
+<TR><TD>*.DBF</TD><TD>Main database file or Table</TD></TR>
+<TR><TD>*.DBT</TD><TD>Memo file data</TD></TR>
+<TR><TD>*.INF</TD><TD>INF - Behave like MS ODBC File. Used to auto open NDX index file</TD></TR>
+<TR><TD>*.MDX</TD><TD>Production V4 index file, contains up to 47 tags. Automatically opened.</TD></TR>
+<TR><TD>*.NDX</TD><TD>Non production V3 index files. Contains one tag per file. Automatically opened if included in ocrreespondin INF file.</TD></TR>
+
+
+<br><br><br>
+<table >
+<TABLE BORDER>
+<TR VALIGN="BASELINE">
+<TR><TH>Description</TH><TH>Error Code</TH><TH>Category</TH></TR>
+<TR><TD> XB_NO_ERROR </TD><TD> 0 </TD><TD> general </TD></TR>
+<TR><TD> XB_NO_MEMORY </TD><TD> -100 </TD><TD> general </TD></TR>
+<TR><TD> XB_INVALID_OPTION </TD><TD> -101 </TD><TD> general </TD></TR>
+<TR><TD> XB_DUP_TABLE_OR_ALIAS </TD><TD> -110 </TD><TD> table manager </TD></TR>
+<TR><TD> XB_INVALID_NODELINK </TD><TD> -120 </TD><TD> linklist </TD></TR>
+<TR><TD> XB_KEY_NOT_UNIQUE </TD><TD> -121 </TD><TD> linklist </TD></TR>
+<TR><TD> XB_FILE_EXISTS </TD><TD> -200 </TD><TD> file </TD></TR>
+<TR><TD> XB_ALREADY_OPEN </TD><TD> -201 </TD><TD> file </TD></TR>
+<TR><TD> XB_DBF_FILE_NOT_OPEN </TD><TD> -202 </TD><TD> file </TD></TR>
+<TR><TD> XB_FILE_NOT_FOUND </TD><TD> -203 </TD><TD> file </TD></TR>
+<TR><TD> XB_FILE_TYPE_NOT_SUPPORTED</TD><TD> -204 </TD><TD> file </TD></TR>
+<TR><TD> XB_RENAME_ERROR </TD><TD> -205 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_OBJECT </TD><TD> -206 </TD><TD> file </TD></TR>
+<TR><TD> XB_NOT_OPEN </TD><TD> -207 </TD><TD> file </TD></TR>
+<TR><TD> XB_NOT_FOUND </TD><TD> -208 </TD><TD> file </TD></TR>
+<TR><TD> XB_OPEN_ERROR </TD><TD> -209 </TD><TD> file </TD></TR>
+<TR><TD> XB_CLOSE_ERROR </TD><TD> -210 </TD><TD> file </TD></TR>
+<TR><TD> XB_SEEK_ERROR </TD><TD> -211 </TD><TD> file </TD></TR>
+<TR><TD> XB_READ_ERROR </TD><TD> -212 </TD><TD> file </TD></TR>
+<TR><TD> XB_WRITE_ERROR </TD><TD> -213 </TD><TD> file </TD></TR>
+<TR><TD> XB_EOF </TD><TD> -214 </TD><TD> file </TD></TR>
+<TR><TD> XB_BOF </TD><TD> -215 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_BLOCK_SIZE </TD><TD> -216 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_BLOCK_NO </TD><TD> -217 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_RECORD </TD><TD> -218 </TD><TD> file </TD></TR>
+<TR><TD> XB_DELETE_FAILED </TD><TD> -219 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_TABLE_NAME </TD><TD> -220 </TD><TD> file </TD></TR>
+<TR><TD> XB_EMPTY </TD><TD> -221 </TD><TD> file </TD></TR>
+<TR><TD> XB_LIMIT_REACHED </TD><TD> -222 </TD><TD> file </TD></TR>
+<TR><TD> XB_INVALID_FIELD_TYPE </TD><TD> -300 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_FIELD_NO </TD><TD> -301 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_DATA </TD><TD> -302 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_FIELD_NAME </TD><TD> -303 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_MEMO_FIELD </TD><TD> -304 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_FIELD </TD><TD> -305 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_FIELD_LEN </TD><TD> -306 </TD><TD> field </TD></TR>
+<TR><TD> XB_INVALID_DATE </TD><TD> -307 </TD><TD> date field </TD></TR>
+<TR><TD> XB_INVALID_LOCK_OPTION </TD><TD> -400 </TD><TD> lock </TD></TR>
+<TR><TD> XB_LOCK_FAILED </TD><TD> -401 </TD><TD> lock </TD></TR>
+<TR><TD> XB_TABLE_NOT_LOCKED </TD><TD> -402 </TD><TD> lock - need table locked for operation </TD></TR>
+<TR><TD> XB_PARSE_ERROR </TD><TD> -500 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INVALID_FUNCTION </TD><TD> -501 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INVALID_PARM </TD><TD> -502 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INCONSISTENT_PARM_LENS </TD><TD> -503 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INCOMPATIBLE_OPERANDS </TD><TD> -504 </TD><TD> expression </TD></TR>
+<TR><TD> XB_UNBALANCED_PARENS </TD><TD> -505 </TD><TD> expression </TD></TR>
+<TR><TD> XB_UNBALANCED_QUOTES </TD><TD> -506 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INVALID_EXPRESSION </TD><TD> -507 </TD><TD> expression </TD></TR>
+<TR><TD> XB_INVALID_KEYNO </TD><TD> -600 </TD><TD> index </TD></TR>
+<TR><TD> XB_INVALID_INDEX </TD><TD> -601 </TD><TD> index file error </TD></TR>
+<TR><TD> XB_INVALID_TAG </TD><TD> -602 </TD><TD> invalid index tag name, must be <= 10 bytes </TD></TR>
+<TR><TD> XB_INVALID_PAGE </TD><TD> -603 </TD><TD> invalid index page </TD></TR>
+<TR><TD> XB_SYNTAX_ERROR </TD><TD> -700 </TD><TD> sql syntax error </TD></TR>
+</TABLE>
+
+
+
+<br><hr><br>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/docs/html/xbc15.htm b/docs/html/xbaf.html
index 89bab09..110db7b 100755
--- a/docs/html/xbc15.htm
+++ b/docs/html/xbaf.html
@@ -3,11 +3,25 @@
<TITLE>Xbase DBMS Chapter 15</TITLE>
<BODY BGCOLOR=#FFFFFF>
<H1><p align=center>Sample Programs</p></H1>
-<p align=center>Page Updated 11/30/22</p><hr><br><br>
-Sample Xbase DBMS programs include in the library.<br><br>
+<p align=center>Page Updated 12/20/22</p><hr><br><br>
+
<CENTER>
<TABLE BORDER>
-<CAPTION ALIGN=TOP><H3>XBase Sample Programs</H3></CAPTION>
+<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
@@ -16,18 +30,15 @@ Sample Xbase DBMS programs include in the library.<br><br>
<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 X-Base file
-<TR><TH ALIGN=LEFT>xb_ex_string<TD>Example string program
-<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
+<TR><TH ALIGN=LEFT>xb_dumprecs<TD>This program dumps records for an XBase file
<TR><TH ALIGN=LEFT>xb_execsql<TD>This program executes SQL statements
<TR><TH ALIGN=LEFT>xb_pack<TD>This program packs (removes deleted records) from a DBF database file
<TR><TH ALIGN=LEFT>xb_undelall<TD>This program undeletes all deleted records in a dbf file
<TR><TH ALIGN=LEFT>xb_zap<TD>This program removes all records from a DBF file
</TABLE></CENTER>
<br><br>
+
+
<hr>
<p><img src="xbase.jpg"><br><hr>
</BODY>
diff --git a/docs/html/xbc1.htm b/docs/html/xbc1.html
index bb04aec..c07e5f6 100755
--- a/docs/html/xbc1.htm
+++ b/docs/html/xbc1.html
@@ -4,7 +4,7 @@
<BODY BGCOLOR=#FFFFFF>
<h1><p align="center">Getting Started</p></h1>
-<p align="center">Chapter Updated 11/21/22</p>
+<p align="center">Chapter Updated 12/09/22</p>
<hr><h2>Overview</h2>
@@ -25,7 +25,7 @@ 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 strenghen error
+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>
@@ -35,6 +35,20 @@ and that code will be re-incorporated into the latest version in the
future.
+<br><br>
+<B>Why use the Xbase library? </B>
+The DBF file format is a ubiquitous industry standard with
+widespread usage and application. Using this standard file format removes any
+<em>vender specific</em> locks that bind you to a particular platform.
+Additionally, with Xbase64 only the options needed can be compiled into or out of the library
+to provide a custom configuration specific to project requirements.
+For a small footprint, locking, memo fields and indices could be excluded from
+the library build which would reduce the library size.
+This tool is usefull for small to medium sized apps that don't need all the
+overhead, sophistication and cost of a complex client server configuration.
+The Xbase library is designed to be flexible in which options can be compiled
+into or out fo the library and also which environments it can be run on.
+
<br><br><br>
@@ -71,6 +85,7 @@ Xbase64 defines the following field types:<br><br><br>
<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
@@ -178,8 +193,7 @@ 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><br>
-
+<hr><br>
<p><img src=xbase.jpg><br><hr>
</BODY>
</HTML>
diff --git a/docs/html/xbc10.htm b/docs/html/xbc10.html
index 04f5158..04f5158 100755
--- a/docs/html/xbc10.htm
+++ b/docs/html/xbc10.html
diff --git a/docs/html/xbc11.htm b/docs/html/xbc11.html
index 4230f3f..4230f3f 100755
--- a/docs/html/xbc11.htm
+++ b/docs/html/xbc11.html
diff --git a/docs/html/xbc12.htm b/docs/html/xbc12.html
index f9fe114..a40c7e0 100755
--- a/docs/html/xbc12.htm
+++ b/docs/html/xbc12.html
@@ -1,9 +1,9 @@
<!DOCTYPE HTML PUBLIC>
<HTML>
-<TITLE>Xbase DBMS Chapter 8</TITLE>
+<TITLE>Xbase DBMS Chapter 12</TITLE>
<BODY BGCOLOR=#FFFFFF>
<H1><p align="center">Record and File Locking</p></H1>
-<p align="center">Chapter Updated 11/29/22</p><hr>
+<p align="center">Chapter Updated 12/13/22</p><hr>
<h3>Locking Overview</h3>
@@ -15,9 +15,12 @@ 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().
-
-Locking can also be enabled / disabled at the table level with with xbDbf::SetAutoLock().
-
+<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.
@@ -55,17 +58,28 @@ be simultaneously opened with a program on the Unix box. That could cause some
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>
-<h4>oplocks = no</h4>
+<br>
+[sharename]<br>
+oplocks = False<br>
+level2 oplocks = False
+
+
+<br><h3>iLockFlavor</h3>
+
+The library was constructed in a manner so that it could be updated to support alternate lock "flavors".
+The 4.x.x library is built to mirror the DBase locking, but the structure is in place to expand to other locking
+types if needed.
-<br>
+<br><br><br>
<hr><br>
<p><img src="xbase.jpg"><br><hr>
</BODY>
diff --git a/docs/html/xbc13.htm b/docs/html/xbc13.html
index 9f51a85..9f51a85 100755
--- a/docs/html/xbc13.htm
+++ b/docs/html/xbc13.html
diff --git a/docs/html/xbc14.htm b/docs/html/xbc14.htm
deleted file mode 100755
index fdcf949..0000000
--- a/docs/html/xbc14.htm
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 14</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">CDX Indices</p></H2>
-<p align="center">Chapter Updated 11/30/22</p><hr>
-
-<h3>Pending SQL module development.</h3>
-
-<hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc14.html b/docs/html/xbc14.html
new file mode 100755
index 0000000..2c086df
--- /dev/null
+++ b/docs/html/xbc14.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 14</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">CDX Indices</p></H2>
+<p align="center">Chapter Updated 12/08/22</p><hr>
+
+<h3>SQL Command Status</h3>
+
+Development of SQL support is still underway and very preliminary. As of the 4.0.3 version, the following SQL commands
+are available.<br><br>
+The SQL commands are modeled after industry standard SQL specifications and do what you would expect an SQL command to do.
+<br>
+Use of <em>[brackets]</em> in this chapter identifies optional components of a given command.
+<br><br>
+<hr>
+<h3>ALTER TABLE</h3>
+Expected format:<br>
+ALTER TABLE tablename.DBF RENAME TO newtablename.DBF
+<br><br>
+<hr>
+<h3>CREATE INDEX</h3>
+Expected format to create an Dbase 3, NDX index:<br>
+CREATE INDEX ixname.NDX ON tablename.dbf ( EXPRESSION ) [ASSOCIATE]
+
+<br><br>
+Expected format to create an Dbase 4, tag on an MDX index:<br>
+CREATE [UNIQUE] INDEX tagname ON tablename.DBF ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()]
+
+<br><br>
+The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate non production (NDX) index file to a dbf
+file so it will be automatically opened with the dbf file whenever the dbf file is opened by the xbase64 routines.
+<br><br>
+The [ASSOCIATE] parameter is not used with MDX production indices
+<br><br>
+Xbase first looks for ".NDX" in the file name to determine if an NDX index should be created.
+If .NDX is not in the filename, it looks in the uda for "IXTYPE" for either NDX or MDX to
+detmermine the index type to create. if IXTYPE is not found, it creates an MDX tag.
+<br><br>
+The optional DESC parameter defines an entire index key as descending. This is
+different than other SQL implementations where specific fields can be descending.
+<br><br>
+The optional FILTER parameter is specific to the XBASE64 library, is it used to assign a filter to a tag in an
+MDX style index. Everything to the right of the keyword FILTER is considered part of the filter.
+<br><br>
+The original DBASE indices used to '+' to create an index on more than one field
+<br>ie: FIELD1+FIELD2+FIELD3
+<br><brSQL uses commas: ie: FIELD1, FIELD2, FIELD3
+<br>
+The Xbase library supports either '+' or ',' when creating mutli field indices.
+<br><br>
+<hr>
+
+
+
+<h3>CREATE TABLE</h3>
+Expected format:<br>
+CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... )
+<br><br>
+<table border=1>
+<tr><th>SQL TYPE</th><th>XBASE Field Type</th></tr>
+<tr><td>SMALLINT</td><td>NUMERIC(6,0)</td></tr>
+<tr><td>INTEGER</td><td>NUMERIC(11,0)</td></tr>
+<tr><td>DECIMAL(x,y)</td><td>NUMERIC(x+1,y)</td></tr>
+<tr><td>NUMERIC(x,y)</td><td>NUMERIC(x,y)</td></tr>
+<tr><td>FLOAT(x,y)</td><td>FLOAT(x,y)</td></tr>
+<tr><td>CHAR(n)</td><td>CHARACTER(n)</td></tr>
+<tr><td>DATE</td><td>DATE</td></tr>
+<tr><td>VARCHAR</td><td>MEMO</td></tr>
+<tr><td>LOGICAL</td><td>LOGICAL</td></tr>
+</table>
+<br>
+<hr>
+
+
+<h3>DELETE</h3>
+Expected format:<br>
+DELETE FROM tablename.DBF [WHERE expression]
+<br><br>
+<hr>
+
+
+<h3>DROP INDEX</h3>
+Expected format:<br>
+DROP INDEX [IF EXISTS] ixname.NDX ON tablename.DBF<br>
+DROP INDEX [IF EXISTS] tagname ON tablename.DBF<br>
+<br>
+
+
+<hr>
+<h3>DROP TABLE</h3>
+Expected format:<br>
+DROP TABLE [IF EXISTS] tablename.DBF
+<br>
+<hr>
+<h3>INSERT</h3>
+Expexted format:<br>
+INSERT INTO tablename (field1, field2, field3,...) VALUES ( 'charval', numval, 'what is the correct odbc date format to use? CCYYMMDD');
+<br><br>
+<hr>
+<h3>SET</h3>
+Used to set a variable name<br>
+Expected format:<br>
+SET ATTRIBUTE = DATAVALUE<br>
+SET ATTRIBUTE = ^ (to delete an entry) <br>
+<br>
+<hr><br><br>
+<p><img src=xbase.jpg><br><hr>
+
+</BODY>
+</HTML>
+
+
diff --git a/docs/html/xbc15.html b/docs/html/xbc15.html
new file mode 100755
index 0000000..136724d
--- /dev/null
+++ b/docs/html/xbc15.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 15</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">Class Inventory</p></H2>
+<p align="center">Chapter Updated 12/24/22</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 deciemal data</td></tr>
+<tr><td>xbDate</td><td>Support date operations on a given date formatted as YYYYMMDD</td></tr>
+<tr><td>xbDbf</td><td>Base class for DBF file handling. If you are adding support for a new file type, <br>derive new file type class from this.</td></tr>
+<tr><td>xbDbf3</td><td>Derived from xbDbf, supports DBase V3 files</td></tr>
+<tr><td>xbDbf4</td><td>Derived from xbDbf, supports DBase V4 files</td></tr>
+<tr><td>xbExp</td><td>Class for supporting expression logic</td></tr>
+<tr><td>xbExpNode</td><td>Class definition of a single node, utilized by xbExp</td></tr>
+<tr><td>xbFile</td><td>Main file class. If you are porting this library to another platform, start here</td></tr>
+<tr><td>xbFilter</td><td>Supports filters</td></tr>
+<tr><td>xbIx</td><td>Base class for index file support. If you are adding support for a new index type, <br>derive new index type class from this.</td></tr>
+<tr><td>xbIxNdx</td><td>Derived from xbIx, supports NDX style indices.</td></tr>
+<tr><td>xbIxMdx</td><td>Derived from xbIx, supports MDX style indices</td></tr>
+<tr><td>xbLinkList</td><td>Class supporting linked list functionality</td></tr>
+<tr><td>xbLinkListOrd</td><td>Class supporting ordered linked list functionality</td></tr>
+<tr><td>xbLinkListNode</td><td>Class defining one node, used by xbLinkList and xbLinkListOrd</td></tr>
+<tr><td>xbLog</td><td>Class supporting general log file activity</td></tr>
+<tr><td>xbMemo</td><td>Base class for supporting memo (.DBT) files. If you are adding support for a new memo type, <br>derive new memo type class from this.</td></tr>
+<tr><td>xbMemoDbt3</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
+<tr><td>xbMemoDbt4</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
+<tr><td>xbSql</td><td>Supports SQL access</td></tr>
+<tr><td>xbSsv</td><td>Base class, shared system values</td></tr>
+<tr><td>xbString</td><td>String handling class</td></tr>
+<tr><td>xbTag</td><td>Class to support index tags</td></tr>
+<tr><td>xbTblMgr</td><td>Class used internally in the library for managing multiple open files/tables</td></tr>
+<tr><td>xbUda</td><td>Class for supporting fields for the xbSql functions. Stands for User data area</td></tr>
+<tr><td>xbXBase</td><td>Class to tie everything together. Every application program starts with one of these</td></tr>
+</table>
+</center>
+
+<hr>
+<br><br>
+Fix me...
+<p><img src="Xbase64ClassDiagram.jpg"><br>
+
+<br><br>
+<hr>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/docs/html/xbc2.htm b/docs/html/xbc2.html
index 72a6009..72a6009 100755
--- a/docs/html/xbc2.htm
+++ b/docs/html/xbc2.html
diff --git a/docs/html/xbc3.htm b/docs/html/xbc3.html
index f2f4a1d..f2f4a1d 100755
--- a/docs/html/xbc3.htm
+++ b/docs/html/xbc3.html
diff --git a/docs/html/xbc4.htm b/docs/html/xbc4.html
index f494629..a0275ed 100755
--- a/docs/html/xbc4.htm
+++ b/docs/html/xbc4.html
@@ -3,7 +3,7 @@
<TITLE>Xbase DBMS Chapter 4</TITLE>
<BODY BGCOLOR=#FFFFFF>
<H1><p align="center">Date Processing</p></H1>
-<p align="center">Chapter Updated 2/12/99</p><hr>
+<p align="center">Chapter Updated 12/09/22</p><hr>
The objective of this chapter is to provide information regarding
the basic concepts of date arithmetic and supply generic
@@ -56,7 +56,8 @@ To calculate a future or past date, convert the base date to a Julian date,
add (or subtract) the number of days necessary to (from) it and convert the
julian date back to a Gregorian date.<br><br>
-The Julian date routines use a base date of 01/01/0001.<br><br>
+The Julian date routines use a base date of 01/01/0001. DBase julian Dates have an offset of 1721425L, reason unknown.
+<br><br>
<h2>Gregorian Dates</h2>
diff --git a/docs/html/xbc5.htm b/docs/html/xbc5.html
index f798125..9708b17 100755
--- a/docs/html/xbc5.htm
+++ b/docs/html/xbc5.html
@@ -3,7 +3,7 @@
<title>Xbase DBMS Chapter 5</title>
<body bgcolor=#FFFFFF>
<h1><p align="center">Expression Handling<br></h1>
-<p align="center">Chapter Updated 11/27/22</p><hr>
+<p align="center">Chapter Updated 12/26/22</p><hr>
<h3>Overview</h3>
@@ -39,7 +39,6 @@ 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>
@@ -72,7 +71,7 @@ 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.
+the code and modify xbxbase.h, xbfuncs.cpp, xbexp.cpp and xb_test_expression.cpp.<br><br>
<table border=1>
@@ -116,7 +115,7 @@ the code and modify xbxbase.h, xbfuncs.cpp, xbexp.cpp and xb_test_expression.cpp
<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</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>
@@ -145,8 +144,6 @@ of database->fieldname.
<tr><td>DATE</td><td>{10/07/60} or {02/09/1989}</td></tr>
</table>
-
-
<br><br>
<h3>Expression Operators</h3>
<table border=1>
@@ -187,10 +184,11 @@ of database->fieldname.
</table>
<br><br>
-<h3>Examples</h3>
+<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" )
@@ -199,6 +197,11 @@ of database->fieldname.
<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>
diff --git a/docs/html/xbc6.htm b/docs/html/xbc6.html
index a7e1746..094545f 100755
--- a/docs/html/xbc6.htm
+++ b/docs/html/xbc6.html
@@ -3,7 +3,7 @@
<TITLE>Xbase DBMS Chapter 6</TITLE>
<BODY BGCOLOR=#FFFFFF>
<H1><p align="center">Index Overview</p></H1>
-<p align="center">Chapter Updated 11/27/222</p><hr>
+<p align="center">Chapter Updated 12/09/22</p><hr>
The objective of this chapter is to provide information regarding
the basic concepts of index processing for the Xbase library.<br><br>
@@ -27,6 +27,13 @@ Each index file contains one or more tags depending on the file type. Each tag
and has characteristics: Sort order (ASC or DESC), unique or not unique and some formats support filtering.
Each open table (dbf file) has an "active tag" for database operations.
+<h2>Index processing design</h2>
+
+The library is construcuted to handle index files with multiple tags per file. Single tag files like the NDX indices
+are treated as a multi tag file, but there is only one tag. This allows for maximum flexibility for future
+additional index types.
+
+
<h2>Index updates</h2>
@@ -129,7 +136,16 @@ The library automatically updates all tags in all open index files.
<td>xbDbf::SetCurTag</td><td>Set current tag.</td>
</tr>
</table>
+<br><br>
+<h2>Internal Data Storage</h2>
+<table border=1>
+<tr><th>Type<th>Stored in DBF as</th><th>Stored in NDX as</th><th>Stored in MDX as</th></tr>
+<tr><td>C</td><td>Character data</td><td>Character data</td><td>Character data</td></tr>
+<tr><td>F</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
+<tr><td>N</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
+<tr><td>D</td><td>Text YYYYMMDD</td><td>xbDouble Julian</td><td>xbDouble Julian</td></tr>
+</table>
<br><br>
<hr>
<p><img src="xbase.jpg"><br><hr>
diff --git a/docs/html/xbc7.htm b/docs/html/xbc7.html
index 20a60de..20a60de 100755
--- a/docs/html/xbc7.htm
+++ b/docs/html/xbc7.html
diff --git a/docs/html/xbc8.htm b/docs/html/xbc8.html
index cb47657..fcc461c 100755
--- a/docs/html/xbc8.htm
+++ b/docs/html/xbc8.html
@@ -3,7 +3,7 @@
<TITLE>Xbase DBMS Chapter 8</TITLE>
<BODY BGCOLOR=#FFFFFF>
<H2><p align="center">MDX Indices</p></H2>
-<p align="center">Chapter Updated 11/28/22</p><hr>
+<p align="center">Chapter Updated 12/02/22</p><hr>
The objective of this chapter is to provide information regarding the
basic concepts of how .MDX index files work in the Xbase environment.<br><br>
diff --git a/docs/html/xbc9.htm b/docs/html/xbc9.html
index 297a702..afcd2fa 100755
--- a/docs/html/xbc9.htm
+++ b/docs/html/xbc9.html
@@ -175,5 +175,6 @@ 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/logs/Linux_x64.xbLog.txt b/logs/Linux_x64.xbLog.txt
deleted file mode 100644
index 3fb222f..0000000
--- a/logs/Linux_x64.xbLog.txt
+++ /dev/null
@@ -1,254 +0,0 @@
-2022-11-28 09:05:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_string] initializing...
-2022-11-28 09:05:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_string] terminating with [0] errors...
-2022-11-28 09:05:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_date] initializing...
-2022-11-28 09:05:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_date] terminating with [0] errors...
-2022-11-28 09:05:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_tblmgr] initializing...
-2022-11-28 09:05:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_tblmgr] terminating with [0] errors...
-2022-11-28 09:05:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_xbase] initializing...
-2022-11-28 09:05:24 - test
-2022-11-28 09:05:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_xbase] terminating with [0] errors...
-2022-11-28 09:05:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_file] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_file] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_log] initializing...
-2022-11-28 09:05:25 - Switching to logfile [Logfile2.txt]
-2022-11-28 09:05:25 - Test log message........
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_log] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_linklist] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_linklist] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v3_nomemos] initializing...
-2022-11-28 09:05:25 - Second create attempt
-2022-11-28 09:05:25 - xbdbf3::CreateTable() Exception Caught Error Stop = 10 rc = -200
-2022-11-28 09:05:25 - File Already Exists
-2022-11-28 09:05:25 - Table Name = [/mnt/1Tdata/xbase/xbase64-4.0.2/data/TestV3.DBF]
-2022-11-28 09:05:25 - Alias Name = [TestV3]
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v3_nomemos] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v3_memos] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v3_memos] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v4_nomemos] initializing...
-2022-11-28 09:05:25 - Second create attempt
-2022-11-28 09:05:25 - xbdbf4::CreateTable() Exception Caught Error Stop = 10 rc = -200
-2022-11-28 09:05:25 - File Already Exists
-2022-11-28 09:05:25 - Table Name = [/mnt/1Tdata/xbase/xbase64-4.0.2/data/TestV4.DBF]
-2022-11-28 09:05:25 - Alias Name = [TestV4]
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v4_nomemos] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v4_memos] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v4_memos] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_funcs] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_funcs] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_ndx] initializing...
-2022-11-28 09:05:25 - Checking index type [C]
-2022-11-28 09:05:25 - CheckTagIntegrity() Index entry count [589] matches dbf record count [589]
-2022-11-28 09:05:25 - Checking index type [D]
-2022-11-28 09:05:25 - CheckTagIntegrity() Index entry count [589] matches dbf record count [589]
-2022-11-28 09:05:25 - Checking index type [F]
-2022-11-28 09:05:25 - CheckTagIntegrity() Index entry count [589] matches dbf record count [589]
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_ndx] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_ndx2] initializing...
-2022-11-28 09:05:25 - Checking index type [C]
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_ndx2] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_mdx] initializing...
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [CITY_TAGA]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [0] does not match dbf record count [490] for tag [CITY_TAGF]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Exception Caught. Error Stop = [190] iRc = [-601] Tag = [CITY_TAGF]
-2022-11-28 09:05:25 - Index File Error
-2022-11-28 09:05:25 - xbdbf::CheckTagIntegrity() Exception Caught. Error Stop = [100] iRc = [-601]
-2022-11-28 09:05:25 - Index File Error
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [490] matches dbf record count [490] for tag [CITY_TAGF]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [490] matches dbf record count [490] for tag [CITY_TAGF]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [0] matches dbf record count [0] for tag [CITY_TAGF]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-28 09:05:25 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [490] matches dbf record count [490] for tag [CITY_TAGF]
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_mdx] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_bcd] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_bcd] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_expnode] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_expnode] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_expression] initializing...
-2022-11-28 09:05:25 - xbexp::GetTokenParen() Exception Caught. Error Stop = [10] iRc = [-500]
-2022-11-28 09:05:25 - xbexp::GetNextToken() Exception Caught. Error Stop = [20] iRc = [-500] Expression = [{{NESTED}TOKEN + 55-100]
-2022-11-28 09:05:25 - xbexp::GetTokenCharConstant() Exception Caught. Error Stop = [10] iRc = [-500]
-2022-11-28 09:05:25 - xbexp::GetNextToken() Exception Caught. Error Stop = [30] iRc = [-500] Expression = ['SOMETOKEN4 ]
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_expression] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_uda] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_uda] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_sql] initializing...
-2022-11-28 09:05:25 - INSERT INTO TestSQL (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y')
-2022-11-28 09:05:25 - xbSql::SqlInsert() Exception Caught. Error Stop = [500] rc = [0] table = [TestSQL] field = [ACTIVE] data = [San Diego is a cool place]
-2022-11-28 09:05:25 - No Error
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_sql] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_filter] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_filter] terminating with [0] errors...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] initializing...
-2022-11-28 09:05:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing START command
-2022-11-28 09:05:26 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[START] RC=[0]
-2022-11-28 09:05:26 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [START] Result [OK] RC = [0]
-2022-11-28 09:05:26 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-28 09:05:26 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing TL command
-2022-11-28 09:05:26 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[TL] RC=[0]
-2022-11-28 09:05:26 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [TL] Result [OK] RC = [0]
-2022-11-28 09:05:26 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-28 09:05:27 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing TU command
-2022-11-28 09:05:27 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[TU] RC=[0]
-2022-11-28 09:05:27 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [TU] Result [OK] RC = [0]
-2022-11-28 09:05:27 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-28 09:05:27 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing RL command
-2022-11-28 09:05:28 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[RL] RC=[0]
-2022-11-28 09:05:28 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [RL] Result [OK] RC = [0]
-2022-11-28 09:05:28 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-28 09:05:28 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing RU command
-2022-11-28 09:05:28 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[RU] RC=[0]
-2022-11-28 09:05:28 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [RU] Result [OK] RC = [0]
-2022-11-28 09:05:28 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-28 09:05:28 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing ML command
-2022-11-28 09:05:29 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[ML] RC=[0]
-2022-11-28 09:05:29 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [ML] Result [OK] RC = [0]
-2022-11-28 09:05:29 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-28 09:05:29 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing MU command
-2022-11-28 09:05:30 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[MU] RC=[0]
-2022-11-28 09:05:30 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [MU] Result [OK] RC = [0]
-2022-11-28 09:05:30 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-28 09:05:30 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[EXIT] RC=[0]
-2022-11-28 09:05:30 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task terminating
-2022-11-28 09:05:30 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task terminating
-2022-11-28 09:05:30 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] terminating with [0] errors...
-2022-11-28 09:05:31 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] terminating with [0] errors...
-2022-11-30 17:12:18 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_string] initializing...
-2022-11-30 17:12:18 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_string] terminating with [0] errors...
-2022-11-30 17:12:18 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_date] initializing...
-2022-11-30 17:12:18 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_date] terminating with [0] errors...
-2022-11-30 17:12:18 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_tblmgr] initializing...
-2022-11-30 17:12:18 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_tblmgr] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_xbase] initializing...
-2022-11-30 17:12:19 - test
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_xbase] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_file] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_file] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_log] initializing...
-2022-11-30 17:12:19 - Switching to logfile [Logfile2.txt]
-2022-11-30 17:12:19 - Test log message........
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_log] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_linklist] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_linklist] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v3_nomemos] initializing...
-2022-11-30 17:12:19 - Second create attempt
-2022-11-30 17:12:19 - xbdbf3::CreateTable() Exception Caught Error Stop = 10 rc = -200
-2022-11-30 17:12:19 - File Already Exists
-2022-11-30 17:12:19 - Table Name = [/mnt/1Tdata/xbase/xbase64-4.0.2/data/TestV3.DBF]
-2022-11-30 17:12:19 - Alias Name = [TestV3]
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v3_nomemos] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v3_memos] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v3_memos] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v4_nomemos] initializing...
-2022-11-30 17:12:19 - Second create attempt
-2022-11-30 17:12:19 - xbdbf4::CreateTable() Exception Caught Error Stop = 10 rc = -200
-2022-11-30 17:12:19 - File Already Exists
-2022-11-30 17:12:19 - Table Name = [/mnt/1Tdata/xbase/xbase64-4.0.2/data/TestV4.DBF]
-2022-11-30 17:12:19 - Alias Name = [TestV4]
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v4_nomemos] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v4_memos] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_dbf_v4_memos] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_funcs] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_funcs] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_ndx] initializing...
-2022-11-30 17:12:19 - Checking index type [C]
-2022-11-30 17:12:19 - CheckTagIntegrity() Index entry count [589] matches dbf record count [589]
-2022-11-30 17:12:19 - Checking index type [D]
-2022-11-30 17:12:19 - CheckTagIntegrity() Index entry count [589] matches dbf record count [589]
-2022-11-30 17:12:19 - Checking index type [F]
-2022-11-30 17:12:19 - CheckTagIntegrity() Index entry count [589] matches dbf record count [589]
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_ndx] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_ndx2] initializing...
-2022-11-30 17:12:19 - Checking index type [C]
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_ndx2] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_mdx] initializing...
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [CITY_TAGA]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [0] does not match dbf record count [490] for tag [CITY_TAGF]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Exception Caught. Error Stop = [190] iRc = [-601] Tag = [CITY_TAGF]
-2022-11-30 17:12:19 - Index File Error
-2022-11-30 17:12:19 - xbdbf::CheckTagIntegrity() Exception Caught. Error Stop = [100] iRc = [-601]
-2022-11-30 17:12:19 - Index File Error
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [490] matches dbf record count [490] for tag [CITY_TAGF]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [490] matches dbf record count [490] for tag [CITY_TAGF]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [0] matches dbf record count [0] for tag [CITY_TAGF]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [ZIP_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Index entry count [490] matches dbf record count [490] for tag [DATE_TAG]
-2022-11-30 17:12:19 - xbIxMdx::CheckTagIntegrity() Filtered index entry count [490] matches dbf record count [490] for tag [CITY_TAGF]
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_mdx] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_bcd] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_bcd] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_expnode] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_expnode] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_expression] initializing...
-2022-11-30 17:12:19 - xbexp::GetTokenParen() Exception Caught. Error Stop = [10] iRc = [-500]
-2022-11-30 17:12:19 - xbexp::GetNextToken() Exception Caught. Error Stop = [20] iRc = [-500] Expression = [{{NESTED}TOKEN + 55-100]
-2022-11-30 17:12:19 - xbexp::GetTokenCharConstant() Exception Caught. Error Stop = [10] iRc = [-500]
-2022-11-30 17:12:19 - xbexp::GetNextToken() Exception Caught. Error Stop = [30] iRc = [-500] Expression = ['SOMETOKEN4 ]
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_expression] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_uda] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_uda] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_sql] initializing...
-2022-11-30 17:12:19 - INSERT INTO TestSQL (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y')
-2022-11-30 17:12:19 - xbSql::SqlInsert() Exception Caught. Error Stop = [500] rc = [0] table = [TestSQL] field = [ACTIVE] data = [San Diego is a cool place]
-2022-11-30 17:12:19 - No Error
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_sql] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_filter] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_filter] terminating with [0] errors...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] initializing...
-2022-11-30 17:12:19 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing START command
-2022-11-30 17:12:20 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[START] RC=[0]
-2022-11-30 17:12:20 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [START] Result [OK] RC = [0]
-2022-11-30 17:12:20 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-30 17:12:20 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing TL command
-2022-11-30 17:12:20 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[TL] RC=[0]
-2022-11-30 17:12:20 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [TL] Result [OK] RC = [0]
-2022-11-30 17:12:20 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-30 17:12:21 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing TU command
-2022-11-30 17:12:21 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[TU] RC=[0]
-2022-11-30 17:12:21 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [TU] Result [OK] RC = [0]
-2022-11-30 17:12:21 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-30 17:12:21 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing RL command
-2022-11-30 17:12:22 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[RL] RC=[0]
-2022-11-30 17:12:22 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [RL] Result [OK] RC = [0]
-2022-11-30 17:12:22 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-30 17:12:22 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing RU command
-2022-11-30 17:12:22 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[RU] RC=[0]
-2022-11-30 17:12:22 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [RU] Result [OK] RC = [0]
-2022-11-30 17:12:22 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-30 17:12:22 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing ML command
-2022-11-30 17:12:23 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[ML] RC=[0]
-2022-11-30 17:12:23 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [ML] Result [OK] RC = [0]
-2022-11-30 17:12:23 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-30 17:12:23 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task issuing MU command
-2022-11-30 17:12:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[MU] RC=[0]
-2022-11-30 17:12:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task [MU] Result [OK] RC = [0]
-2022-11-30 17:12:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task retrieved result [OK]
-2022-11-30 17:12:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task retrieved command=[EXIT] RC=[0]
-2022-11-30 17:12:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Parent task terminating
-2022-11-30 17:12:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] Child task terminating
-2022-11-30 17:12:24 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] terminating with [0] errors...
-2022-11-30 17:12:25 - Program [/mnt/1Tdata/xbase/xbase64-4.0.2/build/linux64/bin/x64/xb_test_lock] terminating with [0] errors...
diff --git a/sql/del.sql b/sql/droptbl.sql
index d8699cc..d8699cc 100755
--- a/sql/del.sql
+++ b/sql/droptbl.sql
diff --git a/src/core/xbbcd.cpp b/src/core/xbbcd.cpp
index 4855e80..ff64110 100755
--- a/src/core/xbbcd.cpp
+++ b/src/core/xbbcd.cpp
@@ -142,37 +142,6 @@ void xbBcd::StringToBcd( const xbString &sIn )
if( bSign )
bcd.cEncDigits = bcd.cEncDigits | 0x80;
-
-/*
- std::cout << "num in = " << sIn.Str() << "\n";
- unsigned char bW[12];
- memcpy( bW, &bcd, 12 );
- std::cout << "bx ";
- for( int i = 0; i < 12; i++ ){
- bcdBitDump( bW[i] );
- std::cout << " ";
- }
- std::cout << "\n";
-
- unsigned char cSign = bcd.cEncDigits >> 7;
- std::cout << "bs ";
- bcdBitDump( cSign );
- std::cout << "\n";
-
- std::cout << "test = ";
- bcdBitDump( cEdc );
- std::cout << " ";
- bcdBitDump( GetEncDigitsNoSign() );
- std::cout << "\n";
- bcdBitDump( bcd.cEncDigits );
-
- unsigned char c = bcd.cEncDigits;
- c = c << 1;
- c = c >> 3;
- std::cout << " ";
- bcdBitDump( c );
- std::cout << "\n";
-*/
}
/***********************************************************************/
void xbBcd::ToChar( char * cOut ){
@@ -268,20 +237,20 @@ xbInt16 xbBcd::Compare( const xbBcd &bcdIn ){
// if( bcd.Sign != bcdIn.GetSign() ){
// bcd.Sign > 0 ? iRc = -1 : iRc = 1;
- if( (bcd.cEncDigits >> 7 ) != bcdIn.GetSign() ){
+ if( (unsigned)(bcd.cEncDigits >> 7 ) != bcdIn.GetSign() ){
(bcd.cEncDigits >> 7 ) > 0 ? iRc = -1 : iRc = 1;
return iRc;
}
- if( bcd.cSigDigits != bcdIn.GetSigDigits()){
+ if( (unsigned) bcd.cSigDigits != bcdIn.GetSigDigits()){
// if( !bcd.Sign ){ // positive numbers
if( !(bcd.cEncDigits >> 7 )){ // positive numbers
- if( bcd.cSigDigits > bcdIn.GetSigDigits())
+ if( (unsigned) bcd.cSigDigits > bcdIn.GetSigDigits())
return 1;
else
return -1;
} else { // negative numbers
- if( bcd.cSigDigits > bcdIn.GetSigDigits())
+ if( (unsigned) bcd.cSigDigits > bcdIn.GetSigDigits())
return -1;
else
return 1;
diff --git a/src/core/xbdbf.cpp b/src/core/xbdbf.cpp
index 8e020fb..3d13369 100755
--- a/src/core/xbdbf.cpp
+++ b/src/core/xbdbf.cpp
@@ -61,7 +61,7 @@ void xbDbf::InitVars()
ulAppendLocked = 0;
SetAutoLock( -1 );
lloRecLocks.SetDupKeys( xbFalse );
- #endif
+ #endif // XB_LOCKING_SUPPORT
#ifdef XB_INDEX_SUPPORT
ixList = NULL;
@@ -69,10 +69,15 @@ void xbDbf::InitVars()
vpCurIxTag = NULL;
sCurIxType = "";
ClearTagList();
- #endif
- #ifdef XB_NDXINF_SUPPORT
- llNdxInfData.Clear();
- #endif
+ #endif // XB_INDEX_SUPPORT
+
+ #ifdef XB_MEMO_SUPPORT
+ Memo = NULL;
+ #endif // XB_MEMO_SUPPORT
+
+ #ifdef XB_INF_SUPPORT
+ llInfData.Clear();
+ #endif // XB_INF_SUPPORT
}
/************************************************************************/
@@ -116,7 +121,7 @@ xbInt16 xbDbf::Abort(){
#ifdef XB_MEMO_SUPPORT
if( MemoFieldsExist()){
if(( iRc = Memo->Abort()) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
}
@@ -214,7 +219,7 @@ xbInt16 xbDbf::AppendRecord(){
// std::cout << "xbDbf::CreateKeys(x)\n";
if(( iRc = ixList->ix->CreateKeys( 1 )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -224,14 +229,12 @@ xbInt16 xbDbf::AppendRecord(){
// lock everything up for an update
#ifdef XB_LOCKING_SUPPORT
- // xbInt16 iAutoLock = GetAutoLock();
- if( iAutoLock ){
-
+ if( iAutoLock && !bTableLocked ){
if(( iRc = LockHeader( XB_LOCK )) != XB_NO_ERROR ){
if( iRc == XB_LOCK_FAILED ) {
return iRc;
} else {
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -240,14 +243,14 @@ xbInt16 xbDbf::AppendRecord(){
LockHeader( XB_UNLOCK );
return iRc;
} else {
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
}
#ifdef XB_INDEX_SUPPORT
if(( iRc = LockIndices( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
#endif // XB_INDEX_SUPPORT
@@ -255,7 +258,7 @@ xbInt16 xbDbf::AppendRecord(){
}
#endif // XB_LOCKING_SUPPORT
if(( iRc = ReadHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
#ifdef XB_INDEX_SUPPORT
@@ -264,7 +267,7 @@ xbInt16 xbDbf::AppendRecord(){
while( ixList ){
if(( iRc = ixList->ix->CheckForDupKeys()) != 0 ){
if( iRc < 0 ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
return XB_KEY_NOT_UNIQUE;
@@ -289,7 +292,7 @@ xbInt16 xbDbf::AppendRecord(){
ixList = GetIxList();
while( ixList ){
if(( iRc = ixList->ix->AddKeys( ulCurRec )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 160;
throw iRc;
}
ixList = ixList->next;
@@ -298,7 +301,7 @@ xbInt16 xbDbf::AppendRecord(){
#ifdef XB_LOCKING_SUPPORT
if( iAutoLock ){
if(( iRc = LockIndices( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 170;
throw iRc;
}
}
@@ -307,14 +310,14 @@ xbInt16 xbDbf::AppendRecord(){
// rewrite the header record
if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 180;
throw iRc;
}
#ifdef XB_LOCKING_SUPPORT
if( iAutoLock ){
if(( iRc = LockHeader( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 190;
throw iRc;
}
}
@@ -322,25 +325,25 @@ xbInt16 xbDbf::AppendRecord(){
// write the last record
if(( iRc = xbFseek( (uiHeaderLen+((xbInt64)(ulNoOfRecs-1)*uiRecordLen)), 0 )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 200;
throw iRc;
}
if(( iRc = xbFwrite( RecBuf, uiRecordLen, 1 )) != XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 210;
throw iRc;
}
// write the end of file marker
if(( iRc = xbFputc( XB_CHAREOF )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 220;
throw iRc;
}
#ifdef XB_LOCKING_SUPPORT
if( iAutoLock ){
if(( iRc = LockAppend( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 230;
throw( iRc );
}
}
@@ -376,7 +379,7 @@ xbInt16 xbDbf::AppendRecord(){
}
/************************************************************************/
-#ifdef XB_NDXINF_SUPPORT
+#ifdef XB_INF_SUPPORT
//! @brief Asscoiate a non production index to a DBF file.
/*!
@@ -385,7 +388,7 @@ xbInt16 xbDbf::AppendRecord(){
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 NDXINF support be enabled when building the library.<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>
@@ -412,13 +415,13 @@ xbInt16 xbDbf::AssociateIndex( const xbString &sIxType, const xbString &sIxName,
if( sIxTypeIn != "NDX" || sIxName == "" )
return XB_INVALID_INDEX;
- if(( iRc = LoadNdxInfData()) != XB_NO_ERROR ){
- iErrorStop = 10;
+ if(( iRc = LoadInfData()) != XB_NO_ERROR ){
+ iErrorStop = 100;
throw iRc;
}
// check if entry exists
- xbLinkListNode<xbString> * llN = llNdxInfData.GetHeadNode();
+ xbLinkListNode<xbString> * llN = llInfData.GetHeadNode();
xbBool bFound = xbFalse;
xbString s;
@@ -434,17 +437,17 @@ xbInt16 xbDbf::AssociateIndex( const xbString &sIxType, const xbString &sIxName,
xbBool bUpdated = xbFalse;
if( iOpt == 0 && !bFound ){
s.Sprintf( "%s%c%c", sIxName.Str(), 0x0d, 0x0a );
- llNdxInfData.InsertAtEnd( s );
+ llInfData.InsertAtEnd( s );
bUpdated = xbTrue;
} else if( iOpt == 1 && bFound ){
- llNdxInfData.RemoveByVal( s );
+ llInfData.RemoveByVal( s );
bUpdated = xbTrue;
}
if( bUpdated ){
- if(( iRc = SaveNdxInfData()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ if(( iRc = SaveInfData()) != XB_NO_ERROR ){
+ iErrorStop = 110;
throw iRc;
}
}
@@ -457,7 +460,7 @@ xbInt16 xbDbf::AssociateIndex( const xbString &sIxType, const xbString &sIxName,
}
return iRc;
}
-#endif // XB_NDXINF_SUPPORT
+#endif // XB_INF_SUPPORT
/************************************************************************/
//! @brief Blank the record buffer.
@@ -477,7 +480,7 @@ xbInt16 xbDbf::BlankRecord()
try{
if( iDbfStatus == XB_CLOSED ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_NOT_OPEN;
throw iRc;
}
@@ -485,12 +488,12 @@ xbInt16 xbDbf::BlankRecord()
if( iDbfStatus == XB_UPDATED ){
if( GetAutoCommit() == 1 ){
if(( iRc = Commit()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
} else {
if(( iRc = Abort()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
}
@@ -511,9 +514,6 @@ xbInt16 xbDbf::BlankRecord()
}
/************************************************************************/
#ifdef XB_INDEX_SUPPORT
-
-#ifdef XB_DEBUG_SUPPORT
-
/*!
This method is used to check an index tag's intgerity.
@@ -533,9 +533,6 @@ xbInt16 xbDbf::CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt ){
xbInt16 iErrorStop = 0;
try{
-
-// std::cout << "CheckTagIntegrity()\n";
-
if( iTagOpt == 0 ){
if( pCurIx )
return pCurIx->CheckTagIntegrity( vpCurIxTag, iOutputOpt );
@@ -550,7 +547,7 @@ xbInt16 xbDbf::CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt ){
while( llN ){
pTag = llN->GetKey();
if(( iRc = pTag->GetIx()->CheckTagIntegrity( pTag->GetVpTag(), iOutputOpt )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 110;
throw iRc;
}
llN = llN->GetNextNode();
@@ -563,12 +560,9 @@ xbInt16 xbDbf::CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt ){
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
-
return iRc;
}
-#endif // XB_DEBUG_SUPPORT
-
/************************************************************************/
/*!
This method is used to reindex / rebuild index tag.
@@ -588,24 +582,14 @@ xbInt16 xbDbf::Reindex( xbInt16 iTagOpt ){
if( iTagOpt == 0 ){
if( pCurIx ){
- //
- // xbString = save current tag name
- //
-
iRc = pCurIx->Reindex( &vpCurIxTag );
if( iRc != XB_NO_ERROR ){
iErrorStop = 100;
throw iRc;
}
- //
- // restore current tag name
- //
return iRc;
-
} else {
-
return XB_INVALID_TAG;
-
}
} else {
@@ -617,13 +601,11 @@ xbInt16 xbDbf::Reindex( xbInt16 iTagOpt ){
pTag = llN->GetKey();
vp = pTag->GetVpTag();
if(( iRc = pTag->GetIx()->Reindex( &vp )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 110;
throw iRc;
}
llN = llN->GetNextNode();
}
-
-
}
}
catch (xbInt16 iRc ){
@@ -632,7 +614,6 @@ xbInt16 xbDbf::Reindex( xbInt16 iTagOpt ){
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
-
return iRc;
}
@@ -680,12 +661,12 @@ xbInt16 xbDbf::Close(){
if( GetAutoCommit() == 1 ){
if(( iRc = Commit()) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
} else {
if(( iRc = Abort()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -704,7 +685,6 @@ xbInt16 xbDbf::Close(){
RecBuf2 = NULL;
}
-
#ifdef XB_MEMO_SUPPORT
if( iMemoFieldCnt > 0 ){
Memo->CloseMemoFile();
@@ -721,24 +701,15 @@ xbInt16 xbDbf::Close(){
}
#endif
- #ifdef XB_LOCKING_ON
- if( xblfh ){
- fclose( xblfh );
- xblfh = NULL;
- }
- #endif
-
if(( iRc = xbase->RemoveTblFromTblList( this )) != XB_NO_ERROR ){
xbString sMsg;
sMsg.Sprintf( "Alias = [%s]", sAlias.Str());
xbase->WriteLogMessage( sMsg.Str() );
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
-
xbFclose();
InitVars();
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -749,7 +720,6 @@ xbInt16 xbDbf::Close(){
return iRc;
}
-
/************************************************************************/
#ifdef XB_INDEX_SUPPORT
//! @brief Close an open index file
@@ -778,35 +748,30 @@ xbInt16 xbDbf::CloseIndexFile( xbIx *pIx ){
p = p->next;
}
if( !bFound ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_NOT_OPEN;
throw iRc;
}
-
// close it
if(( iRc = pIx->Close()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
-
// remove it from the list
if(( iRc = RemoveIndex( pIx )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
-
// refresh the tag list
if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
-
if( pIx == pCurIx ){
pCurIx = NULL;
vpCurIxTag = NULL;
sCurIxType = "";
}
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -836,12 +801,12 @@ xbInt16 xbDbf::Commit(){
if( iDbfStatus == XB_UPDATED ){
if( ulCurRec == 0 ){
if(( iRc = AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 100;
throw iRc;
}
} else {
if(( iRc = PutRecord( ulCurRec )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -858,7 +823,6 @@ xbInt16 xbDbf::Commit(){
return iRc;
}
-
/************************************************************************/
//! @brief Copy table (dbf) file structure.
/*!
@@ -891,13 +855,13 @@ xbInt16 xbDbf::CopyDbfStructure( xbDbf * dNewTable, const xbString &sNewTableNam
try{
if( iDbfStatus == XB_CLOSED ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_DBF_FILE_NOT_OPEN;
throw iRc;
}
if( !dNewTable ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_INVALID_OBJECT;
throw iRc;
}
@@ -907,7 +871,7 @@ xbInt16 xbDbf::CopyDbfStructure( xbDbf * dNewTable, const xbString &sNewTableNam
// Allocate a Schema = No Of Fields + 1
if((newTableSchema=(xbSchema *)malloc( (size_t) lSchemaRecCnt * sizeof(xbSchema)))==NULL){
- iErrorStop = 30;
+ iErrorStop = 120;
iRc = XB_NO_MEMORY;
throw iRc;
}
@@ -937,7 +901,7 @@ xbInt16 xbDbf::CopyDbfStructure( xbDbf * dNewTable, const xbString &sNewTableNam
// Call the create a table function
if(( iRc = dNewTable->CreateTable( sNewTableName, sNewTableAlias, newTableSchema, iOverlay, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
}
@@ -955,7 +919,6 @@ xbInt16 xbDbf::CopyDbfStructure( xbDbf * dNewTable, const xbString &sNewTableNam
return iRc;
}
-
/************************************************************************/
#ifdef XB_INDEX_SUPPORT
//! @brief Create a new tag (index) for this dbf file (table).
@@ -984,16 +947,19 @@ xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const
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( !bTableLocked ){
+ if( iAutoLock && !bTableLocked ){
if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw( iRc );
}
bLocked = xbTrue;
@@ -1001,7 +967,7 @@ xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const
#endif // XB_LOCKING_SUPPORT
if( sIxType == "" ){
- iErrorStop = 100;
+ iErrorStop = 110;
iRc = XB_INVALID_OPTION;
throw iRc;
@@ -1010,12 +976,12 @@ xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const
xbIxNdx *ixNdx = new xbIxNdx( this );
if(( iRc = ixNdx->CreateTag( sName, sKey, sFilter, iDescending, iUnique, iOverLay, vpTagOut )) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = AddIndex( ixNdx, sIxType )) != XB_NO_ERROR ){
- iErrorStop = 120;
+ iErrorStop = 130;
throw iRc;
}
*pIxOut = ixNdx;
@@ -1033,7 +999,7 @@ xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const
} else if( sIxType == "MDX" ){
if( GetVersion() == 3 ){ // MDX indexes were version 4 and higher
- iErrorStop = 200;
+ iErrorStop = 140;
iRc = XB_INVALID_INDEX;
throw iRc;
}
@@ -1055,19 +1021,19 @@ xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const
ixMdx = new xbIxMdx( this );
if(( iRc = ixMdx->CreateTag( sName, sKey, sFilter, iDescending, iUnique, iOverLay, vpTagOut )) != XB_NO_ERROR ){
- iErrorStop = 210;
+ iErrorStop = 150;
throw iRc;
}
if( !bMdxFound ){
if(( iRc = AddIndex( ixMdx, "MDX" )) != XB_NO_ERROR ){
- iErrorStop = 220;
+ iErrorStop = 160;
throw iRc;
}
cIndexFlag = 0x01;
if(( iRc = WriteHeader( 1, 0 )) != XB_NO_ERROR ){
- iErrorStop = 230;
+ iErrorStop = 170;
throw iRc;
}
}
@@ -1106,7 +1072,6 @@ xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const
LockTable( XB_UNLOCK );
#endif // XB_LOCKING_SUPPORT
-
return iRc;
}
#endif // XB_INDEX_SUPPORT
@@ -1131,27 +1096,35 @@ xbInt16 xbDbf::DeleteAll( xbInt16 iOption )
try{
if(( iRc = GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ 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 = 20;
+ iErrorStop = 110;
throw iRc;
}
if( iOption == 0 ){ /* delete all option */
if( !RecordDeleted()){
if(( iRc = DeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ 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 = 40;
+ iErrorStop = 140;
+ throw iRc;
+ }
+ if(( iRc = Commit()) != XB_NO_ERROR ){
+ iErrorStop = 150;
throw iRc;
}
}
@@ -1181,17 +1154,20 @@ xbInt16 xbDbf::DeleteAllIndexFiles(){
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
+
+ #ifdef XB_LOCKING_SUPPORT
xbBool bLocked = xbFalse;
+ #endif // XB_LOCKING_SUPPORT
- #ifdef XB_NDXINF_SUPPORT
+ #ifdef XB_INF_SUPPORT
xbString sIxName;
- #endif // XB_NDXINF_SUPPORT
+ #endif // XB_INF_SUPPORT
try{
#ifdef XB_LOCKING_SUPPORT
- if( !bTableLocked ){
+ if( iAutoLock && !bTableLocked ){
if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw( iRc );
}
bLocked = xbTrue;
@@ -1202,15 +1178,15 @@ xbInt16 xbDbf::DeleteAllIndexFiles(){
while( ixList ){
ixList->ix->Close();
ixList->ix->xbRemove();
- #ifdef XB_NDXINF_SUPPORT
- // if XB_NDXINF_SUPPORT is enabled, all open non prod indices should be in here
+ #ifdef XB_INF_SUPPORT
+ // if XB_INF_SUPPORT is enabled, all open non prod indices should be in here
if( *ixList->sFmt != "MDX" ){ // production indices not stored in .INF dataset
if(( iRc = ixList->ix->GetFileNamePart( sIxName )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
if(( iRc = AssociateIndex( *ixList->sFmt, sIxName, 1 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
}
@@ -1244,7 +1220,7 @@ xbInt16 xbDbf::DeleteAllRecords(){
}
/************************************************************************/
-#ifdef XB_NDXINF_SUPPORT
+#ifdef XB_INF_SUPPORT
//! @brief Delete .INF File
/*!
The original Dbase (TM) software supported non production indices (NDX) and production indices (MDX).
@@ -1252,45 +1228,44 @@ xbInt16 xbDbf::DeleteAllRecords(){
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 NDXINF support be enabled when building the library.<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::DeleteNdxInfData(){
+xbInt16 xbDbf::DeleteInfData(){
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
try{
- xbString sNdxInfFileName;
- if(( iRc = GetNdxInfFileName( sNdxInfFileName )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ xbString sInfFileName;
+ if(( iRc = GetInfFileName( sInfFileName )) != XB_NO_ERROR ){
+ iErrorStop = 100;
throw iRc;
}
xbFile f( xbase );
- f.SetFileName( sNdxInfFileName );
+ f.SetFileName( sInfFileName );
if( f.FileExists()){
if(( iRc = f.xbRemove()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
} catch( xbInt16 iRc ){
xbString sMsg;
- sMsg.Sprintf( "xbdbf::DeleteNdxInfData() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ 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_NDXINF_SUPPORT
+#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
*/
@@ -1322,27 +1297,35 @@ xbInt16 xbDbf::DeleteTable(){
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bTableLocked = xbFalse;
+ #endif
+
try{
#ifdef XB_LOCKING_SUPPORT
- if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 10;
- throw iRc;
+ 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 = 20;
+ iErrorStop = 110;
throw iRc;
}
- #ifdef XB_NDXINF_SUPPORT
- if(( iRc = DeleteNdxInfData()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ #ifdef XB_INF_SUPPORT
+ if(( iRc = DeleteInfData()) != XB_NO_ERROR ){
+ iErrorStop = 120;
throw iRc;
}
- #endif // XB_NDXINF_SUPPORT
+ #endif // XB_INF_SUPPORT
#endif // XB_INDEX_SUPPORT
#ifdef XB_MEMO_SUPPORT
@@ -1354,12 +1337,12 @@ xbInt16 xbDbf::DeleteTable(){
#endif // XB_MEMO_SUPPORT
if(( iRc = Close()) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if(( iRc = xbRemove()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
@@ -1367,7 +1350,7 @@ xbInt16 xbDbf::DeleteTable(){
if( iMemoFieldCnt > 0 ){
xbFile f( xbase );
if(( iRc = f.xbRemove( sMemoFileName )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
}
@@ -1380,12 +1363,14 @@ xbInt16 xbDbf::DeleteTable(){
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
#ifdef XB_LOCKING_SUPPORT
- LockTable( XB_UNLOCK );
+ if( bTableLocked )
+ LockTable( XB_UNLOCK );
#endif // XB_LOCKING_SUPPORT
return iRc;
}
/************************************************************************/
+#ifdef XB_INDEX_SUPPORT
//! @brief Delete an index tag.
/*!
@@ -1401,17 +1386,22 @@ xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
xbInt16 iRc = XB_NO_ERROR;
xbIx *pIx = NULL;
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bTableLocked = xbFalse;
+ #endif
+
try{
#ifdef XB_LOCKING_SUPPORT
- // xbInt16 iAutoLock = GetAutoLock();
if( iAutoLock && !GetTableLocked() ){
if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
iErrorStop = 100;
throw iRc;
+ } else {
+ bTableLocked = xbTrue;
}
}
- #endif
+ #endif // XB_LOCKING_SUPPORT
if( sIxType == "" ){
iErrorStop = 110;
@@ -1429,12 +1419,12 @@ xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
bDone = xbTrue;
// remove from .INF if it's there
- #ifdef XB_NDXINF_SUPPORT
+ #ifdef XB_INF_SUPPORT
if(( iRc = AssociateIndex( "NDX", sName, 1 )) != XB_NO_ERROR ){
iErrorStop = 120;
throw iRc;
}
- #endif // XB_NDXINF_SUPPORT
+ #endif // XB_INF_SUPPORT
if(( iRc = ixl->ix->DeleteTag( ixl->ix->GetTag( 0 ))) != XB_NO_ERROR ){
iErrorStop = 130;
@@ -1518,15 +1508,6 @@ xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
throw iRc;
}
- // unlock as necessary
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && GetTableLocked() ){
- if(( iRc = LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- }
- #endif
}
catch (xbInt16 iRc ){
@@ -1540,14 +1521,20 @@ xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
if( iAutoLock && GetTableLocked() ){
LockTable( XB_UNLOCK );
}
- #endif
+ #endif // XB_LOCKING_SUPPORT
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked ){
+ LockTable( XB_UNLOCK );
}
+ #endif // XB_LOCKING_SUPPORT
+
+
return iRc;
}
-
+#endif // XB_INDEX_SUPPORT
/************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
//! @brief Dump dbf file header.
/*!
This routine dumps dbf header information to the console.
@@ -1625,8 +1612,9 @@ xbInt16 xbDbf::DumpHeader( xbInt16 iOption ) const {
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 ){
@@ -1657,7 +1645,6 @@ xbInt16 xbDbf::DumpHeader( xbInt16 iOption ) const {
return XB_NO_ERROR;
}
-
/************************************************************************/
//! Dump record
/*!
@@ -1690,7 +1677,7 @@ xbInt16 xbDbf::DumpRecord( xbUInt32 ulRecNo, xbInt16 iOutputDest, xbInt16 iOutpu
if( iOutputFmt >= 1 ){
if( iOutputFmt == 2 ){
- sTemp = "RecNo";
+ sTemp = "RecNo,DEL";
for( i = 0; i < iNoOfFields; i++ ){
s2 = SchemaPtr[i].cFieldName;
s2.Trim();
@@ -1701,19 +1688,16 @@ xbInt16 xbDbf::DumpRecord( xbUInt32 ulRecNo, xbInt16 iOutputDest, xbInt16 iOutpu
}
if( RecordDeleted() )
- s2.Sprintf( "%ld Deleted", ulRecNo );
+ s2.Sprintf( "%ld,DEL", ulRecNo );
+ else
+ s2.Sprintf( "%ld,", ulRecNo );
- else{
- s2.Sprintf( "%ld ", ulRecNo );
- //xbString s3;
- for( i = 0; i < iNoOfFields; i++ ){
- GetField( i, sTemp );
- sTemp.Trim();
- s2.Sprintf( "%s,'%s'", s2.Str(), sTemp.Str());
- }
- xbase->WriteLogMessage( s2.Str(),iOutputDest );
+ 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;
}
@@ -1768,6 +1752,9 @@ xbInt16 xbDbf::DumpRecord( xbUInt32 ulRecNo, xbInt16 iOutputDest, xbInt16 iOutpu
/************************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+
+
#ifdef XB_LOCKING_SUPPORT
//! @brief Dump the table lock status
/*!
@@ -1884,11 +1871,11 @@ xbInt16 xbDbf::GetAutoCommit( xbInt16 iOption ) const {
/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
//! @brief Get Auto Lock setting.
/*!
\returns Auto lock setting.
*/
-#ifdef XB_LOCKING_SUPPORT
xbInt16 xbDbf::GetAutoLock() const{
return iAutoLock;
}
@@ -1903,7 +1890,7 @@ xbInt16 xbDbf::GetAutoLock() const{
xbUInt32 xbDbf::GetCreateMemoBlockSize() const {
return ulCreateMemoBlockSize;
}
-#endif
+#endif // XB_MEMO_SUPPORT
/************************************************************************/
//! @brief Get a pointer to the current index object.
@@ -2099,7 +2086,6 @@ xbInt32 xbDbf::GetFieldCnt() const {
//! @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 {
@@ -2152,7 +2138,7 @@ xbInt16 xbDbf::GetFirstRecord( xbInt16 iOption )
xbBool xbDbf::GetHeaderLocked() const {
return this->bHeaderLocked;
}
-#endif
+#endif // XB_LOCKING_SUPPORT
#ifdef XB_INDEX_SUPPORT
//! @brief Return pointer to list of index files for the table.
@@ -2204,6 +2190,7 @@ xbInt16 xbDbf::GetLastRecord( xbInt16 iOption )
/************************************************************************/
+#ifdef XB_LOCKING_SUPPORT
//! @brief Get lock flavor.
/*!
This routine is currently in place to provide structure for future locking
@@ -2217,10 +2204,12 @@ xbInt16 xbDbf::GetLockFlavor() const{
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.
@@ -2231,6 +2220,8 @@ xbBool xbDbf::GetMemoLocked() const {
else
return xbFalse;
}
+#endif // XB_LOCKING_SUPPORT
+
/************************************************************************/
//! @brief Get pointer to Memo object.
/*!
@@ -2240,30 +2231,31 @@ xbBool xbDbf::GetMemoLocked() const {
xbMemo * xbDbf::GetMemoPtr(){
return Memo;
}
-#endif
+
+#endif // XB_MEMO_SUPPORT
/************************************************************************/
-#ifdef XB_NDXINF_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 sNdxInfFileName Output string containing .INF file name.
+ \param sInfFileName Output string containing .INF file name.
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
-xbInt16 xbDbf::GetNdxInfFileName( xbString &sNdxInfFileName ){
+xbInt16 xbDbf::GetInfFileName( xbString &sInfFileName ){
- sNdxInfFileName = GetFqFileName();
- xbUInt32 lLen = sNdxInfFileName.Len();
+ sInfFileName = GetFqFileName();
+ xbUInt32 lLen = sInfFileName.Len();
if( lLen < 5 )
return XB_FILE_NOT_FOUND;
- sNdxInfFileName.PutAt(lLen-2, 'I');
- sNdxInfFileName.PutAt(lLen-1, 'N');
- sNdxInfFileName.PutAt(lLen, 'F');
+ sInfFileName.PutAt(lLen-2, 'I');
+ sInfFileName.PutAt(lLen-1, 'N');
+ sInfFileName.PutAt(lLen, 'F');
return XB_NO_ERROR;
}
@@ -2273,10 +2265,10 @@ xbInt16 xbDbf::GetNdxInfFileName( xbString &sNdxInfFileName ){
\returns List of .INF entries.
*/
-xbLinkListNode<xbString> * xbDbf::GetNdxInfList() const{
- return llNdxInfData.GetHeadNode();
+xbLinkListNode<xbString> * xbDbf::GetInfList() const{
+ return llInfData.GetHeadNode();
}
-#endif // XB_NDXINF_SUPPORT
+#endif // XB_INF_SUPPORT
/************************************************************************/
@@ -2362,7 +2354,7 @@ xbInt32 xbDbf::GetPhysicalIxCnt() const {
#endif
return lCnt;
}
-#endif
+#endif // XB_INDEX_SUPPORT
/************************************************************************/
@@ -2421,38 +2413,38 @@ xbInt16 xbDbf::GetRecord( xbUInt32 ulRecNo ){
try{
/* verify the file is open */
if( iDbfStatus == XB_CLOSED ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_NOT_OPEN;
throw iRc;
}
if( iDbfStatus == XB_UPDATED ){
if( GetAutoCommit() == 1 ){
if(( iRc = Commit()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
} else {
if(( iRc = Abort()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
}
}
if( ulRecNo > ulNoOfRecs || ulRecNo == 0L ){
- iErrorStop = 40;
+ iErrorStop = 130;
iRc = XB_INVALID_RECORD;
throw iRc;
}
if(( xbFseek( (uiHeaderLen+(( (xbInt64) ulRecNo-1L ) * uiRecordLen )), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
iRc = XB_SEEK_ERROR;
throw iRc;
}
if( xbFread( RecBuf, uiRecordLen, 1 ) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
iRc = XB_READ_ERROR;
throw iRc;
}
@@ -2483,6 +2475,24 @@ char * xbDbf::GetRecordBuf( xbInt16 iOpt ) const {
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.
/*!
@@ -2493,30 +2503,26 @@ xbInt16 xbDbf::GetRecordCnt( xbUInt32 & ulRecCnt )
{
xbInt16 iRc = XB_NO_ERROR;
xbInt16 iErrorStop = 0;
- xbBool bIlocked = xbFalse;
+
+ #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 = 10;
+ iErrorStop = 100;
throw iRc;
} else
- bIlocked = xbTrue;
+ bLocked = xbTrue;
}
+ #endif // XB_LOCKING_SUPPORT
if((iRc = ReadHeader(1,1)) != XB_NO_ERROR){
- LockHeader( XB_UNLOCK );
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
-
- if( iAutoLock && bIlocked ){
- if(( iRc = LockHeader( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 30;
- throw iRc;
- }
- }
- #endif
}
catch( xbInt16 iRc ){
if( iRc != XB_LOCK_FAILED ){
@@ -2526,6 +2532,13 @@ xbInt16 xbDbf::GetRecordCnt( xbUInt32 & ulRecCnt )
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
}
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ LockHeader( XB_UNLOCK );
+ }
+ #endif
+
ulRecCnt = ulNoOfRecs;
return iRc;
}
@@ -2538,15 +2551,17 @@ 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>
@@ -2559,6 +2574,7 @@ xbBool xbDbf::GetTableLocked() const {
xbLinkListNode<xbTag *> *xbDbf::GetTagList() const {
return llTags.GetHeadNode();
}
+#endif // XB_INDEX_SUPPORT
/************************************************************************/
//! @brief Get the table alias.
/*!
@@ -2578,37 +2594,37 @@ xbXBase * xbDbf::GetXbasePtr() const {
return xbase;
}
/************************************************************************/
-#ifdef XB_NDXINF_SUPPORT
+#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::LoadNdxInfData(){
+xbInt16 xbDbf::LoadInfData(){
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
try{
// create file name
- xbString sNdxInfFileName;
- if(( iRc = GetNdxInfFileName( sNdxInfFileName )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ 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( sNdxInfFileName ))
+ if( !fMd.FileExists( sInfFileName ))
return XB_NO_ERROR;
// open file file in read only mode
- if(( iRc = fMd.xbFopen( "r", sNdxInfFileName, GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 20;
+ if(( iRc = fMd.xbFopen( "r", sInfFileName, GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 110;
throw iRc;
}
// clear the linked list
- llNdxInfData.Clear();
+ llInfData.Clear();
// for each entry in the file, add a linked list item
xbString sRec;
@@ -2625,25 +2641,25 @@ xbInt16 xbDbf::LoadNdxInfData(){
sFn.ExtractElement(sRec.Str(), '=', 2 );
sFn.ZapChar( 0x0d );
sFn.ZapChar( 0x0a );
- llNdxInfData.InsertAtEnd( sFn );
+ llInfData.InsertAtEnd( sFn );
}
}
}
// close the file
if(( iRc = fMd.xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 120;
throw iRc;
}
} catch( xbInt16 iRc ){
xbString sMsg;
- sMsg.Sprintf( "xbdbf::LoadNdxInfData() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ 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_NDXINF_SUPPORT
+#endif // XB_INF_SUPPORT
/************************************************************************/
#ifdef XB_LOCKING_SUPPORT
@@ -2673,7 +2689,7 @@ xbInt16 xbDbf::LockAppend( xbInt16 iLockFunction )
if( iRc == XB_LOCK_FAILED )
return iRc;
else{
- iErrorStop = 120;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -2685,7 +2701,7 @@ xbInt16 xbDbf::LockAppend( xbInt16 iLockFunction )
if( iRc == XB_LOCK_FAILED ){
return iRc;
} else {
- iErrorStop = 130;
+ iErrorStop = 120;
throw iRc;
}
}
@@ -2695,13 +2711,12 @@ xbInt16 xbDbf::LockAppend( xbInt16 iLockFunction )
// } else { - other lock-table flavor options go here Clipper, Fox, etc - }
} else {
- iErrorStop = 190;
+ 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 */
@@ -2747,7 +2762,6 @@ xbInt16 xbDbf::LockAppend( xbInt16 iLockFunction )
return iRc;
}
-
/************************************************************************/
//! @brief Lock Header
/*!
@@ -2781,7 +2795,7 @@ xbInt16 xbDbf::LockHeader( xbInt16 iLockFunction )
}
} else {
- iErrorStop = 190;
+ iErrorStop = 130;
iRc = XB_INVALID_OPTION;
throw iRc;
}
@@ -2802,7 +2816,7 @@ xbInt16 xbDbf::LockHeader( xbInt16 iLockFunction )
throw iRc;
}
} else {
- iErrorStop = 290;
+ iErrorStop = 230;
iRc = XB_INVALID_OPTION;
throw iRc;
}
@@ -2825,7 +2839,7 @@ xbInt16 xbDbf::LockHeader( xbInt16 iLockFunction )
}
/************************************************************************/
#ifdef XB_INDEX_SUPPORT
-//! @brief Lock Index files.
+//! @brief Lock Index files.
/*!
This routine locks all the index files.
\param iLockFunction XB_LOCK<br>XB_UNLOCK
@@ -2858,13 +2872,25 @@ xbInt16 xbDbf::LockIndices( xbInt16 iLockFunction )
}
#endif
+ #ifdef XB_MDX_SUPPORT
+ if( *ixLI->sFmt == "MDX" ){
+ if( !ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_LOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 );
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbTrue );
+ }
+ }
+ #endif
+
} else if( iLockFunction == XB_UNLOCK ){
#ifdef XB_NDX_SUPPORT
if( *ixLI->sFmt == "NDX" ){
if( ixLI->ix->GetLocked()){
if(( iRc = ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
- ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 );
iErrorStop = 100;
throw iRc;
}
@@ -2872,6 +2898,19 @@ xbInt16 xbDbf::LockIndices( xbInt16 iLockFunction )
}
}
#endif
+
+ #ifdef XB_MDX_SUPPORT
+ if( *ixLI->sFmt == "MDX" ){
+ if( ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbFalse );
+ }
+ }
+ #endif
+
}
ixLI = ixLI->next;
}
@@ -2937,14 +2976,14 @@ xbInt16 xbDbf::LockRecord( xbInt16 iLockFunction, xbUInt32 ulRecNo )
if( iRc == XB_LOCK_FAILED ){
return iRc;
} else {
- iErrorStop = 130;
+ iErrorStop = 110;
throw iRc;
}
}
// other lock-table flavor options go here Clipper, Fox, etc
} else {
- iErrorStop = 190;
+ iErrorStop = 120;
iRc = XB_INVALID_OPTION;
throw iRc;
}
@@ -2953,7 +2992,7 @@ xbInt16 xbDbf::LockRecord( xbInt16 iLockFunction, xbUInt32 ulRecNo )
iRc = lloRecLocks.InsertKey( ulRecNo );
if( iRc != XB_NO_ERROR ){
xbLock( XB_UNLOCK, LK4026531838 - ulRecNo, 1 );
- iErrorStop = 140;
+ iErrorStop = 130;
throw iRc;
}
@@ -2967,11 +3006,11 @@ xbInt16 xbDbf::LockRecord( xbInt16 iLockFunction, xbUInt32 ulRecNo )
if( GetLockFlavor() == LK_DBASE ){
iRc = xbLock( XB_UNLOCK, LK4026531838 - ulRecNo, 1 );
if( iRc != XB_NO_ERROR ){
- iErrorStop = 220;
+ iErrorStop = 210;
throw iRc;
}
} else {
- iErrorStop = 290;
+ iErrorStop = 220;
iRc = XB_INVALID_OPTION;
throw iRc;
}
@@ -2998,11 +3037,9 @@ xbInt16 xbDbf::LockRecord( xbInt16 iLockFunction, xbUInt32 ulRecNo )
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
}
-
return iRc;
}
-
/************************************************************************/
//! @brief Lock table.
/*!
@@ -3113,6 +3150,7 @@ xbInt16 xbDbf::LockTable( xbInt16 iLockFunction )
return iRc;
}
+#endif // XB_LOCKING_SUPPORT
/************************************************************************/
@@ -3121,6 +3159,8 @@ xbInt16 xbDbf::LockTable( xbInt16 iLockFunction )
\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;
@@ -3153,34 +3193,34 @@ 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 = 10;
+ iErrorStop = 100;
throw iRc;
}
// do any .INF data things on the file, like open indices
- #ifdef XB_NDXINF_SUPPORT
- if(( iRc = LoadNdxInfData()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ #ifdef XB_INF_SUPPORT
+ if(( iRc = LoadInfData()) != XB_NO_ERROR ){
+ iErrorStop = 110;
throw iRc;
}
- xbUInt32 llNodeCnt = llNdxInfData.GetNodeCnt();
+ xbUInt32 llNodeCnt = llInfData.GetNodeCnt();
if( llNodeCnt > 0 ){
xbString s2;
- xbLinkListNode<xbString> * llN = llNdxInfData.GetHeadNode();
+ 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 = 100;
+ iErrorStop = 120;
throw iRc ;
}
+ #endif // XB_NDX_SUPPORT
llN = llN->GetNextNode();
}
}
- #endif // XB_NDXINF_SUPPORT
+ #endif // XB_INF_SUPPORT
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -3190,7 +3230,6 @@ xbInt16 xbDbf::Open( const xbString & sTableName, const xbString & sAlias ){
}
return iRc;
}
-#endif // XB_LOCKING_SUPPORT
/************************************************************************/
#ifdef XB_INDEX_SUPPORT
@@ -3216,7 +3255,7 @@ xbInt16 xbDbf::OpenIndex( const xbString &sIxType, const xbString &sFileName ){
sType.ToUpperCase();
if( sType == "" ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_INVALID_OPTION;
throw iRc;
@@ -3224,7 +3263,7 @@ xbInt16 xbDbf::OpenIndex( const xbString &sIxType, const xbString &sFileName ){
} else if( sType == "NDX" ){
pIx = new xbIxNdx( this );
if(( iRc = pIx->Open( sFileName )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
#endif
@@ -3234,24 +3273,24 @@ xbInt16 xbDbf::OpenIndex( const xbString &sIxType, const xbString &sFileName ){
pIx = new xbIxMdx( this );
if(( iRc = pIx->Open( sFileName )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
#endif
} else {
- iErrorStop = 40;
+ iErrorStop = 130;
iRc = XB_INVALID_OPTION;
throw iRc;
}
if(( iRc = AddIndex( pIx, sIxType )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
if(( iRc = UpdateTagList()) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
pCurIx = pIx;
@@ -3304,38 +3343,41 @@ xbInt16 xbDbf::Pack( xbUInt32 &ulDeletedRecCnt )
xbUInt32 ulRecCnt = 0;
ulDeletedRecCnt = 0;
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif // XB_LOCKING_SUPPORT
+
try{
if( !FileIsOpen() ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_DBF_FILE_NOT_OPEN;
throw iRc;
}
#ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
+ if( iAutoLock && !bTableLocked ){
if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
+ } else {
+ bLocked = xbTrue;
}
}
#endif
if(( iRc = GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
xbBool bDone = xbFalse;
for( xbUInt32 ulI = 1; ulI <= ulRecCnt && !bDone; ulI++ ){
-
if(( iRc = GetRecord( ulI )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
-
if( RecordDeleted()){
-
ulDeletedRecCnt++;
if( ulI > ulLastMovedRec )
ulStartPos = ulI;
@@ -3352,24 +3394,24 @@ xbInt16 xbDbf::Pack( xbUInt32 &ulDeletedRecCnt )
bDone = xbTrue;
}
else{
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
if( ulMoveRec > 0 ){
if(( iRc = DeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
if(( iRc = PutRecord( ulMoveRec )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw iRc;
}
if(( iRc = UndeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 170;
throw iRc;
}
if(( iRc = PutRecord( ulI )) != XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 180;
throw iRc;
}
ulLastPackedRec = ulI;
@@ -3391,20 +3433,20 @@ xbInt16 xbDbf::Pack( xbUInt32 &ulDeletedRecCnt )
// rewrite the header record
if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 200;
+ iErrorStop = 190;
throw iRc;
}
// truncate the file to the new size
if(( iRc = xbTruncate( uiHeaderLen + uiRecordLen * ulLastPackedRec )) != XB_NO_ERROR ){
- iErrorStop = 210;
+ iErrorStop = 200;
throw iRc;
}
}
if( ulNoOfRecs > 0 ){
if(( iRc = GetRecord( 1 )) != XB_NO_ERROR ){
- iErrorStop = 220;
+ iErrorStop = 210;
throw iRc;
}
} else {
@@ -3415,21 +3457,12 @@ xbInt16 xbDbf::Pack( xbUInt32 &ulDeletedRecCnt )
#ifdef XB_MEMO_SUPPORT
if( iMemoFieldCnt > 0 ){
if(( iRc = Memo->PackMemo( 0 )) != XB_NO_ERROR ){
- iErrorStop = 230;
+ iErrorStop = 220;
throw iRc;
}
}
#endif // XB_MEMO_SUPPORT
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- if(( iRc = LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 240;
- throw iRc;
- }
- }
-
- #endif
}
catch (xbInt16 iRc ){
if( iRc != XB_LOCK_FAILED ){
@@ -3439,6 +3472,11 @@ xbInt16 xbDbf::Pack( xbUInt32 &ulDeletedRecCnt )
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
}
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ LockTable( XB_UNLOCK );
+ }
+ #endif
return iRc;
}
@@ -3492,24 +3530,17 @@ xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
}
/* lock the database */
#ifdef XB_LOCKING_SUPPORT
- // xbInt16 iAutoLock = GetAutoLock();
if( iAutoLock && !bTableLocked ){
if(( iRc = LockHeader( XB_LOCK )) != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else{
- iErrorStop = 140;
throw iRc;
- }
}
+ }
+ #endif // XB_LOCKING_SUPPORT
- if(( iRc = ReadHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 150;
- LockHeader( XB_UNLOCK );
- throw iRc;
- }
+ if(( iRc = ReadHeader( 1, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
}
- #endif
// verify valid record number request
if( ulRecNo > ulNoOfRecs || ulRecNo == 0L ){
@@ -3519,30 +3550,20 @@ xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
}
#ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- if( !bTableLocked ){
- if(( iRc = LockRecord( XB_LOCK, ulRecNo )) != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else{
- iErrorStop = 170;
- throw iRc;
- }
+ 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 ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else{
- iErrorStop = 180;
- throw iRc;
- }
+ iErrorStop = 180;
+ throw iRc;
}
- #endif
+ #endif // XB_INDEX_SUPPORT
}
- #endif
+ #endif // XB_LOCKING_SUPPORT
// build keys, check for duplicate keys, add keys
#ifdef XB_INDEX_SUPPORT
@@ -3559,7 +3580,7 @@ xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
iErrorStop = 200;
throw iRc;
}
- return XB_KEY_NOT_UNIQUE;
+ throw XB_KEY_NOT_UNIQUE;
}
ixList = ixList->next;
}
@@ -3576,9 +3597,6 @@ xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
ixList = GetIxList();
while( ixList ){
-
-// if(( iRc = ixList->ix->DeleteKeys( ulCurRec )) != XB_NO_ERROR ){
-
if(( iRc = ixList->ix->DeleteKeys()) != XB_NO_ERROR ){
iErrorStop = 220;
throw iRc;
@@ -3600,19 +3618,6 @@ xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
}
}
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !bTableLocked ){
- if(( iRc = LockHeader( XB_UNLOCK )) != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else{
- iErrorStop = 230;
- throw iRc;
- }
- }
- }
- #endif
-
// update record
iRc = xbFseek( (uiHeaderLen+(( (xbInt64) ulRecNo-1L ) * uiRecordLen )),0 );
if( iRc != XB_NO_ERROR ){
@@ -3635,47 +3640,30 @@ xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
}
#endif
- // unlock record
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- #ifdef XB_INDEX_SUPPORT
- LockIndices( XB_UNLOCK );
- #endif // XB_INDEX_SUPPORT
- if( !bTableLocked ){
- if(( iRc = LockRecord( XB_UNLOCK, ulRecNo )) != XB_NO_ERROR ){
- if( iRc == XB_LOCK_FAILED )
- return iRc;
- else{
- iErrorStop = 270;
- throw iRc;
- }
- }
- }
- }
-
- #endif
ulCurRec = ulRecNo;
iDbfStatus = XB_OPEN;
}
catch (xbInt16 iRc ){
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- LockHeader( XB_UNLOCK );
- LockAppend( XB_UNLOCK );
- LockRecord( XB_UNLOCK, ulRecNo );
- LockIndices( XB_UNLOCK );
- }
- #endif // XB_LOCKING_SUPPORT
-
- if( iRc != XB_LOCK_FAILED ){
+ 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;
}
@@ -3788,14 +3776,14 @@ void xbDbf::ResetNoOfRecords() {
}
/************************************************************************/
-#ifdef XB_NDXINF_SUPPORT
+#ifdef XB_INF_SUPPORT
// @brief Update .INF data file.
/*
Protected method.
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
-xbInt16 xbDbf::SaveNdxInfData(){
+xbInt16 xbDbf::SaveInfData(){
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
@@ -3803,17 +3791,17 @@ xbInt16 xbDbf::SaveNdxInfData(){
try{
- xbUInt32 llNodeCnt = llNdxInfData.GetNodeCnt();
+ xbUInt32 llNodeCnt = llInfData.GetNodeCnt();
- xbString sNdxInfFileName;
- if(( iRc = GetNdxInfFileName( sNdxInfFileName )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ xbString sInfFileName;
+ if(( iRc = GetInfFileName( sInfFileName )) != XB_NO_ERROR ){
+ iErrorStop = 100;
throw iRc;
}
// open the file
- if(( iRc = fMd.xbFopen( "w", sNdxInfFileName, GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 20;
+ if(( iRc = fMd.xbFopen( "w", sInfFileName, GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 110;
throw iRc;
}
@@ -3821,13 +3809,12 @@ xbInt16 xbDbf::SaveNdxInfData(){
xbString s2;
s2.Sprintf( "[dbase]%c%c", 0x0d, 0x0a );
if(( iRc = fMd.xbFputs( s2 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
-
// for each entry in the linked list, write a line
- xbLinkListNode<xbString> * llN = llNdxInfData.GetHeadNode();
+ xbLinkListNode<xbString> * llN = llInfData.GetHeadNode();
for( xbUInt32 i = 0; i < llNodeCnt; i++ ){
s2 = llN->GetKey();
if( i > 0 )
@@ -3836,7 +3823,7 @@ xbInt16 xbDbf::SaveNdxInfData(){
s1.Sprintf( "NDX=%s%c%c", s2.Str(), 0x0d, 0x0a );
if(( iRc = fMd.xbFputs( s1 )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
llN = llN->GetNextNode();
@@ -3844,7 +3831,7 @@ xbInt16 xbDbf::SaveNdxInfData(){
// close the file
if(( iRc = fMd.xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
@@ -3852,13 +3839,13 @@ xbInt16 xbDbf::SaveNdxInfData(){
if( fMd.FileIsOpen())
fMd.xbFclose();
xbString sMsg;
- sMsg.Sprintf( "xbdbf::SaveNdxInfData() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ 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_NDXINF_SUPPORT
+#endif // XB_INF_SUPPORT
/************************************************************************/
//! @brief Set auto commit.
/*!
@@ -3884,14 +3871,14 @@ xbInt16 xbDbf::SetAutoCommit( xbBool iAutoCommit ) {
-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
/************************************************************************/
@@ -3946,9 +3933,11 @@ void xbDbf::SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag ){
\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.
@@ -3957,10 +3946,11 @@ void xbDbf::SetHeaderLocked( xbBool bHeaderLocked ){
\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.
@@ -3968,10 +3958,11 @@ void xbDbf::SetLockFlavor( xbInt16 iLockFlavor ){
\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.
/*!
@@ -4044,8 +4035,8 @@ void xbDbf::UpdateSchemaIxFlag( xbInt16 iFldNo, unsigned char cVal ){
SchemaPtr[iFldNo].cIxFlag = cVal;
}
-#endif // XB_INDEX_SUPPORT
/************************************************************************/
+
//! @brief Update tag list.
/*!
This routine updates the internal tag list of open index tags.
@@ -4086,6 +4077,7 @@ xbInt16 xbDbf::UpdateTagList(){
}
return iRc;
}
+#endif // XB_INDEX_SUPPORT
/************************************************************************/
// @brief Write Header
@@ -4094,8 +4086,8 @@ xbInt16 xbDbf::UpdateTagList(){
\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.
+ \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 )
@@ -4125,7 +4117,6 @@ xbInt16 xbDbf::WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption )
return XB_NO_ERROR;
}
-
/************************************************************************/
//! @brief Zap (remove) everything from the file,
/*!
@@ -4137,16 +4128,20 @@ 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 = 10;
+ 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 = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -4160,13 +4155,13 @@ xbInt16 xbDbf::Zap(){
// rewrite the header record
if(( iRc = WriteHeader( 1, 1 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
// truncate the file to the new size
if(( iRc = xbTruncate( uiHeaderLen )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
BlankRecord();
@@ -4175,7 +4170,7 @@ xbInt16 xbDbf::Zap(){
#ifdef XB_MEMO_SUPPORT
if( iMemoFieldCnt ){
if(( iRc = Memo->Zap()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
}
@@ -4197,14 +4192,6 @@ xbInt16 xbDbf::Zap(){
}
#endif // XB_INDEX_SUPPORT
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock ){
- if(( iRc = LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 70;
- throw iRc;
- }
- }
- #endif // XB_LOCKING_SUPPORT
}
catch (xbInt16 iRc ){
if( iRc != XB_LOCK_FAILED ){
@@ -4214,6 +4201,11 @@ xbInt16 xbDbf::Zap(){
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
}
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ LockTable( XB_UNLOCK );
+ }
+ #endif // XB_LOCKING_SUPPORT
return iRc;
}
/************************************************************************/
diff --git a/src/core/xbdbf3.cpp b/src/core/xbdbf3.cpp
index cbbff1f..504542f 100755
--- a/src/core/xbdbf3.cpp
+++ b/src/core/xbdbf3.cpp
@@ -47,7 +47,7 @@ xbDbf3::~xbDbf3() {};
\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 ){
@@ -71,33 +71,46 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
/* check if the file already exists */
if( FileExists( 0 )){
if( !iOverlay ){
- iErrorStop = 10;
+ iErrorStop = 100;
rc = XB_FILE_EXISTS;
throw rc;
}
- #ifdef XB_NDXINF_SUPPORT
- // remove the metadata file if there is one
+
+ // remove other files if they exist
xbString sMname = sNfn;
xbUInt32 iMnameLen = sMname.Len();
- sMname.PutAt( iMnameLen-2, 'X' );
- sMname.PutAt( iMnameLen-1, 'B' );
- sMname.PutAt( iMnameLen, 'M' );
+ 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();
- #endif // XB_NDXINF_SUPPORT
+
+ 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 = 20;
+ iErrorStop = 110;
throw rc;
}
rc = ValidateSchema( pSchema );
if( rc < 0 ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
} else
iNoOfFields = rc;
@@ -121,7 +134,7 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
xbFile fTemp( xbase );
fTemp.SetFileName( sMfn );
if( fTemp.FileExists() && !iOverlay ){
- iErrorStop = 40;
+ iErrorStop = 130;
rc = XB_FILE_EXISTS;
throw rc;
}
@@ -129,7 +142,7 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
Memo = new xbMemoDbt3( this, fTemp.GetFqFileName());
if(( rc = Memo->CreateMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw rc;
}
}
@@ -145,18 +158,18 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
#endif
if(( rc = xbFopen( "w+b", iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw rc;
}
uiRecordLen++; /* add one byte for 0x0D */
if(( RecBuf = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw rc;
}
if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 80;
+ iErrorStop = 170;
rc = XB_NO_MEMORY;
throw rc;
}
@@ -173,12 +186,12 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
/* write the header prolog */
if(( rc = WriteHeader( 0, 0 )) != XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 180;
rc = XB_WRITE_ERROR;
throw rc;
}
if((SchemaPtr = (xbSchemaRec *) malloc( (size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
- iErrorStop = 100;
+ iErrorStop = 190;
rc = XB_NO_MEMORY;
throw rc;
}
@@ -195,7 +208,7 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
SchemaPtr[i].cNoOfDecs = (unsigned char) pSchema[i].iNoOfDecs;
if( SchemaPtr[i].cNoOfDecs > SchemaPtr[i].cFieldLen ){
- iErrorStop = 110;
+ iErrorStop = 200;
rc = XB_WRITE_ERROR;
throw rc;
}
@@ -204,13 +217,13 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
k += SchemaPtr[i].cFieldLen;
if(( xbFwrite( &SchemaPtr[i].cFieldName, 1, 11 )) != XB_NO_ERROR ) {
- iErrorStop = 110;
+ iErrorStop = 210;
rc = XB_WRITE_ERROR;
throw rc;
}
if(( xbFwrite( &SchemaPtr[i].cType, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 120;
+ iErrorStop = 220;
rc = XB_WRITE_ERROR;
throw rc;
}
@@ -219,13 +232,13 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
xbFputc( 0x00 );
if(( xbFwrite( &SchemaPtr[i].cFieldLen, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 130;
+ iErrorStop = 230;
rc = XB_WRITE_ERROR;
throw rc;
}
if(( xbFwrite( &SchemaPtr[i].cNoOfDecs, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 140;
+ iErrorStop = 240;
rc = XB_WRITE_ERROR;
throw rc;
}
@@ -240,7 +253,7 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
/* write the header terminator */
if(( xbFputc( XB_CHARHDR )) != XB_NO_ERROR ){
- iErrorStop = 150;
+ iErrorStop = 250;
rc = XB_WRITE_ERROR;
throw rc;
}
@@ -321,7 +334,7 @@ xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
/* verify the file is not already open */
if( iDbfStatus != XB_CLOSED ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_ALREADY_OPEN;
throw iRc;
}
@@ -330,32 +343,32 @@ xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
this->sAlias = sAlias;
if( !FileExists()){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
if(( iRc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
/* open the file */
if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
/* copy the header into memory */
if(( iRc = ReadHeader( 1, 0 )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
/* check the version */
if(( cVersion & 0x07 ) != 3 ){
// if( xFileVersion != 3 && xFileVersion != 4 ){
- iErrorStop = 60;
+ iErrorStop = 150;
iRc = XB_FILE_TYPE_NOT_SUPPORTED;
throw iRc;
}
@@ -369,19 +382,19 @@ xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
}
if(( RecBuf = (char *) malloc( (size_t) uiRecordLen )) == NULL ){
- iErrorStop = 70;
+ iErrorStop = 160;
iRc = XB_NO_MEMORY;
throw iRc;
}
if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ) {
- iErrorStop = 80;
+ iErrorStop = 170;
iRc = XB_NO_MEMORY;
throw iRc;
}
if((SchemaPtr=(xbSchemaRec *)malloc( (size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
- iErrorStop = 90;
+ iErrorStop = 180;
iRc = XB_NO_MEMORY;
throw iRc;
}
@@ -410,7 +423,7 @@ xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
ulCurRec = 0L;
iDbfStatus = XB_OPEN;
if(( iRc = BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 190;
throw iRc;
}
@@ -430,11 +443,11 @@ xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
Memo = new xbMemoDbt3( this, fTemp.GetFqFileName());
if(( iRc = Memo->OpenMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 200;
throw iRc;
}
}
- #endif
+ #endif // XB_MEMO_SUPPORT
}
catch ( xbInt16 iRc )
@@ -458,13 +471,13 @@ xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
}
InitVars();
-#ifdef XB_MEMO_SUPPORT
+ #ifdef XB_MEMO_SUPPORT
if( Memo ){
Memo->CloseMemoFile();
delete Memo;
Memo = NULL;
}
-#endif
+ #endif // XB_MEMO_SUPPORT
}
if( iRc == XB_NO_ERROR )
@@ -472,6 +485,179 @@ xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
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->psTblName->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
@@ -540,9 +726,9 @@ xbInt16 xbDbf3::ValidateSchema( xbSchema * s ){
if( s[i].cType != 'C' &&
s[i].cType != 'N' &&
s[i].cType != 'D' &&
-#ifdef XB_MEMO_SUPPORT
+ #ifdef XB_MEMO_SUPPORT
s[i].cType != 'M' &&
-#endif /* XB_MEMO_SUPPORT */
+ #endif // XB_MEMO_SUPPORT
s[i].cType != 'L' ){
return XB_INVALID_FIELD_TYPE;
}
@@ -559,13 +745,17 @@ xbInt16 xbDbf3::ValidateSchema( xbSchema * s ){
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
+ #ifdef XB_MEMO_SUPPORT
else if(s[i].cType == 'M'){
s[i].iFieldLen = 10;
s[i].iNoOfDecs = 0;
}
-#endif /* XB_MEMO_SUPPORT */
+ #endif // XB_MEMO_SUPPORT
uiRecordLen += s[i].iFieldLen;
i++;
diff --git a/src/core/xbdbf4.cpp b/src/core/xbdbf4.cpp
index c421add..2b49be9 100755
--- a/src/core/xbdbf4.cpp
+++ b/src/core/xbdbf4.cpp
@@ -71,33 +71,46 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
/* check if the file already exists */
if( FileExists( 0 )){
if( !iOverlay ){
- iErrorStop = 10;
+ iErrorStop = 100;
rc = XB_FILE_EXISTS;
throw rc;
}
- #ifdef XB_NDXINF_SUPPORT
- // remove the metadata file if there is one
+
+ // remove other files if they exist
xbString sMname = sNfn;
xbUInt32 iMnameLen = sMname.Len();
- sMname.PutAt( iMnameLen-2, 'X' );
- sMname.PutAt( iMnameLen-1, 'B' );
- sMname.PutAt( iMnameLen, 'M' );
+ 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();
- #endif // XB_NDXINF_SUPPORT
+
+ 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 = 20;
+ iErrorStop = 110;
throw rc;
}
rc = ValidateSchema( pSchema );
if( rc < 0 ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
} else
iNoOfFields = rc;
@@ -121,7 +134,7 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
xbFile fTemp( xbase );
fTemp.SetFileName( sMfn );
if( fTemp.FileExists() && !iOverlay ){
- iErrorStop = 40;
+ iErrorStop = 130;
rc = XB_FILE_EXISTS;
throw rc;
}
@@ -129,7 +142,7 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
Memo = new xbMemoDbt4( this, fTemp.GetFqFileName());
if(( rc = Memo->CreateMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw rc;
}
}
@@ -145,18 +158,18 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
#endif
if(( rc = xbFopen( "w+b", iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw rc;
}
uiRecordLen++; /* add one byte for 0x0D */
if(( RecBuf = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw rc;
}
if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 80;
+ iErrorStop = 170;
rc = XB_NO_MEMORY;
throw rc;
}
@@ -176,12 +189,12 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
/* write the header prolog */
if(( rc = WriteHeader( 0, 0 )) != XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 180;
rc = XB_WRITE_ERROR;
throw rc;
}
if((SchemaPtr=(xbSchemaRec *)malloc( (size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
- iErrorStop = 100;
+ iErrorStop = 190;
rc = XB_NO_MEMORY;
throw rc;
}
@@ -207,13 +220,13 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
k += SchemaPtr[i].cFieldLen;
if(( xbFwrite( &SchemaPtr[i].cFieldName, 1, 11 )) != XB_NO_ERROR ) {
- iErrorStop = 120;
+ iErrorStop = 200;
rc = XB_WRITE_ERROR;
throw rc;
}
if(( xbFwrite( &SchemaPtr[i].cType, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 130;
+ iErrorStop = 210;
rc = XB_WRITE_ERROR;
throw rc;
}
@@ -222,13 +235,13 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
xbFputc( 0x00 );
if(( xbFwrite( &SchemaPtr[i].cFieldLen, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 140;
+ iErrorStop = 220;
rc = XB_WRITE_ERROR;
throw rc;
}
if(( xbFwrite( &SchemaPtr[i].cNoOfDecs, 1, 1 )) != XB_NO_ERROR ) {
- iErrorStop = 150;
+ iErrorStop = 230;
rc = XB_WRITE_ERROR;
throw rc;
}
@@ -243,7 +256,7 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
/* write the header terminator */
if(( xbFputc( XB_CHARHDR )) != XB_NO_ERROR ){
- iErrorStop = 160;
+ iErrorStop = 240;
rc = XB_WRITE_ERROR;
throw rc;
}
@@ -321,7 +334,7 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
try{
/* verify the file is not already open */
if( iDbfStatus != XB_CLOSED ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_ALREADY_OPEN;
throw iRc;
}
@@ -330,32 +343,32 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
this->sAlias = sAlias;
if( !FileExists()){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
if(( iRc = xbase->AddTblToTblList( this, GetFqFileName(), sAlias )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
/* open the file */
if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
/* copy the header into memory */
if(( iRc = ReadHeader( 1, 0 )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
/* check the version */
//if(( xFileVersion = DetermineXbaseTableVersion( cVersion )) != 4 ){
if(( cVersion & 0x07 ) != 3 ){
- iErrorStop = 60;
+ iErrorStop = 150;
iRc = XB_FILE_TYPE_NOT_SUPPORTED;
throw iRc;
}
@@ -369,19 +382,19 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
}
if(( RecBuf = (char *) malloc( uiRecordLen )) == NULL ){
- iErrorStop = 70;
+ iErrorStop = 160;
iRc = XB_NO_MEMORY;
throw iRc;
}
if(( RecBuf2 = (char *) malloc( uiRecordLen )) == NULL ) {
- iErrorStop = 80;
+ iErrorStop = 170;
iRc = XB_NO_MEMORY;
throw iRc;
}
if((SchemaPtr=(xbSchemaRec *)malloc((size_t) iNoOfFields * sizeof( xbSchemaRec ))) == NULL){
- iErrorStop = 90;
+ iErrorStop = 180;
iRc = XB_NO_MEMORY;
throw iRc;
}
@@ -411,7 +424,7 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
ulCurRec = 0L;
iDbfStatus = XB_OPEN;
if(( iRc = BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 190;
throw iRc;
}
@@ -432,7 +445,7 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
Memo = new xbMemoDbt4( this, fTemp.GetFqFileName());
if(( iRc = Memo->OpenMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 200;
throw iRc;
}
}
@@ -448,7 +461,7 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
sIxFileName.PutAt( lLen-1, 'D' );
sIxFileName.PutAt( lLen, 'X' );
if(( iRc = OpenIndex( "MDX", sIxFileName )) != XB_NO_ERROR ){
- iErrorStop = 120;
+ iErrorStop = 210;
throw iRc;
}
}
@@ -491,6 +504,279 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
return iRc;
}
+/************************************************************************/
+//! @brief Rename table.
+/*!
+ This routine renames a give table, associated memo and inf files
+ \param sNewName - New file name.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+xbInt16 xbDbf4::Rename( const xbString sNewName ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+ xbString sNewDbf;
+
+ #ifdef XB_MEMO_SUPPORT
+ xbString sNewDbt;
+ xbBool bDbtRenamed = xbFalse;
+ xbString sThisDbt;
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ xbString sNewMdx;
+ xbBool bMdxRenamed = xbFalse;
+ xbString sThisMdx;
+ #endif
+
+ #ifdef XB_INF_SUPPORT
+ xbString sNewInf;
+ xbString sThisInf;
+ xbBool bInfRenamed = xbFalse;
+ #endif // XB_INF_SUPPORT
+
+ xbBool bDbfRenamed = xbFalse;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif // XB_LOCKIN_SUPPORT
+
+
+ try{
+
+ xbString sDir;
+ xbString sFile;
+ xbString sExt;
+ xbString sNewNameWoExt;
+ sNewNameWoExt.Set( sNewName );
+ if( sNewName.Pos( ".DBF" ) > 0 )
+ sNewNameWoExt.Left( sNewName.Len() - 4 );
+
+// std::cout << "NewName wo ext = [" << sNewNameWoExt.Str() << "]\n";
+
+ GetFileDirPart ( sDir );
+ GetFileNamePart( sFile );
+ GetFileExtPart ( sExt );
+
+ sNewDbf.Sprintf( "%s%s.DBF", sDir.Str(), sNewNameWoExt.Str());
+
+ #ifdef XB_MEMO_SUPPORT
+ sNewDbt.Sprintf( "%s%s.DBT", sDir.Str(), sNewNameWoExt.Str());
+ if( FileExists( sNewDbt )) return XB_FILE_EXISTS;
+ sThisDbt.Sprintf( "%s%s.DBT", sDir.Str(), sFile.Str());
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ sNewMdx.Sprintf( "%s%s.MDX", sDir.Str(), sNewNameWoExt.Str());
+ if( FileExists( sNewMdx )) return XB_FILE_EXISTS;
+ sThisMdx.Sprintf( "%s%s.MDX", sDir.Str(), sFile.Str());
+ #endif
+
+ #ifdef XB_INF_SUPPORT
+ sNewInf.Sprintf( "%s%s.INF", sDir.Str(), sNewNameWoExt.Str());
+ if( FileExists( sNewInf )) return XB_FILE_EXISTS;
+ sThisInf.Sprintf( "%s%s.INF", sDir.Str(), sFile.Str());
+ #endif // XB_INF_SUPPORT
+
+
+/*
+ std::cout << "xbDbf3::Rename dir = [" << sDir.Str() << "] file = [" << sFile.Str() << "] ext = [" << sExt.Str() << "]\n";
+ std::cout << "xbDbf3::Rename new dbf = [" << sNewDbf.Str() << "]\n";
+ std::cout << "xbDbf3::Rename new dbt = [" << sNewDbt.Str() << "]\n";
+ std::cout << "xbDbf3::Rename new inf = [" << sNewInf.Str() << "]\n";
+ std::cout << "xbDbf3::Rename new mdx = [" << sNewMdx.Str() << "]\n";
+*/
+
+ if( FileExists( sNewDbf )) return XB_FILE_EXISTS;
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( GetAutoLock() ){
+ if(( iRc = LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ bLocked = xbTrue;
+ }
+ #endif
+
+ xbInt16 iOpenMode = GetOpenMode();
+ xbInt16 iShareMode = GetShareMode();
+ xbBool bWasOpen = xbFalse;
+ if( FileIsOpen() ){
+ bWasOpen = xbTrue;
+ if(( iRc = xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+
+ if(( iRc = xbRename( GetFqFileName().Str(), sNewDbf.Str())) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ } else {
+ bDbfRenamed = xbTrue;
+ }
+ xbString sNameWext;
+ sNameWext.Sprintf( "%s.DBF", sNewNameWoExt.Str());
+ SetFileName( sNameWext );
+
+
+ if( bWasOpen ){
+ if(( iRc = xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+ #ifdef XB_MEMO_SUPPORT
+ if( FileExists( sThisDbt )){
+ if(( iRc = Memo->xbFseek( 8, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ sNewNameWoExt.PadRight( ' ', 8 );
+ for( int i = 1; i < 9; i++ )
+ Memo->xbFputc( sNewNameWoExt[i] );
+
+ if( bWasOpen ){
+ if(( iRc = Memo->xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+
+ Memo->SetFileName( sNewDbt );
+ if(( xbRename( sThisDbt.Str(), sNewDbt.Str())) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+ if( bWasOpen ){
+ if(( iRc = Memo->xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ }
+
+ bDbtRenamed = xbTrue;
+ }
+ #endif
+
+ #ifdef XB_MDX_SUPPORT
+ if( FileExists( sThisMdx )){
+ xbIxMdx *ixMdx;
+ xbString s;
+ xbBool bMdxFound = xbFalse;
+ xbIxList *ixList = GetIxList();
+ while( ixList && !bMdxFound ){
+ s = ixList->sFmt->Str();
+ if( s == "MDX" ){
+ ixMdx = (xbIxMdx *) ixList->ix;
+ bMdxFound = xbTrue;
+ }
+ }
+
+ if( bMdxFound ){
+ if(( iRc = ixMdx->xbFseek( 4, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ sNewNameWoExt.PadRight( ' ', 8 );
+ for( int i = 1; i < 9; i++ )
+ ixMdx->xbFputc( sNewNameWoExt[i] );
+
+ if( bWasOpen ){
+ if(( iRc = ixMdx->xbFclose()) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ }
+
+ ixMdx->SetFileName( sNewMdx );
+ if(( xbRename( sThisMdx.Str(), sNewMdx.Str())) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+
+ if( bWasOpen ){
+ if(( iRc = ixMdx->xbFopen( iOpenMode, iShareMode )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ }
+ bMdxRenamed = xbTrue;
+ }
+ }
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_INF_SUPPORT
+ if( FileExists( sThisInf )){
+ if(( xbRename( sThisInf.Str(), sNewInf.Str())) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ } else {
+ bInfRenamed = xbTrue;
+ }
+ }
+ #endif // XB_INF_SUPPORT
+
+ // rename the table in the table list
+ xbTblList *tle = xbase->GetTblListEntry( this );
+ if( tle ){
+ tle->psTblName->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
@@ -573,6 +859,11 @@ xbInt16 xbDbf4::ValidateSchema( xbSchema * s ){
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;
diff --git a/src/core/xbexp.cpp b/src/core/xbexp.cpp
index d3e8ca8..23bc7c6 100755
--- a/src/core/xbexp.cpp
+++ b/src/core/xbexp.cpp
@@ -83,7 +83,7 @@ xbInt16 xbExp::CalcFunctionResultLen( xbExpNode * n ) const{
n->GetNodeText( sNodeText );
char cReturnType = 0;
if(( iRc = xbase->GetFunctionInfo( sNodeText, cReturnType, iReturnLenCalc, lReturnLenVal )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -95,7 +95,7 @@ xbInt16 xbExp::CalcFunctionResultLen( xbExpNode * n ) const{
// use the length from the child node identified in lReturnLenVal
xbExpNode *nChild = n->GetChild( (xbUInt32) lReturnLenVal - 1 );
if( !nChild ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -106,7 +106,7 @@ xbInt16 xbExp::CalcFunctionResultLen( xbExpNode * n ) const{
// use the length from the child node identified in lReturnLenVal
xbExpNode *nChild = n->GetChild( (xbUInt32) lReturnLenVal - 1 );
if( !nChild ){
- iErrorStop = 30;
+ iErrorStop = 120;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -117,7 +117,7 @@ xbInt16 xbExp::CalcFunctionResultLen( xbExpNode * n ) const{
xbExpNode *nChild1 = n->GetChild( 0 );
xbExpNode *nChild2 = n->GetChild( 1 );
if( !nChild1 || !nChild2 ){
- iErrorStop = 40;
+ iErrorStop = 130;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -128,7 +128,7 @@ xbInt16 xbExp::CalcFunctionResultLen( xbExpNode * n ) const{
xbExpNode *nChild2 = n->GetChild( 1 );
xbExpNode *nChild3 = n->GetChild( 2 );
if( !nChild2 || !nChild3 ){
- iErrorStop = 50;
+ iErrorStop = 140;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -148,7 +148,7 @@ xbInt16 xbExp::CalcFunctionResultLen( xbExpNode * n ) const{
}
} else {
- iErrorStop = 100;
+ iErrorStop = 150;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -205,12 +205,12 @@ xbInt16 xbExp::CheckParensAndQuotes( const xbString &sExpression ){
s++;
}
if( iLparenCtr != iRparenCtr ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_UNBALANCED_PARENS;
throw iRc;
}
if( bInQuotes ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_UNBALANCED_QUOTES;
throw iRc;
}
@@ -369,21 +369,21 @@ xbInt16 xbExp::GetNextToken( xbExpToken &t ){
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 = 10;
+ iErrorStop = 100;
throw iRc;
}
}
// Check for parens
else if( t.sExpression[1] == '(' || t.sExpression[1] == '{' ){
if(( iRc = GetTokenParen( t )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ 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 = 30;
+ iErrorStop = 120;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -391,7 +391,7 @@ xbInt16 xbExp::GetNextToken( xbExpToken &t ){
// Check for logical constant
else if( IsLogicalConstant( t.sExpression )){
if(( iRc = GetTokenLogicalConstant( t )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -399,7 +399,7 @@ xbInt16 xbExp::GetNextToken( xbExpToken &t ){
// check for numeric constant
else if( IsNumericConstant( t.sExpression, t.cPrevNodeType )){
if(( iRc = GetTokenNumericConstant( t )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -407,7 +407,7 @@ xbInt16 xbExp::GetNextToken( xbExpToken &t ){
// check for operator
else if( IsOperator( t.sExpression )){
if(( iRc = GetTokenOperator( t )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -415,13 +415,13 @@ xbInt16 xbExp::GetNextToken( xbExpToken &t ){
// check for function
else if( IsFunction( t.sExpression, t.cReturnType )){
if(( iRc = GetTokenFunction( t )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 160;
iRc = XB_PARSE_ERROR;
throw iRc;
}
}
else if(( iRc = GetTokenDatabaseField( t )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 170;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -429,16 +429,9 @@ xbInt16 xbExp::GetNextToken( xbExpToken &t ){
catch (xbInt16 iRc ){
xbString sMsg;
-
- //t.sExpression;
- // std::cout << ">>>>>>>>>" << sMsg.Str() << "\n";
- // sMsg.Sprintf( "[%d][%s]", iErrorStop, t.sExpression.Str() );
- // sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] %s", iErrorStop, 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() );sMsg.Sprintf( "xbexp::GetNextToken() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, t.sExpression.Str() );
xbase->WriteLogMessage( sMsg.Str() );
}
-
return iRc;
}
@@ -460,7 +453,6 @@ xbInt16 xbExp::GetNumericResult( xbDouble &dResult){
return XB_PARSE_ERROR;
}
}
-
/*************************************************************************/
//! Get result length.
/*!
@@ -573,7 +565,7 @@ xbInt16 xbExp::GetTokenCharConstant( xbExpToken &t ){
} else {
iRc = XB_PARSE_ERROR;
t.iSts = XB_UNBALANCED_QUOTES;
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
}
@@ -612,7 +604,7 @@ xbInt16 xbExp::GetTokenDateConstant( xbExpToken &t ){
wBuf[i] = t.sExpression[i+2];
if(( iRc = dt.CTOD( wBuf )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
t.sToken.Set( dt.Str() );
@@ -634,7 +626,7 @@ xbInt16 xbExp::GetTokenDateConstant( xbExpToken &t ){
} else {
iRc = XB_PARSE_ERROR;
t.iSts = XB_INVALID_DATE;
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -645,7 +637,6 @@ xbInt16 xbExp::GetTokenDateConstant( xbExpToken &t ){
}
return iRc;
}
-
/*************************************************************************/
//! GetTokenField
/*! This method gets a database field token
@@ -973,7 +964,7 @@ xbInt16 xbExp::GetTokenParen( xbExpToken &t ){
t.cReturnType = XB_EXP_UNKNOWN;
t.iSts = XB_UNBALANCED_PARENS;
iRc = XB_PARSE_ERROR;
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
}
@@ -1215,7 +1206,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
delete nTree;
if(( iRc = CheckParensAndQuotes( sExpression )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -1234,7 +1225,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
if( t.cNodeType == XB_EXP_NOTROOT ){
xbExp enr( xbase, dbf );
if(( iRc = enr.ParseExpression( t.sToken, iWeight + 10 )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
n = enr.GetTreeHandle();
@@ -1247,7 +1238,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
case XB_EXP_CONSTANT:
n = new xbExpNode( t.sToken, t.cNodeType );
if(( iRc = ParseExpressionConstant( t, n )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
break;
@@ -1255,7 +1246,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
case XB_EXP_FUNCTION:
n = new xbExpNode( t.cNodeType );
if(( iRc = ParseExpressionFunction( t, n, iWeight )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
break;
@@ -1263,7 +1254,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
case XB_EXP_FIELD:
n = new xbExpNode( t.cNodeType );
if(( iRc = ParseExpressionField( t, n )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
break;
@@ -1273,13 +1264,13 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
case XB_EXP_POST_OPERATOR:
n = new xbExpNode( t.sToken, t.cNodeType );
if(( iRc = ParseExpressionOperator( t, n, iWeight )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
break;
default:
- iErrorStop = 70;
+ iErrorStop = 160;
iRc = XB_PARSE_ERROR;
throw iRc;
// break;
@@ -1337,7 +1328,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
} else{
// should not be stopping on anything but an operator node with one or two children
- iErrorStop = 80;
+ iErrorStop = 170;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -1355,21 +1346,19 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
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 &&
+ 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 = 90;
+ iErrorStop = 180;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -1384,12 +1373,12 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
case XB_EXP_CHAR:
if( nWork->GetNodeType() != XB_EXP_OPERATOR ){
- iErrorStop = 100;
+ iErrorStop = 190;
iRc = XB_PARSE_ERROR;
throw iRc;
}
if( nWork->GetChildCnt() < 2 ){
- iErrorStop = 110;
+ iErrorStop = 200;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -1407,7 +1396,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
break;
default:
- iErrorStop = 120;
+ iErrorStop = 210;
iRc = XB_PARSE_ERROR;
throw iRc;
// break;
@@ -1415,12 +1404,12 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
}
if( nWork->IsUnaryOperator() ){
if( nWork->GetChildCnt() != 1 ){
- iErrorStop = 130;
+ iErrorStop = 220;
iRc = XB_PARSE_ERROR;
throw iRc;
}
} else if( nWork->IsOperator() && nWork->GetChildCnt() != 2 ){
- iErrorStop = 140;
+ iErrorStop = 230;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -1513,19 +1502,19 @@ xbInt16 xbExp::ParseExpressionField( xbExpToken &t, xbExpNode *n ){
sFieldName = t.sToken;
}
if( !pDbf ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_INVALID_FIELD;
throw iRc;
}
xbInt16 iFieldNo = 0;
if(( iRc = pDbf->GetFieldNo( sFieldName, iFieldNo )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
char cFieldType;
if(( iRc = pDbf->GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 120;
throw iRc;
}
n->SetDbfInfo( pDbf, iFieldNo );
@@ -1549,7 +1538,7 @@ xbInt16 xbExp::ParseExpressionField( xbExpToken &t, xbExpNode *n ){
case XB_MEMO_FLD:
default:
- iErrorStop = 30;
+ iErrorStop = 130;
iRc = XB_PARSE_ERROR;
throw iRc;
// break;
@@ -1557,7 +1546,7 @@ xbInt16 xbExp::ParseExpressionField( xbExpToken &t, xbExpNode *n ){
n->SetNodeText( sFieldName );
xbInt16 iResultLen = 0;
if(( iRc = pDbf->GetFieldLen( iFieldNo, iResultLen )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 140;
throw iRc;
}
n->SetResultLen( (xbUInt32) iResultLen );
@@ -1587,7 +1576,7 @@ xbInt16 xbExp::ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWe
// find the first "("
xbUInt32 lPos = t.sToken.Pos( '(' );
if( lPos == 0 ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_INVALID_FUNCTION;
throw iRc;
}
@@ -1600,7 +1589,7 @@ xbInt16 xbExp::ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWe
xbInt16 i = 0;
xbInt32 l = 0;
if(( iRc = xbase->GetFunctionInfo( sFunc, cReturnType, i, l )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
n->SetNodeText( sFunc );
@@ -1611,7 +1600,7 @@ xbInt16 xbExp::ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWe
sParms.Mid( lPos+1, t.sToken.Len() - lPos );
lPos = sParms.GetLastPos( ')' );
if( lPos == 0 ){
- iErrorStop = 30;
+ iErrorStop = 120;
iRc = XB_INVALID_FUNCTION;
throw iRc;
}
@@ -1626,7 +1615,7 @@ xbInt16 xbExp::ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWe
// create a linked list of parms
xbLinkList<xbString> llParms;
if(( iRc = ParseExpressionFunctionParms( sParms, llParms )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
@@ -1636,7 +1625,7 @@ xbInt16 xbExp::ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWe
while( llN ){
sParm = llN->GetKey();
if(( iRc = enr.ParseExpression( sParm, iWeight + 10 )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 140;
throw iRc;
}
n->AddChild( enr.GetTreeHandle());
@@ -1657,7 +1646,7 @@ xbInt16 xbExp::ParseExpressionFunction( xbExpToken &t, xbExpNode *n, xbInt16 iWe
}
if(( iRc = CalcFunctionResultLen( n )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 150;
throw iRc;
}
}
@@ -1843,7 +1832,7 @@ xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
case XB_EXP_PRE_OPERATOR: // increment value before setting in head node
if( nWork->GetChildCnt() != 1 ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -1868,7 +1857,7 @@ xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
case XB_EXP_POST_OPERATOR: // increment value after setting in head node
if( nWork->GetChildCnt() != 1 ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_PARSE_ERROR;
throw iRc;
}
@@ -1895,14 +1884,14 @@ xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
case XB_EXP_FIELD:
if(( dbf = nWork->GetDbf()) == NULL ){
- iErrorStop = 30;
+ 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 = 40;
+ iErrorStop = 130;
throw iRc;
}
nWork->SetResult( sWork1 );
@@ -1911,7 +1900,7 @@ xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
case XB_EXP_DATE:
if(( iRc = dbf->GetField( nWork->GetFieldNo(), sWork1, iRecBufSw )) < XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
if( sWork1 == " " ){
@@ -1924,7 +1913,7 @@ xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
case XB_EXP_LOGICAL:
if(( iRc = dbf->GetLogicalField( nWork->GetFieldNo(), bWork, iRecBufSw )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
nWork->SetResult( bWork );
@@ -1932,14 +1921,14 @@ xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
case XB_EXP_NUMERIC:
if(( iRc = dbf->GetDoubleField( nWork->GetFieldNo(), dWork, iRecBufSw )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw iRc;
}
nWork->SetResult( dWork );
break;
default:
- iErrorStop = 80;
+ iErrorStop = 170;
iRc = XB_PARSE_ERROR;
throw iRc;
// break;
@@ -1949,7 +1938,7 @@ xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
case XB_EXP_OPERATOR:
if(( iRc = ProcessExpressionOperator( nWork )) != XB_NO_ERROR ){
- iErrorStop = 300;
+ iErrorStop = 180;
throw iRc;
}
@@ -1957,13 +1946,13 @@ xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
case XB_EXP_FUNCTION:
if(( iRc = ProcessExpressionFunction( nWork, iRecBufSw )) != XB_NO_ERROR ){
- iErrorStop = 400;
+ iErrorStop = 190;
throw iRc;
}
break;
default:
- iErrorStop = 500;
+ iErrorStop = 200;
iRc = XB_PARSE_ERROR;
throw iRc;
// break;
diff --git a/src/core/xbfields.cpp b/src/core/xbfields.cpp
index 8cfb4e6..e683d9c 100755
--- a/src/core/xbfields.cpp
+++ b/src/core/xbfields.cpp
@@ -492,43 +492,50 @@ xbInt16 xbDbf::GetLogicalField( const xbString &sFieldName, xbBool &bFieldValue
*/
xbInt16 xbDbf::GetLongField( xbInt16 iFieldNo, xbInt32 & lFieldValue ) const {
- xbInt16 rc = 0;
- xbInt16 iErrorStop = 0;
- char cFieldType;
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ char cFieldType;
+ xbString sTemp;
try{
- if(( rc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- iErrorStop = 10;
- throw rc;
+ if(( iRc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
}
if( cFieldType != 'N' && cFieldType != 'F' && cFieldType != 'M' ){
- iErrorStop = 20;
- rc = XB_INVALID_FIELD_TYPE;
- throw rc;
+ iErrorStop = 110;
+ iRc = XB_INVALID_FIELD_TYPE;
+ throw iRc;
}
- xbString sTemp;
- if(( rc = GetField( iFieldNo, sTemp, 0 )) < 0 ){
- iErrorStop = 30;
- throw rc;
+ if(( iRc = GetField( iFieldNo, sTemp, 0 )) < 0 ){
+ iErrorStop = 120;
+ throw iRc;
}
+ sTemp.Trim();
- if( !sTemp.ValidNumericValue() || ((int) sTemp.Pos( '.' ) > 0)){
- iErrorStop = 40;
- rc = XB_INVALID_DATA;
- throw rc;
+ 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 rc ){
+ catch (xbInt16 iRc ){
xbString sMsg;
- sMsg.Sprintf( "xbDbf::GetLongField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
+ sMsg.Sprintf( "xbDbf::GetLongField() Exception Caught. Error Stop = [%d] rc = [%d] [%s]", iErrorStop, iRc, sTemp.Str() );
xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( rc ));
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
return XB_NO_ERROR;
@@ -615,24 +622,24 @@ xbInt16 xbDbf::GetULongField( xbInt16 iFieldNo, xbUInt32 & ulFieldValue ) const
try{
if(( rc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
if( cFieldType != 'N' && cFieldType != 'F' && cFieldType != 'M' ){
- iErrorStop = 20;
+ iErrorStop = 110;
rc = XB_INVALID_FIELD_TYPE;
throw rc;
}
xbString sTemp;
if(( rc = GetField( iFieldNo, sTemp, 0 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
}
sTemp.Trim();
if( !sTemp.ValidNumericValue() || ((int) sTemp.Pos( '.' ) > 0)){
- iErrorStop = 40;
+ iErrorStop = 130;
rc = XB_INVALID_DATA;
throw rc;
}
@@ -1118,5 +1125,6 @@ xbBool xbDbf::MemoFieldExists( xbInt16 iFieldNo ) const{
}
#endif
+
} /* namespace */
diff --git a/src/core/xbfile.cpp b/src/core/xbfile.cpp
index a7d5257..937c16f 100755
--- a/src/core/xbfile.cpp
+++ b/src/core/xbfile.cpp
@@ -721,7 +721,7 @@ xbInt16 xbFile::GetFileSize( xbUInt64 &ullFileSize ){
try{
if(( iRc = xbFseek( 0, SEEK_END )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
ullFileSize = xbFtell();
@@ -777,12 +777,10 @@ xbInt16 xbFile::GetOpenMode() const {
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.
/*!
@@ -845,13 +843,13 @@ xbInt16 xbFile::GetXbaseFileTypeByte( const xbString &sFileName, unsigned char
#ifdef HAVE__FSOPEN_F
// 0x40 is SH_DENYNO or _SH_DENYNO
if(( tfp = _fsopen( sFileName.Str(), "r", 0x40 )) == NULL ){
- iErrorStop = 20;
+ iErrorStop = 100;
iRc = XB_OPEN_ERROR;
throw iRc;
}
#else
if(( tfp = fopen( sFileName.Str(), "r" )) == NULL ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_OPEN_ERROR;
throw iRc;
}
@@ -864,13 +862,13 @@ xbInt16 xbFile::GetXbaseFileTypeByte( const xbString &sFileName, unsigned char
#endif
if( iRc != 0 ){
- iErrorStop = 30;
+ iErrorStop = 120;
iRc = XB_SEEK_ERROR;
throw iRc;
}
stRc = fread( &cFileTypeByte, (size_t) 1, (size_t) 1, tfp );
if( stRc != (size_t) 1 ){
- iErrorStop = 40;
+ iErrorStop = 130;
iRc = XB_READ_ERROR;
throw iRc;
}
@@ -960,7 +958,6 @@ xbInt16 xbFile::ReadBlock( xbUInt32 ulBlockNo, size_t lReadSize, void * buf ){
return ReadBlock( ulBlockNo, ulBlockSize, lReadSize, buf );
}
-
/***********************************************************************/
//! @brief Read a block of data from file.
/*!
@@ -980,13 +977,13 @@ xbInt16 xbFile::ReadBlock( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t lRea
try{
if( ulBlockSize <= 0 ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_INVALID_BLOCK_SIZE;
throw iRc;
}
if(( iRc = xbFseek(((xbInt64) ulBlockNo*ulBlockSize ), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_SEEK_ERROR;
throw iRc;
}
@@ -995,7 +992,7 @@ xbInt16 xbFile::ReadBlock( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t lRea
lReadSize = ulBlockSize;
if(( iRc = xbFread( buf, lReadSize, 1 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
iRc = XB_READ_ERROR;
throw iRc;
}
@@ -1149,18 +1146,18 @@ xbInt16 xbFile::WriteBlock( xbUInt32 ulBlockNo, size_t lWriteSize, void * buf ){
try{
if( ulBlockSize == 0 ){
- iErrorStop = 10;
+ 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 = 20;
+ iErrorStop = 110;
throw iRc;
}
if(( iRc = xbFwrite( buf, lWriteSize, 1 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
}
@@ -1488,7 +1485,7 @@ xbInt16 xbFile::xbFseek( xbInt64 lOffset, xbInt32 iWhence ) {
#elif defined(HAVE__FSEEKI64_F)
iRc = _fseeki64( fp, lOffset, iWhence );
if( iRc != 0 ){
- iErrorStop = 200;
+ iErrorStop = 110;
throw iRc;
}
#else
@@ -1498,7 +1495,7 @@ xbInt16 xbFile::xbFseek( xbInt64 lOffset, xbInt32 iWhence ) {
if( lOffset > 2147483647 && iWhence == SEEK_SET ){
/* move forward max amt - 2G */
if(( iRc = fseek( fp, 2147483647, SEEK_SET )) != 0 ){
- iErrorStop = 300;
+ iErrorStop = 120;
throw iRc;
}
lOffset -= 2147483647;
@@ -1582,13 +1579,13 @@ xbInt16 xbFile::xbReadUntil( const char cDelim, xbString &sOut ){
try{
sOut = "";
if(( iRc = xbFgetc( c )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
sOut = c;
while( iRc == XB_NO_ERROR && c != cDelim ){
if(( iRc = xbFgetc( c )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 110;
throw iRc;
}
sOut += c;
@@ -1662,44 +1659,12 @@ xbInt16 xbFile::xbRemove( const xbString & sFileNameIn, xbInt16 iOption ) {
*/
xbInt16 xbFile::xbRename( const xbString & sOldName, const xbString & sNewName ){
- return xbRename( sOldName, sNewName, 0 );
-}
-
-/************************************************************************/
-//! @brief Rename file.
-/*!
- \param sOldName Original file name
- \param sNewName New file name
- \param iOption If Set to 1, assume this is a rename request for a dbf file, and should rename the dbt file also
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-xbInt16 xbFile::xbRename( const xbString & sOldName, const xbString & sNewName, xbInt16 iOption ){
-
-
- if( rename( sOldName.Str(), sNewName.Str())){
+ if( rename( sOldName.Str(), sNewName.Str()))
return XB_RENAME_ERROR;
- }
- if( iOption == 1 ){
- xbString sOldName2 = sOldName;
- xbString sNewName2 = sNewName;
-
- if( sOldName2[sOldName2.Len()] == 'F' )
- sOldName2.PutAt( sOldName2.Len(), 'T' );
- else
- sOldName2.PutAt( sOldName2.Len(), 't' );
-
- if( sNewName2[sNewName2.Len()] == 'F' )
- sNewName2.PutAt( sNewName2.Len(), 'T' );
- else
- sNewName2.PutAt( sNewName2.Len(), 't' );
-
- if( rename( sOldName2.Str(), sNewName2.Str()))
- return XB_RENAME_ERROR;
- }
- return XB_NO_ERROR;
+ else
+ return XB_NO_ERROR;
}
-
/************************************************************************/
//! @brief Xbase wrapper for rewind.
/*!
@@ -1724,17 +1689,17 @@ xbInt16 xbFile::xbTruncate( xbInt64 llSize ) {
try{
#ifdef HAVE_FTRUNCATE_F
if(( iRc = ftruncate( iFileNo, llSize )) != 0 ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_WRITE_ERROR;
throw iRc;
}
#elif defined(HAVE_SETENDOFFILE_F)
if(( iRc = xbFseek( llSize, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
if(( iRc = SetEndOfFile( fHandle )) == 0 ){
- iErrorStop = 30;
+ iErrorStop = 120;
iRc = XB_WRITE_ERROR;
throw iRc;
} else {
@@ -1781,7 +1746,7 @@ xbInt16 xbFile::xbLock( xbInt16 iFunction, xbInt64 lOffset, size_t stLen ){
/* Unix lock function */
if(( iRc = xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -1794,7 +1759,7 @@ xbInt16 xbFile::xbLock( xbInt16 iFunction, xbInt64 lOffset, size_t stLen ){
fl.l_type = F_UNLCK;
break;
default:
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_INVALID_LOCK_OPTION;
throw iRc;
break;
@@ -1808,7 +1773,7 @@ xbInt16 xbFile::xbLock( xbInt16 iFunction, xbInt64 lOffset, size_t stLen ){
iTries++;
xbase->xbSleep( GetDefaultLockWait() );
} else if( iRc ){
- iErrorStop = 30;
+ iErrorStop = 120;
iRc = XB_LOCK_FAILED;
throw iRc;
}
@@ -1844,7 +1809,7 @@ xbInt16 xbFile::xbLock( xbInt16 iFunction, xbInt64 lOffset, size_t stLen ){
}
else
{
- iErrorStop = 30;
+ iErrorStop = 130;
iRc = XB_INVALID_LOCK_OPTION;
throw iRc;
}
@@ -1863,13 +1828,13 @@ xbInt16 xbFile::xbLock( xbInt16 iFunction, xbInt64 lOffset, size_t stLen ){
} else if( iFunction == XB_UNLOCK ){
iLockType = 0;
} else {
- iErrorStop = 50;
+ iErrorStop = 140;
iRc = XB_INVALID_LOCK_OPTION;
throw iRc;
}
if(( iRc = xbFseek( lOffset, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
iRc = XB_SEEK_ERROR;
throw iRc;
}
@@ -1961,13 +1926,13 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
char *buf = NULL;
FILE *fpd = NULL;
try{
- iErrorStop = 10;
+ iErrorStop = 100;
if( ulBlockNo == 0 ){
ulStartBlock = 0;
xbUInt64 ullFileSizeulBlockNo;
if(( iRc = GetFileSize( ullFileSizeulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
ulEndBlock = (xbUInt32) (ullFileSizeulBlockNo / lBlkSize);
@@ -1977,7 +1942,7 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
}
if(( buf = (char *) malloc( lBlkSize )) == NULL ){
- iErrorStop = 30;
+ iErrorStop = 120;
iRc = XB_NO_MEMORY;
throw iRc;
}
@@ -1988,7 +1953,7 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
for( xbUInt32 l = ulStartBlock; l < ulEndBlock; l++ ){
if(( iRc = ReadBlock( l, lBlkSize, buf )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
@@ -2004,7 +1969,7 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
#else
if(( fpd = fopen( sFn.Str(), "w+b")) == NULL ){
#endif
- iErrorStop = 50;
+ iErrorStop = 140;
iRc = XB_OPEN_ERROR;
throw iRc;
}
@@ -2014,7 +1979,7 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
for( size_t l = 0; l < lBlkSize; l++ ){
//if( fputc( *p, fpd ) != *p ){
if( fputc( *p, fpd ) == EOF ){
- iErrorStop = 60;
+ iErrorStop = 150;
iRc = XB_WRITE_ERROR;
throw iRc;
}
@@ -2030,7 +1995,7 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
}
catch (xbInt16 iRc ){
xbString sMsg;
- if( iErrorStop == 60 )
+ if( iErrorStop == 160 )
sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d] c=[%c][%x]", iErrorStop, iRc, *p, *p );
else
sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
diff --git a/src/core/xbfilter.cpp b/src/core/xbfilter.cpp
index e75f583..507a9e7 100755
--- a/src/core/xbfilter.cpp
+++ b/src/core/xbfilter.cpp
@@ -14,7 +14,6 @@ Email Contact:
This module handles uda (user data area) methods
-
*/
#include "xbase.h"
@@ -75,11 +74,11 @@ xbInt16 xbFilter::Set( xbString &sFilter ) {
exp = new xbExp( xbase, dbf );
if(( iRc = exp->ParseExpression( sFilter.Str() )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
if( exp->GetReturnType() != XB_EXP_LOGICAL ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_INVALID_EXPRESSION;
delete exp;
exp = NULL;
@@ -102,21 +101,16 @@ xbInt16 xbFilter::GetFirstRecord( xbInt16 iOption ) {
try{
if( !exp ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
- #ifdef XB_INDEX_SUPPORT
- if( dbf->GetCurIx() && dbf->GetCurTag() )
- return GetFirstRecordIx( iOption );
- #endif
-
lCurQryCnt = 0;
if(( iRc = dbf->GetFirstRecord( iOption )) != XB_NO_ERROR ){
if( iRc == XB_EMPTY || iRc == XB_EOF )
return iRc;
else{
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -124,11 +118,11 @@ xbInt16 xbFilter::GetFirstRecord( xbInt16 iOption ) {
xbBool bFound = xbFalse;
while( !bFound && iRc == XB_NO_ERROR ){
if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if( !bFound ){
@@ -136,7 +130,7 @@ xbInt16 xbFilter::GetFirstRecord( xbInt16 iOption ) {
if( iRc == XB_EOF ){
return iRc;
} else {
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
}
@@ -160,15 +154,10 @@ xbInt16 xbFilter::GetNextRecord( xbInt16 iOption ){
try{
if( !exp ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
- #ifdef XB_INDEX_SUPPORT
- if( dbf->GetCurIx() && dbf->GetCurTag())
- return GetNextRecordIx( iOption );
- #endif
-
if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
return XB_LIMIT_REACHED;
@@ -176,7 +165,7 @@ xbInt16 xbFilter::GetNextRecord( xbInt16 iOption ){
if( iRc == XB_EOF )
return iRc;
else{
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -184,11 +173,11 @@ xbInt16 xbFilter::GetNextRecord( xbInt16 iOption ){
xbBool bFound = xbFalse;
while( !bFound && iRc == XB_NO_ERROR ){
if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if( !bFound ){
@@ -196,7 +185,7 @@ xbInt16 xbFilter::GetNextRecord( xbInt16 iOption ){
if( iRc == XB_EOF ){
return iRc;
} else {
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
}
@@ -220,16 +209,10 @@ xbInt16 xbFilter::GetPrevRecord( xbInt16 iOption ){
try{
if( !exp ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
- #ifdef XB_INDEX_SUPPORT
- //if( pIx && vpTag )
- if( dbf->GetCurIx() && dbf->GetCurTag())
- return GetPrevRecordIx( iOption );
- #endif
-
if( lLimit != 0 && abs( lCurQryCnt ) >= lLimit )
return XB_LIMIT_REACHED;
@@ -237,7 +220,7 @@ xbInt16 xbFilter::GetPrevRecord( xbInt16 iOption ){
if( iRc == XB_BOF )
return iRc;
else{
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -245,11 +228,11 @@ xbInt16 xbFilter::GetPrevRecord( xbInt16 iOption ){
xbBool bFound = xbFalse;
while( !bFound && iRc == XB_NO_ERROR ){
if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if( !bFound ){
@@ -257,7 +240,7 @@ xbInt16 xbFilter::GetPrevRecord( xbInt16 iOption ){
if( iRc == XB_BOF ){
return iRc;
} else {
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
}
@@ -281,21 +264,16 @@ xbInt16 xbFilter::GetLastRecord( xbInt16 iOption ){
try{
if( !exp ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
- #ifdef XB_INDEX_SUPPORT
- if( dbf->GetCurIx() && dbf->GetCurTag())
- return GetLastRecordIx( iOption );
- #endif
-
lCurQryCnt = 0;
if(( iRc = dbf->GetLastRecord( iOption )) != XB_NO_ERROR ){
if( iRc == XB_EOF )
return iRc;
else{
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -303,11 +281,11 @@ xbInt16 xbFilter::GetLastRecord( xbInt16 iOption ){
xbBool bFound = xbFalse;
while( !bFound && iRc == XB_NO_ERROR ){
if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if( !bFound ){
@@ -315,7 +293,7 @@ xbInt16 xbFilter::GetLastRecord( xbInt16 iOption ){
if( iRc == XB_BOF ){
return iRc;
} else {
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
}
@@ -336,11 +314,6 @@ xbInt16 xbFilter::GetLastRecord( xbInt16 iOption ){
#ifdef XB_INDEX_SUPPORT
-//void xbFilter::Set( xbIx *pIx, void *vpTag ) {
-// this->pIx = pIx;
-// this->vpTag = vpTag;
-//}
-
/************************************************************************/
xbInt16 xbFilter::GetFirstRecordIx( xbInt16 iOption ) {
@@ -349,7 +322,7 @@ xbInt16 xbFilter::GetFirstRecordIx( xbInt16 iOption ) {
try{
if( !exp ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -358,7 +331,7 @@ xbInt16 xbFilter::GetFirstRecordIx( xbInt16 iOption ) {
if( iRc == XB_EMPTY || iRc == XB_EOF )
return iRc;
else{
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -366,11 +339,11 @@ xbInt16 xbFilter::GetFirstRecordIx( xbInt16 iOption ) {
xbBool bFound = xbFalse;
while( !bFound && iRc == XB_NO_ERROR ){
if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if( !bFound ){
@@ -379,7 +352,7 @@ xbInt16 xbFilter::GetFirstRecordIx( xbInt16 iOption ) {
if( iRc == XB_EOF ){
return iRc;
} else {
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
}
@@ -403,7 +376,7 @@ xbInt16 xbFilter::GetNextRecordIx( xbInt16 iOption ){
try{
if( !exp ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -414,7 +387,7 @@ xbInt16 xbFilter::GetNextRecordIx( xbInt16 iOption ){
if( iRc == XB_EOF )
return iRc;
else{
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -422,11 +395,11 @@ xbInt16 xbFilter::GetNextRecordIx( xbInt16 iOption ){
xbBool bFound = xbFalse;
while( !bFound && iRc == XB_NO_ERROR ){
if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if( !bFound ){
@@ -435,7 +408,7 @@ xbInt16 xbFilter::GetNextRecordIx( xbInt16 iOption ){
if( iRc == XB_EOF ){
return iRc;
} else {
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
}
@@ -459,7 +432,7 @@ xbInt16 xbFilter::GetPrevRecordIx( xbInt16 iOption ){
try{
if( !exp ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -470,7 +443,7 @@ xbInt16 xbFilter::GetPrevRecordIx( xbInt16 iOption ){
if( iRc == XB_BOF )
return iRc;
else{
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -478,11 +451,11 @@ xbInt16 xbFilter::GetPrevRecordIx( xbInt16 iOption ){
xbBool bFound = xbFalse;
while( !bFound && iRc == XB_NO_ERROR ){
if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if( !bFound ){
@@ -491,7 +464,7 @@ xbInt16 xbFilter::GetPrevRecordIx( xbInt16 iOption ){
if( iRc == XB_BOF ){
return iRc;
} else {
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
}
@@ -515,7 +488,7 @@ xbInt16 xbFilter::GetLastRecordIx( xbInt16 iOption ){
try{
if( !exp ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -524,7 +497,7 @@ xbInt16 xbFilter::GetLastRecordIx( xbInt16 iOption ){
if( iRc == XB_EOF )
return iRc;
else{
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -532,11 +505,11 @@ xbInt16 xbFilter::GetLastRecordIx( xbInt16 iOption ){
xbBool bFound = xbFalse;
while( !bFound && iRc == XB_NO_ERROR ){
if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = exp->GetBoolResult( bFound )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if( !bFound ){
@@ -544,7 +517,7 @@ xbInt16 xbFilter::GetLastRecordIx( xbInt16 iOption ){
if( iRc == XB_BOF ){
return iRc;
} else {
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
}
diff --git a/src/core/xbixbase.cpp b/src/core/xbixbase.cpp
index 40c1563..8b64fd6 100755
--- a/src/core/xbixbase.cpp
+++ b/src/core/xbixbase.cpp
@@ -52,7 +52,6 @@ xbInt16 xbIx::AddKeys( xbUInt32 ulRecNo ){
xbInt16 iErrorStop = 0;
xbInt16 i = 0;
xbInt16 iKeySts;
-// std::cout << "xbIx::AddKeys\n";
try{
void * vpTag;
@@ -60,9 +59,7 @@ xbInt16 xbIx::AddKeys( xbUInt32 ulRecNo ){
for( i = 0; i < iTagCount; i++ ){
vpTag = GetTag( i );
-
iKeySts = GetKeySts( vpTag );
-// std::cout << "AddKeys() KeySts = " << iKeySts << "\n";
if( iKeySts == 1 || iKeySts == 2 ){
if(( iRc = UpdateTagKey( 'A', vpTag, ulRecNo )) != XB_NO_ERROR ){
@@ -241,7 +238,7 @@ xbInt16 xbIx::CheckForDupKeys(){
for( i = 0; i < iTagCount; i++ ){
vpTag = GetTag( i );
if(( iRc = CheckForDupKey( vpTag )) < XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
}
@@ -269,7 +266,7 @@ xbInt16 xbIx::Close(){
try{
if(( iRc = xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 100;
throw iRc;
}
}
@@ -335,7 +332,7 @@ xbInt16 xbIx::CreateKeys( xbInt16 iOpt ) {
for( i = 0; i < iTagCount; i++ ){
vpTag = GetTag( i );
if(( iRc = CreateKey( vpTag, iOpt )) < XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
}
@@ -372,7 +369,7 @@ xbInt16 xbIx::DeleteKeys(){
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 = 10;
+ iErrorStop = 100;
throw iRc;
}
}
@@ -736,17 +733,17 @@ xbInt16 xbIx::Open( const xbString & sFileName ){
this->SetFileName( sFileName );
if( !FileExists()){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
/* open the file */
if(( iRc = xbFopen( dbf->GetOpenMode(), dbf->GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
if(( iRc = ReadHeadBlock()) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 120;
throw iRc;
}
SetCurTag( (xbInt16) 0 ); // default the first tag as the current tag
diff --git a/src/core/xbixmdx.cpp b/src/core/xbixmdx.cpp
index 53d7053..95f342c 100755
--- a/src/core/xbixmdx.cpp
+++ b/src/core/xbixmdx.cpp
@@ -582,28 +582,29 @@ xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
char cKeyType;
char *pPrevKeyBuf = NULL;
xbMdxTag *npTag = (xbMdxTag *) vpTag;
- xbInt16 iAutoLock;
xbBool bDescending = npTag->cKeyFmt2 & 0x08;
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif
+
+
try{
// xbase->WriteLogMessage( "xbIxMdx::CheckTagIntegrity()", iOpt );
#ifdef XB_LOCKING_SUPPORT
- iAutoLock = dbf->GetAutoLock();
- if( iAutoLock && !dbf->GetTableLocked() ){
+ 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) npTag->iKeyLen );
iRc = GetFirstKey( vpTag, 0 );
memcpy( pPrevKeyBuf, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
@@ -704,14 +705,6 @@ xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
xbase->WriteLogMessage( sMsg, iOpt );
}
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- }
- #endif
if( pPrevKeyBuf )
free( pPrevKeyBuf );
@@ -730,6 +723,13 @@ xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
xbase->WriteLogMessage( sMsg, iOpt );
}
}
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ dbf->LockTable( XB_UNLOCK );
+ }
+ #endif
+
return iRc;
}
@@ -1765,7 +1765,6 @@ xbInt16 xbIxMdx::DeleteTag( void *vpTag ){
/***********************************************************************/
#ifdef XB_DEBUG_SUPPORT
-
//! @brief Dump a given block for a tag
/*!
\param iOpt Output message destination<br>
@@ -1958,7 +1957,6 @@ xbInt16 xbIxMdx::DumpFreeBlocks( xbInt16 iOpt ){
}
/**************************************************************************************************************/
-
//! @brief Dump interior and leaf blocks for a given tag.
/*!
Dump blocks for given tag for index debugging purposes.
@@ -4325,12 +4323,12 @@ xbInt16 xbIxMdx::ReadHeadBlock( xbInt16 iOpt )
free( cNodeBuf );
if(( cNodeBuf = (char *) malloc( (size_t) GetBlockSize())) == NULL ){
- iErrorStop = 40;
+ iErrorStop = 150;
throw XB_NO_MEMORY;
}
if(( iRc = xbIxMdx::LoadTagTable()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 160;
throw iRc;
}
@@ -4379,7 +4377,7 @@ xbInt16 xbIxMdx::Reindex( void **vpTag ){
xbInt16 iErrorStop = 0;
xbMdxTag * mpTag;
#ifdef XB_LOCKING_SUPPORT
- xbInt16 iAutoLock = 0;
+ xbBool bLocked = xbFalse;
#endif
if( vpTag )
@@ -4400,12 +4398,12 @@ xbInt16 xbIxMdx::Reindex( void **vpTag ){
try{
#ifdef XB_LOCKING_SUPPORT
- iAutoLock = dbf->GetAutoLock();
- if( iAutoLock && !dbf->GetTableLocked() ){
+ if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
iErrorStop = 100;
throw iRc;
}
+ bLocked = xbTrue;
}
#endif
@@ -4524,34 +4522,20 @@ xbInt16 xbIxMdx::Reindex( void **vpTag ){
mpTag = (xbMdxTag *) GetTag( iCurTag++ );
}
}
-
- // unlock as necessary
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 190;
- throw iRc;
- }
- }
- #endif
-
-
}
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 ));
+ }
- // unlock as necessary
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && dbf->GetTableLocked() ){
- dbf->LockTable( XB_UNLOCK );
- }
- #endif
+ #ifdef XB_LOCKING_SUPPORT
+ if( bLocked ){
+ dbf->LockTable( XB_UNLOCK );
}
+ #endif
return iRc;
-
}
/***********************************************************************/
diff --git a/src/core/xbixndx.cpp b/src/core/xbixndx.cpp
index 097bd22..dcec5f9 100755
--- a/src/core/xbixndx.cpp
+++ b/src/core/xbixndx.cpp
@@ -85,7 +85,7 @@ xbInt16 xbIxNdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
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 = 200;
+ iErrorStop = 110;
throw iRc;
}
@@ -95,12 +95,12 @@ xbInt16 xbIxNdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
// section B - split the leaf node
xbIxNode * npRightNode = AllocateIxNode( GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, 1 );
if( !npRightNode ){
- iErrorStop = 100;
+ 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 = 110;
+ iErrorStop = 130;
throw iRc;
}
xbUInt32 ulTempBlockNo = npRightNode->ulBlockNo;
@@ -111,12 +111,12 @@ xbInt16 xbIxNdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
npRightNode = FreeNodeChain( npRightNode );
npRightNode = AllocateIxNode( GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, 1 );
if( !npRightNode ){
- iErrorStop = 200;
+ iErrorStop = 140;
iRc = XB_NO_MEMORY;
throw iRc;
}
if(( iRc = SplitNodeI( npTag, npParent, npRightNode, npParent->iCurKeyNo, ulTempBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 210;
+ iErrorStop = 150;
throw iRc;
}
ulTempBlockNo = npRightNode->ulBlockNo;
@@ -128,7 +128,7 @@ xbInt16 xbIxNdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
if( npTag->npCurNode->ulBlockNo == npTag->ulRootBlock ){
// xbase->WriteLogMessage( "Section d" );
if(( iRc = AddKeyNewRoot( npTag, npTag->npCurNode, npRightNode )) != XB_NO_ERROR ){
- iErrorStop = 300;
+ iErrorStop = 160;
throw iRc;
}
npRightNode = FreeNodeChain( npRightNode );
@@ -136,7 +136,7 @@ xbInt16 xbIxNdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
} else {
// else section E, put key in parent
if(( iRc = InsertNodeI( vpTag, npParent, npParent->iCurKeyNo, npRightNode->ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 400;
+ iErrorStop = 170;
throw iRc;
}
npRightNode = FreeNodeChain( npRightNode );
@@ -145,7 +145,7 @@ xbInt16 xbIxNdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
// update the header
if(( iRc = WriteHeadBlock( iHeadNodeUpdateOpt )) != XB_NO_ERROR ){
- iErrorStop = 130;
+ iErrorStop = 180;
throw iRc;
}
@@ -327,21 +327,22 @@ xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
xbString sMsg;
char cKeyType;
char *pPrevKeyBuf = NULL;
- xbInt16 iAutoLock = xbFalse;
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbBool bLocked = xbFalse;
+ #endif
xbNdxTag * npTag;
vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
try{
-// xbase->WriteLogMessage( "xbIxNdx::CheckTagIntegrity()", iOpt );
-
#ifdef XB_LOCKING_SUPPORT
- iAutoLock = dbf->GetAutoLock();
- if( iAutoLock && !dbf->GetTableLocked() ){
+ if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
+ bLocked = xbTrue;
}
#endif
@@ -366,21 +367,21 @@ xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
if( iRc2 < 0 ){
sMsg.Sprintf( "Key sequence error at key number [%ld].", ulIxCnt );
xbase->WriteLogMessage( sMsg, iOpt );
- iErrorStop = 100;
+ iErrorStop = 110;
iRc = XB_INVALID_INDEX;
throw iRc;
}
ulThisRecNo = 0;
if(( iRc3 = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulThisRecNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
+ 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 = 120;
+ iErrorStop = 130;
iRc = XB_INVALID_INDEX;
throw iRc;
}
@@ -393,7 +394,7 @@ xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
// verify the index count matches the tag count
xbUInt32 ulDbfCnt = 0;
if(( iRc = dbf->GetRecordCnt( ulDbfCnt )) != XB_NO_ERROR ){
- iErrorStop = 130;
+ iErrorStop = 140;
throw iRc;
}
@@ -403,7 +404,7 @@ xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
if( ulDbfCnt != ulIxCnt ){
sMsg.Sprintf( "CheckTagIntegrity() Index entry count [%ld] does not match dbf record count [%ld]", ulIxCnt, ulDbfCnt );
xbase->WriteLogMessage( sMsg, iOpt );
- iErrorStop = 140;
+ iErrorStop = 150;
iRc = XB_INVALID_INDEX;
throw iRc;
}
@@ -412,29 +413,19 @@ xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
xbUInt32 j = 0;
while( j < ulDbfCnt ){
if(( iRc = dbf->GetRecord( ++j )) != XB_NO_ERROR ){
- iErrorStop = 150;
+ iErrorStop = 160;
throw iRc;
}
if(( iRc = FindKeyForCurRec( vpTag )) != XB_NO_ERROR ){
ulThisRecNo = j;
- iErrorStop = 160;
+ iErrorStop = 170;
throw iRc;
}
}
sMsg.Sprintf( "CheckTagIntegrity() Index entry count [%ld] matches dbf record count [%ld]", ulIxCnt, ulDbfCnt );
xbase->WriteLogMessage( sMsg, iOpt );
}
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- }
- #endif
-
-
+
if( pPrevKeyBuf )
free( pPrevKeyBuf );
@@ -447,11 +438,17 @@ xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
if( pPrevKeyBuf )
free( pPrevKeyBuf );
- if( iErrorStop == 160 ){
+ 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;
}
@@ -476,7 +473,7 @@ xbInt16 xbIxNdx::CreateKey( void * vpTag, xbInt16 iOpt ){
vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
if(( iRc = npTag->exp->ProcessExpression( 0 )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
if( npTag->exp->GetReturnType() == XB_EXP_CHAR ){
@@ -499,7 +496,7 @@ xbInt16 xbIxNdx::CreateKey( void * vpTag, xbInt16 iOpt ){
else if( iOpt == 2 ){
if(( iRc = npTag->exp->ProcessExpression( 1 )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
if( npTag->exp->GetReturnType() == XB_EXP_CHAR ){
@@ -512,7 +509,6 @@ xbInt16 xbIxNdx::CreateKey( void * vpTag, xbInt16 iOpt ){
if( memcmp( npTag->cpKeyBuf, npTag->cpKeyBuf2, (size_t) npTag->iKeyLen ))
npTag->iKeySts = XB_UPD_KEY;
}
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -555,11 +551,11 @@ xbInt16 xbIxNdx::CreateTag( const xbString &sName, const xbString &sKey,
if( FileIsOpen()){
if(( iRc = xbTruncate(0)) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
if(( iRc = xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
@@ -575,16 +571,15 @@ xbInt16 xbIxNdx::CreateTag( const xbString &sName, const xbString &sKey,
npTag->cpKeyBuf2 = NULL;
}
}
-
if(( iRc = xbFopen( "w+b", dbf->GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 30;
+ 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 = 40;
+ iErrorStop = 130;
throw iRc;
}
@@ -608,20 +603,20 @@ xbInt16 xbIxNdx::CreateTag( const xbString &sName, const xbString &sKey,
break;
default:
- iErrorStop = 50;
+ 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 = 60;
+ iErrorStop = 150;
throw iRc;
}
@@ -633,7 +628,7 @@ xbInt16 xbIxNdx::CreateTag( const xbString &sName, const xbString &sKey,
ndxTag->cpKeyBuf2 = (char *) malloc( (size_t) ndxTag->iKeyLen );
if(( iRc = WriteHeadBlock(0)) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw iRc;
}
@@ -641,10 +636,9 @@ xbInt16 xbIxNdx::CreateTag( const xbString &sName, const xbString &sKey,
char buf[512];
memset( buf, 0x00, 512 );
if(( iRc = xbFwrite( buf, 1, 512 )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 170;
throw iRc;
}
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -741,7 +735,6 @@ xbInt16 xbIxNdx::DeleteKey( void *vpTag ){
// 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;
@@ -873,8 +866,6 @@ xbInt16 xbIxNdx::DeleteTag( void * ){
\returns void
*/
-//xbInt16 xbIxNdx::DumpTagBlocks( xbInt16 iOpt, void *vpTag ){
-
xbInt16 xbIxNdx::DumpTagBlocks( xbInt16 iOpt, void * ){
xbInt16 iRc = 0;
@@ -887,7 +878,7 @@ xbInt16 xbIxNdx::DumpTagBlocks( xbInt16 iOpt, void * ){
try{
if( !FileIsOpen()){
iRc = XB_NOT_OPEN;
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -900,7 +891,7 @@ xbInt16 xbIxNdx::DumpTagBlocks( xbInt16 iOpt, void * ){
memset( cNodeBuf, 0x00, XB_NDX_BLOCK_SIZE );
if(( iRc = ReadBlock( lBlk, XB_NDX_BLOCK_SIZE, cNodeBuf )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
p = cNodeBuf;
@@ -1060,7 +1051,7 @@ void xbIxNdx::DumpIxNodeChain( void *vpTag, xbInt16 iOpt ) const
0 = stdout<br>
1 = Syslog<br>
2 = Both<br>
- \returns XB_NVALID_OBJECT<br>XB_NO_ERROR
+ \returns XB_INVALID_OBJECT<br>XB_NO_ERROR
*/
xbInt16 xbIxNdx::DumpNode( void *vpTag, xbIxNode *pNode, xbInt16 iOpt ) const
@@ -1149,12 +1140,12 @@ xbInt16 xbIxNdx::FindKey( void *vpTag, const void *vpKey, xbInt32 lSearchKeyLen,
if( dbf->GetDbfStatus() == XB_UPDATED ){
if( dbf->GetAutoCommit() == 1 ){
if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
} else {
if(( iRc = dbf->Abort()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -1171,18 +1162,18 @@ xbInt16 xbIxNdx::FindKey( void *vpTag, const void *vpKey, xbInt32 lSearchKeyLen,
// 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 = 30;
+ iErrorStop = 120;
throw iRc;
}
if( npTag->tNodeChainTs < tFileTs ){
npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
npTag->npCurNode = NULL;
if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if(( iRc = GetBlock( npTag, (npTag->ulRootBlock ), 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
} else {
@@ -1212,7 +1203,7 @@ xbInt16 xbIxNdx::FindKey( void *vpTag, const void *vpKey, xbInt32 lSearchKeyLen,
}
} else {
if(( iRc = GetBlock( npTag, (npTag->ulRootBlock ), 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
}
@@ -1252,12 +1243,12 @@ xbInt16 xbIxNdx::FindKey( void *vpTag, const void *vpKey, xbInt32 lSearchKeyLen,
}
if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 160;
throw iRc;
}
if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 170;
throw iRc;
}
}
@@ -1289,11 +1280,11 @@ xbInt16 xbIxNdx::FindKey( void *vpTag, const void *vpKey, xbInt32 lSearchKeyLen,
ulKey--;
if(( iRc = GetDbfPtr( vpTag, ulKey, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 180;
throw iRc;
}
if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 190;
throw iRc;
}
}
@@ -1335,7 +1326,7 @@ xbInt16 xbIxNdx::FindKeyForCurRec( void * vpTag )
try{
if(( iRc = CreateKey( vpTag, 0 )) < XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
@@ -1345,7 +1336,7 @@ xbInt16 xbIxNdx::FindKeyForCurRec( void * vpTag )
return iRc;
if( iRc != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
@@ -1361,7 +1352,7 @@ xbInt16 xbIxNdx::FindKeyForCurRec( void * vpTag )
char cKeyType = GetKeyType( vpTag );
if(( iRc = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if( ulIxRecNo == ulDbfRecNo )
@@ -1371,7 +1362,7 @@ xbInt16 xbIxNdx::FindKeyForCurRec( void * vpTag )
while( !bCurRecsMatch && bKeysMatch ){
if(( iRc = GetNextKey( vpTag, 0 )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
@@ -1381,7 +1372,7 @@ xbInt16 xbIxNdx::FindKeyForCurRec( void * vpTag )
bKeysMatch = false;
else{
if(( iRc = GetDbfPtr( vpTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
if( ulIxRecNo == ulDbfRecNo )
@@ -1417,7 +1408,7 @@ xbInt16 xbIxNdx::GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32
// turn this off in production mode for better performance
xbUInt32 ulNoOfKeys = eGetUInt32 ( np->cpBlockData );
if( iKeyNo < 0 || iKeyNo > (xbInt16) --ulNoOfKeys ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw XB_INVALID_KEYNO;
}
#endif
@@ -1458,12 +1449,12 @@ xbInt16 xbIxNdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw ){
npTag->npCurNode = NULL;
}
if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
// lRootBlock is now available
if(( iRc = GetBlock( npTag, npTag->ulRootBlock, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
// if no keys on this node, and it's a leaf node then the index is empty
@@ -1475,21 +1466,21 @@ xbInt16 xbIxNdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw ){
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 = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
}
if( iRetrieveSw ){
if(( iRc = GetDbfPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
}
@@ -1556,7 +1547,7 @@ xbInt16 xbIxNdx::GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32
// turn this off in production mode for better performance
xbUInt32 ulNoOfKeys = eGetUInt32 ( np->cpBlockData );
if( iKeyNo < 0 || iKeyNo > (xbInt16) ulNoOfKeys ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw XB_INVALID_KEYNO;
}
#endif
@@ -1653,17 +1644,17 @@ xbInt16 xbIxNdx::GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 iRetrieveSw
}
if( ulNodeNo == 0 ){
if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
// lRootBlock is now available
if(( iRc = GetBlock( npTag, npTag->ulRootBlock, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
} else {
if(( iRc = GetBlock( npTag, ulNodeNo, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 120;
throw iRc;
}
}
@@ -1677,11 +1668,11 @@ xbInt16 xbIxNdx::GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 iRetrieveSw
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 = 40;
+ iErrorStop = 130;
throw iRc;
}
if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
@@ -1692,11 +1683,11 @@ xbInt16 xbIxNdx::GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 iRetrieveSw
if( iRetrieveSw ){
ulNoOfKeys = eGetUInt32( npTag->npCurNode->cpBlockData );
if(( iRc = GetDbfPtr( npTag, ulNoOfKeys - 1, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw iRc;
}
}
@@ -1778,12 +1769,12 @@ xbInt16 xbIxNdx::GetNextKey( void * vpTag, xbInt16 iRetrieveSw ){
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 = 20;
+ iErrorStop = 100;
throw iRc;
}
if( iRetrieveSw ){
if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 110;
throw iRc;
} else {
return iRc;
@@ -1817,32 +1808,32 @@ xbInt16 xbIxNdx::GetNextKey( void * vpTag, xbInt16 iRetrieveSw ){
npTag->npCurNode->iCurKeyNo++;
if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ 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 = 60;
+ iErrorStop = 140;
throw iRc;
}
if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 150;
throw iRc;
}
}
if( iRetrieveSw ){
if(( iRc = GetDbfPtr( npTag, 0, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 160;
throw iRc;
}
if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 170;
throw iRc;
}
}
@@ -1882,12 +1873,12 @@ xbInt16 xbIxNdx::GetPrevKey( void * vpTag, xbInt16 iRetrieveSw ){
npTag->npCurNode->iCurKeyNo--;
if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
if( iRetrieveSw ){
if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
} else {
return iRc;
@@ -1923,23 +1914,23 @@ xbInt16 xbIxNdx::GetPrevKey( void * vpTag, xbInt16 iRetrieveSw ){
npTag->npCurNode->iCurKeyNo--;
if(( iRc = GetKeyPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ 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 = 60;
+ iErrorStop = 140;
throw iRc;
}
if(( iRc = GetBlock( npTag, ulKeyPtr, 1, (xbUInt32) npTag->iKeyItemLen )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 150;
throw iRc;
}
}
@@ -1947,11 +1938,11 @@ xbInt16 xbIxNdx::GetPrevKey( void * vpTag, xbInt16 iRetrieveSw ){
npTag->npCurNode->iCurKeyNo = eGetUInt32( npTag->npCurNode->cpBlockData ) - 1;
if( iRetrieveSw ){
if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 160;
throw iRc;
}
if(( iRc = dbf->GetRecord( ulKeyPtr )) != XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 170;
throw iRc;
}
}
@@ -2096,7 +2087,7 @@ xbInt16 xbIxNdx::InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xb
// write out the updated block to disk
if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 120;
throw iRc;
}
if( pLastKey )
@@ -2166,7 +2157,7 @@ xbInt16 xbIxNdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo,
// write out the updated block to disk
if(( iRc = WriteBlock( npNode->ulBlockNo, GetBlockSize(), npNode->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
}
@@ -2233,14 +2224,14 @@ xbInt16 xbIxNdx::KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddRecNo ){
return XB_NO_ERROR; // good position
else if( iRc != XB_NO_ERROR ){
- iErrorStop = 10;
+ 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 = 20;
+ iErrorStop = 110;
throw iRc;
}
xbBool bKeysMatch = xbTrue;
@@ -2250,7 +2241,7 @@ xbInt16 xbIxNdx::KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddRecNo ){
bKeysMatch = xbFalse;
else{
if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulCurRecNo )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
}
@@ -2296,18 +2287,18 @@ xbInt16 xbIxNdx::KeySetPosDel( xbNdxTag *npTag ){
if( iRc == XB_NOT_FOUND || iRc == XB_EMPTY )
return XB_NO_ERROR; // good position
else if( iRc != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 100;
throw iRc;
}
xbUInt32 ulIxRecNo;
if(( iRc = GetDbfPtr( npTag, npTag->npCurNode->iCurKeyNo, npTag->npCurNode, ulIxRecNo )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 110;
throw iRc;
}
if( ulIxRecNo == dbf->GetCurRecNo())
return XB_NO_ERROR;
if( GetUnique() == 1 ){
- iErrorStop = 40;
+ iErrorStop = 120;
iRc = XB_NOT_FOUND;
throw iRc;
}
@@ -2315,14 +2306,14 @@ xbInt16 xbIxNdx::KeySetPosDel( xbNdxTag *npTag ){
xbBool bKeysMatch = xbTrue;
while( bKeysMatch && !bFound && iRc == XB_NO_ERROR ){
if(( iRc = GetNextKey( npTag, 0 )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ 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 = 60;
+ iErrorStop = 140;
throw iRc;
}
if( ulIxRecNo == dbf->GetCurRecNo())
@@ -2368,14 +2359,14 @@ xbInt16 xbIxNdx::ReadHeadBlock( xbInt16 iOpt = 0 ) {
try{
if( !FileIsOpen()){
iRc = XB_NOT_OPEN;
- iErrorStop = 10;
+ 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 = 20;
+ iErrorStop = 110;
throw iRc;
}
char *p = cNodeBuf;
@@ -2396,7 +2387,7 @@ xbInt16 xbIxNdx::ReadHeadBlock( xbInt16 iOpt = 0 ) {
ndxTag->exp = new xbExp( xbase, dbf );
if(( iRc = ndxTag->exp->ParseExpression( ndxTag->sKeyExpression.Str() )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
@@ -2448,24 +2439,24 @@ xbInt16 xbIxNdx::Reindex( void **vpTag ){
void *vpTag2;
if(( iRc = CreateTag( sFileName, sKey, sFilter, 0, iUnique, xbTrue, &vpTag2 )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
xbUInt32 ulRecCnt = 0;
if(( iRc = dbf->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
for( xbUInt32 l = 1; l <= ulRecCnt; l++ ){
if(( iRc = dbf->GetRecord( l )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = CreateKey( vpTag2, 1 )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
@@ -2473,7 +2464,7 @@ xbInt16 xbIxNdx::Reindex( void **vpTag ){
iRc = CheckForDupKey( vpTag2 );
if( iRc != 0 ){
if( iRc < 0 ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
return XB_KEY_NOT_UNIQUE;
@@ -2481,7 +2472,7 @@ xbInt16 xbIxNdx::Reindex( void **vpTag ){
}
if(( iRc = AddKey( vpTag2, l )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc;
}
}
@@ -2493,11 +2484,8 @@ xbInt16 xbIxNdx::Reindex( void **vpTag ){
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
-
return iRc;
}
-
-
/***********************************************************************/
//! @brief Set current tag.
/*!
@@ -2593,12 +2581,12 @@ xbInt16 xbIxNdx::SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
// write out the block
if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 110;
throw iRc;
}
// write out the block
if(( iRc = WriteBlock( npRight->ulBlockNo, GetBlockSize(), npRight->cpBlockData )) != XB_NO_ERROR ){
- iErrorStop = 200;
+ iErrorStop = 120;
throw iRc;
}
}
@@ -2675,18 +2663,16 @@ xbInt16 xbIxNdx::SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
pTrg = npRight->cpBlockData;
ePutInt32( pTrg, lNewRightKeyCnt );
- // write out the block
+ // write out the left block
if(( iRc = WriteBlock( npLeft->ulBlockNo, GetBlockSize(), npLeft->cpBlockData )) != XB_NO_ERROR ){
iErrorStop = 110;
throw iRc;
}
-
- // write out the block
+ // 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;
@@ -2734,16 +2720,12 @@ xbInt16 xbIxNdx::UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo ){
}
if( cAction == 'A' || cAction == 'R' ){
-// std::cout << "UpdateTagKey add\n";
if(( iRc = AddKey( vpTag, ulRecNo )) != XB_NO_ERROR ){
- iErrorStop = 200;
+ iErrorStop = 110;
throw iRc;
}
}
-// if( ulTagSizeSave != mpTag->ulTagSize ){
-// std::cout << "UpdateTagKey - tag size was updated need to do something here\n";
-// }
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -2753,7 +2735,6 @@ xbInt16 xbIxNdx::UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo ){
}
return iRc;
}
-
/***********************************************************************/
//! @brief Write head block.
/*!
@@ -2792,7 +2773,7 @@ xbInt16 xbIxNdx::WriteHeadBlock( xbInt16 iOpt ){
ePutUInt32( &buf[0], ndxTag->ulRootBlock );
ePutUInt32( &buf[4], ndxTag->ulTotalBlocks );
if(( iRc = xbFwrite( buf, 8, 1 )) != XB_NO_ERROR ){
- iErrorStop = 200;
+ iErrorStop = 120;
throw iRc;
}
return WriteHeadBlock( 2 );
@@ -2816,7 +2797,7 @@ xbInt16 xbIxNdx::WriteHeadBlock( xbInt16 iOpt ){
xbRewind();
if(( iRc = xbFwrite( buf, 512, 1 )) != XB_NO_ERROR ){
- iErrorStop = 300;
+ iErrorStop = 130;
throw iRc;
}
} else {
diff --git a/src/core/xbmemo.cpp b/src/core/xbmemo.cpp
index 02bdbbf..2bde853 100755
--- a/src/core/xbmemo.cpp
+++ b/src/core/xbmemo.cpp
@@ -94,7 +94,7 @@ xbInt16 xbMemo::GetHdrNextBlock( xbUInt32 & ulBlockNo ){
xbInt16 iErrorStop = 0;
try{
if(( iRc = ReadDbtHeader( 0 )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
ulBlockNo = ulHdrNextBlock;
@@ -133,7 +133,7 @@ xbInt16 xbMemo::LockMemo( xbInt16 iLockFunction ){
if( iRc == XB_LOCK_FAILED )
return iRc;
else {
- iErrorStop = 120;
+ iErrorStop = 100;
throw iRc;
}
} else {
@@ -151,7 +151,7 @@ xbInt16 xbMemo::LockMemo( xbInt16 iLockFunction ){
if( iRc == XB_LOCK_FAILED )
return iRc;
else {
- iErrorStop = 140;
+ iErrorStop = 110;
throw iRc;
}
} else {
@@ -159,7 +159,7 @@ xbInt16 xbMemo::LockMemo( xbInt16 iLockFunction ){
}
}
} else {
- iErrorStop = 300;
+ iErrorStop = 120;
iRc = XB_INVALID_OPTION;
throw iRc;
}
@@ -197,11 +197,11 @@ xbInt16 xbMemo::UpdateHeadNextNode(){
char buf[4];
ePutUInt32( buf, ulHdrNextBlock );
if(( iRc = xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
if(( iRc = xbFwrite( &buf, 4, 1 )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
diff --git a/src/core/xbmemo3.cpp b/src/core/xbmemo3.cpp
index b5494fb..60c1d53 100755
--- a/src/core/xbmemo3.cpp
+++ b/src/core/xbmemo3.cpp
@@ -92,6 +92,7 @@ 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.
/*!
@@ -114,7 +115,6 @@ xbInt16 xbMemoDbt3::DumpMemoHeader(){
std::cout << "Block Count = " << stFileSize / GetBlockSize() << std::endl;
return XB_NO_ERROR;
}
-#endif // XB_DEBUG_SUPPORT
/***********************************************************************/
//! @brief Get a memo field for a given field number.
/*!
@@ -134,7 +134,7 @@ xbInt16 xbMemoDbt3::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
sMemoData = "";
try{
if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
if( ulBlockNo == 0L ){
@@ -144,7 +144,7 @@ xbInt16 xbMemoDbt3::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
spp = NULL;
while( !bDone ){
if(( rc = ReadBlock( ulBlockNo++, GetBlockSize(), mbb )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 120;
throw rc;
}
ulScnt = 0;
@@ -185,7 +185,7 @@ xbInt16 xbMemoDbt3::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 & ulFieldLen ){
xbInt16 iNotDone;
try{
if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
if( ulBlockNo == 0 ){
@@ -197,7 +197,7 @@ xbInt16 xbMemoDbt3::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 & ulFieldLen ){
iNotDone = 1;
while( iNotDone ){
if(( rc = ReadBlock( ulBlockNo++, GetBlockSize(), mbb )) != XB_NO_ERROR ){
- iErrorStop = 1;
+ iErrorStop = 110;
throw rc;
}
iScnt = 0;
@@ -251,22 +251,21 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
char * cBlock = NULL;
#ifdef XB_LOCKING_SUPPORT
- xbInt16 iAutoLock = dbf->GetAutoLock();
xbBool bTableLocked = xbFalse;
xbBool bMemoLocked = xbFalse;
#endif
try{
#ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !dbf->GetTableLocked() ){
+ if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
} else {
bTableLocked = xbTrue;
}
if(( iRc = LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
} else {
bMemoLocked = xbTrue;
@@ -277,20 +276,20 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
// create temp file
xbString sTempMemoName;
if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 120;
throw iRc;
}
xbMemoDbt3 *pMemo = new xbMemoDbt3( dbf, sTempMemoName );
if(( iRc = pMemo->CreateMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ 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 = 30;
+ iErrorStop = 140;
throw iRc;
}
xbInt32 lFldCnt = dbf->GetFieldCnt();
@@ -299,7 +298,7 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
for( xbUInt32 ulI = 1; ulI <= ulRecCnt; ulI++ ){
if(( iRc = dbf->GetRecord( ulI )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 150;
throw iRc;
}
if( (void *) memoStatusFunc )
@@ -308,18 +307,18 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
// for each memo field
for( xbInt32 lFc = 0; lFc < lFldCnt; lFc++ ){
if(( iRc = dbf->GetFieldType( lFc, cFldType )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 160;
throw iRc;
}
if( cFldType == 'M' ){
// copy it to work field
if(( iRc = dbf->GetMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 170;
throw iRc;
}
// write it to new field
if(( iRc = pMemo->UpdateMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 180;
throw iRc;
}
}
@@ -330,25 +329,25 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
xbUInt32 ulBlkSize = GetBlockSize();
xbUInt64 ullFileSize;
if(( iRc = pMemo->GetFileSize( ullFileSize )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 190;
throw iRc;
}
// file size should be evenly divisible by block size
xbUInt32 ulBlkCnt;
if( ullFileSize % ulBlkSize ){
- iErrorStop = 90;
+ iErrorStop = 200;
throw iRc;
} else {
ulBlkCnt = (xbUInt32) (ullFileSize / ulBlkSize);
}
if(( iRc = xbTruncate( 0 )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 210;
throw iRc;
}
if(( cBlock = (char *) malloc( (size_t) ulBlkSize )) == NULL ){
- iErrorStop = 110;
+ iErrorStop = 220;
throw iRc;
}
@@ -356,54 +355,40 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
// 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 = 120;
+ iErrorStop = 230;
throw iRc;
}
if(( iRc = WriteBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
- iErrorStop = 130;
+ iErrorStop = 240;
throw iRc;
}
}
//close and delete target
if(( iRc = pMemo->xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 140;
+ iErrorStop = 250;
throw iRc;
}
if(( iRc = pMemo->xbRemove()) != XB_NO_ERROR ){
- iErrorStop = 150;
+ iErrorStop = 260;
throw iRc;
}
free( cBlock );
delete pMemo;
-
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- if(( iRc = LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- }
- #endif
}
catch (xbInt16 iRc ){
free( cBlock );
-
- #ifdef XB_LOCKING_SUPPORT
- if( bTableLocked )
- dbf->LockTable( XB_UNLOCK );
- if( bMemoLocked )
- LockMemo( XB_UNLOCK );
- #endif
-
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;
}
@@ -424,7 +409,7 @@ xbInt16 xbMemoDbt3::ReadDbtHeader( xbInt16 iOption ){
try{
if( !FileIsOpen() ){
- iErrorStop = 10;
+ iErrorStop = 100;
rc = XB_NOT_OPEN;
throw rc;
}
@@ -433,26 +418,26 @@ xbInt16 xbMemoDbt3::ReadDbtHeader( xbInt16 iOption ){
else{
xbUInt64 stFileSize = 0;
if(( rc = GetFileSize( stFileSize )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
if( stFileSize < 4 ){
- iErrorStop = 30;
+ iErrorStop = 120;
rc = XB_INVALID_BLOCK_NO;
throw rc;
}
else if( stFileSize > 20 )
- ulReadSize = 40;
+ ulReadSize = 130;
else
ulReadSize = 4;
}
if( xbFseek( 0, SEEK_SET )){
- iErrorStop = 50;
+ iErrorStop = 140;
rc = XB_SEEK_ERROR;
throw rc;
}
if(( xbFread( &MemoBlock, ulReadSize, 1 )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
rc = XB_READ_ERROR;
throw rc;
}
@@ -498,7 +483,7 @@ xbInt16 xbMemoDbt3::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
try{
if( sMemoData == "" ){
if(( rc = dbf->PutField( iFieldNo, "" )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
} else {
@@ -506,32 +491,32 @@ xbInt16 xbMemoDbt3::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
xbUInt32 ulBlocksNeeded = (ulDataLen / 512) + 1;
xbUInt32 ulLastDataBlock;
if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
if(( rc = xbFseek( ((xbInt64) ulLastDataBlock * 512), SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
}
if(( rc = xbFwrite( sMemoData.Str(), sMemoData.Len(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw rc;
}
if(( rc = xbFputc( 0x1a, 2 )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw rc;
}
if(( rc = xbFputc( 0x00, (xbInt32) ( ulBlocksNeeded * 512 ) - (xbInt32) ulDataLen )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw rc;
}
if(( rc = dbf->PutULongField( iFieldNo, ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw rc;
}
ulHdrNextBlock = ulLastDataBlock + ulBlocksNeeded;
if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 170;
throw rc;
}
}
@@ -563,15 +548,15 @@ xbInt16 xbMemoDbt3::Zap(){
ePutUInt32( cBuf, ulHdrNextBlock );
if(( iRc != xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
if(( iRc != xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
if(( iRc != xbTruncate( 512 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
}
diff --git a/src/core/xbmemo4.cpp b/src/core/xbmemo4.cpp
index 4f92d2b..d02df99 100755
--- a/src/core/xbmemo4.cpp
+++ b/src/core/xbmemo4.cpp
@@ -53,11 +53,11 @@ xbInt16 xbMemoDbt4::Abort(){
xbUInt32 ulNodeCnt = llNewBlocks.GetNodeCnt();
for( xbUInt32 l = 0; l < ulNodeCnt; l++ ){
if(( rc = llNewBlocks.RemoveFromFront( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
if(( rc = FreeMemoBlockChain( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
}
@@ -89,11 +89,11 @@ xbInt16 xbMemoDbt4::Commit(){
xbUInt32 ulNodeCnt = llOldBlocks.GetNodeCnt();
for( xbUInt32 l = 0; l < ulNodeCnt; l++ ){
if(( rc = llOldBlocks.RemoveFromFront( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
if(( rc = FreeMemoBlockChain( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
}
@@ -121,14 +121,14 @@ xbInt16 xbMemoDbt4::CreateMemoFile(){
try{
if(( rc = xbFopen( "w+b", dbf->GetShareMode() )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
ulHdrNextBlock = 1L;
ePutUInt32( cBuf, ulHdrNextBlock );
if(( rc = xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
xbFclose();
throw rc;
}
@@ -145,7 +145,7 @@ xbInt16 xbMemoDbt4::CreateMemoFile(){
ePutInt16( cBuf, GetBlockSize());
if(( rc = xbFwrite( cBuf, 2, 1 ))!= XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 120;
xbFclose();
throw rc;
}
@@ -153,7 +153,7 @@ xbInt16 xbMemoDbt4::CreateMemoFile(){
xbFputc( 0x00 );
if(( mbb = (void *) malloc( GetBlockSize())) == NULL ){
rc = XB_NO_MEMORY;
- iErrorStop = 80;
+ iErrorStop = 130;
return XB_NO_MEMORY;
}
}
@@ -181,11 +181,11 @@ xbInt16 xbMemoDbt4::DumpMemoFreeChain()
try{
if(( rc = ReadDbtHeader(1)) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
@@ -196,7 +196,7 @@ xbInt16 xbMemoDbt4::DumpMemoFreeChain()
while( ulCurBlock < ulLastDataBlock ){
if(( rc = ReadBlockHeader( ulCurBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
}
std::cout << "**********************************" << std::endl;
@@ -245,6 +245,8 @@ xbInt16 xbMemoDbt4::DumpMemoInternals() {
return XB_NO_ERROR;
}
+#endif // XB_DEBUG_SUPPORT
+
/***********************************************************************/
//! @brief Dump memo file header.
/*!
@@ -266,7 +268,6 @@ xbInt16 xbMemoDbt4::DumpMemoHeader(){
std::cout << "Last Data Block = " << ulLastDataBlock << std::endl;
return rc;
}
-#endif // XB_DEBUG_SUPPORT
/************************************************************************/
//! @brief Find an empty set of blocks in the free block chain
@@ -295,7 +296,7 @@ xbInt16 xbMemoDbt4::FindBlockSetInChain( xbUInt32 ulBlocksNeeded,
if( ulLastDataBlock == 0 ){
/* Determine last good data block */
if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
}
@@ -303,14 +304,14 @@ xbInt16 xbMemoDbt4::FindBlockSetInChain( xbUInt32 ulBlocksNeeded,
ulCurNode = ulHdrNextBlock;
if(( rc = ReadBlockHeader( ulHdrNextBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
while( ulBlocksNeeded > ulFreeBlockCnt && ulNextFreeBlock < ulLastDataBlock ){
ulPrevNode = ulCurNode;
ulCurNode = ulNextFreeBlock;
if(( rc = ReadBlockHeader( ulNextFreeBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
}
}
@@ -373,14 +374,14 @@ xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastData
try{
if( ulBlockNo <= 0 ){
- iErrorStop = 10;
+ iErrorStop = 100;
rc =XB_INVALID_BLOCK_NO;
throw rc;
}
/* Load the first block */
if(( rc = ReadBlockHeader( ulBlockNo, 1 )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
@@ -391,12 +392,12 @@ xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastData
/* Determine last good data block */
if(( rc = CalcLastDataBlock( ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
}
if(( rc = ReadDbtHeader( 0 )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw rc;
}
@@ -406,7 +407,7 @@ xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastData
ulLastFreeBlock = ulNextFreeBlock;
if(( rc = ReadBlockHeader( ulNextFreeBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
return rc;
}
ulLastFreeBlockCnt = ulFreeBlockCnt;
@@ -421,7 +422,7 @@ xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastData
ulSaveNextFreeBlock = ulNextFreeBlock;
if(( ulBlockNo + ulNoOfFreedBlocks ) == ulNextFreeBlock && ulNextFreeBlock < ulLastDataBlock ){
if(( rc = ReadBlockHeader( ulNextFreeBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw rc;
}
ulNoOfFreedBlocks += ulFreeBlockCnt;
@@ -438,13 +439,13 @@ xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastData
ePutUInt32( (char *) mbb, ulSaveNextFreeBlock );
ePutUInt32( (char *) mbb+4, ulNoOfFreedBlocks );
if(( rc = WriteBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw rc;
}
ulHdrNextBlock = ulBlockNo;
if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 170;
throw rc;
}
return XB_NO_ERROR;
@@ -452,9 +453,8 @@ xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastData
/* 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 = 90;
+ iErrorStop = 180;
throw rc;
}
ulFreeBlockCnt += ulNoOfFreedBlocks;
@@ -462,7 +462,7 @@ xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastData
ePutUInt32( (char *) mbb, ulSaveNextFreeBlock );
ePutUInt32( (char *) mbb+4, ulFreeBlockCnt );
if(( rc = WriteBlock( ulLastFreeBlock, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 190;
throw rc;
}
return XB_NO_ERROR;
@@ -478,34 +478,29 @@ xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastData
ePutUInt32( (char *) mbb, ulSaveNextFreeBlock );
ePutUInt32( (char *) mbb+4, ulNoOfFreedBlocks );
if(( rc = WriteBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 200;
throw rc;
}
if(( rc = ReadBlockHeader( ulLastFreeBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 120;
+ iErrorStop = 210;
throw rc;
}
ePutUInt32( (char *) mbb, ulBlockNo );
if(( rc = WriteBlock( ulLastFreeBlock, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 130;
+ 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.
/*!
@@ -520,9 +515,7 @@ xbInt16 xbMemoDbt4::FreeMemoBlockChain( xbUInt32 ulBlockNo, xbUInt32 &ulLastData
xbInt16 xbMemoDbt4::GetBlockSetFromChain( xbUInt32 ulBlocksNeeded,
xbUInt32 ulLocation, xbUInt32 ulPrevNode )
-
{
-
xbInt16 rc = XB_NO_ERROR;
xbInt16 iErrorStop = 0;
xbUInt32 ulNextFreeBlock2;
@@ -531,7 +524,7 @@ xbInt16 xbMemoDbt4::GetBlockSetFromChain( xbUInt32 ulBlocksNeeded,
try{
if(( rc = ReadBlockHeader( ulLocation, 2 )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
@@ -539,7 +532,7 @@ xbInt16 xbMemoDbt4::GetBlockSetFromChain( xbUInt32 ulBlocksNeeded,
if( ulPrevNode == 0 ){ // first in the chain
ulHdrNextBlock = ulNextFreeBlock;
if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
}
@@ -547,12 +540,12 @@ xbInt16 xbMemoDbt4::GetBlockSetFromChain( xbUInt32 ulBlocksNeeded,
{
ulNextFreeBlock2 = ulNextFreeBlock;
if(( rc = ReadBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
}
ulNextFreeBlock = ulNextFreeBlock2;
if(( rc = WriteBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw rc;
}
}
@@ -560,36 +553,33 @@ xbInt16 xbMemoDbt4::GetBlockSetFromChain( xbUInt32 ulBlocksNeeded,
if( ulPrevNode == 0 ){ // first in the set
ulHdrNextBlock = ulLocation + ulBlocksNeeded;
if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw rc;
}
ulFreeBlockCnt -= ulBlocksNeeded;
if(( rc = WriteBlockHeader( ulHdrNextBlock, 2 )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ 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 = 70;
+ iErrorStop = 160;
throw rc;
}
-
ulNextFreeBlock = ulNextFreeBlock2;
if(( rc = WriteBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 170;
throw rc;
}
ulFreeBlockCnt = ulNewFreeBlocks;
ulNextFreeBlock = ulSaveNextFreeBlock;
if(( rc = WriteBlockHeader( ulNextFreeBlock2, 2 )) != XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 180;
throw rc;
}
}
@@ -603,7 +593,6 @@ xbInt16 xbMemoDbt4::GetBlockSetFromChain( xbUInt32 ulBlocksNeeded,
}
return rc;
}
-
/***********************************************************************/
//! @brief Get a memo field for a given field number.
/*!
@@ -622,9 +611,8 @@ xbInt16 xbMemoDbt4::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
char *p = NULL;
try{
-
if(( rc = GetMemoFieldLen( iFieldNo, ulMemoFieldLen, ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
@@ -634,7 +622,7 @@ xbInt16 xbMemoDbt4::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
ulMemoFieldDataLen = ulMemoFieldLen - 8;
if(( p = (char *)calloc(1, ulMemoFieldDataLen+1)) == NULL ){
- iErrorStop = 20;
+ iErrorStop = 110;
rc = XB_NO_MEMORY;
xbString sMsg;
sMsg.Sprintf( "xbMemoDbt4::GetMemoField() lBlockNo = %ld Data Len = [%ld]", ulBlockNo, ulMemoFieldDataLen + 1 );
@@ -644,18 +632,17 @@ xbInt16 xbMemoDbt4::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
// 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 = 30;
+ 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 = 40;
+ iErrorStop = 130;
rc = XB_READ_ERROR;
throw rc;
}
-
// null terminate the string
char *p2;
p2 = p + ulMemoFieldDataLen;
@@ -665,7 +652,6 @@ xbInt16 xbMemoDbt4::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
sMemoData.Set( p, ulMemoFieldDataLen + 1 );
free( p );
}
-
}
catch (xbInt16 rc ){
xbString sMsg;
@@ -708,30 +694,27 @@ xbInt16 xbMemoDbt4::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen,
try{
if(( rc = dbf->GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
if( cFieldType != 'M' ){
- iErrorStop = 20;
+ iErrorStop = 110;
rc = XB_INVALID_MEMO_FIELD;
throw rc;
}
if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
}
-
if( ulBlockNo < 1 ){
ulMemoFieldLen = 0;
return XB_NO_ERROR;
}
-
if(( rc = ReadBlockHeader( ulBlockNo, 1 )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw rc;
}
ulMemoFieldLen = ulFieldLen;
-
}
catch (xbInt16 rc ){
xbString sMsg;
@@ -741,7 +724,6 @@ xbInt16 xbMemoDbt4::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 &ulMemoFieldLen,
}
return rc;
}
-
/***********************************************************************/
//! @brief Open memo file.
/*!
@@ -755,16 +737,16 @@ xbInt16 xbMemoDbt4::OpenMemoFile() {
try{
if(( rc = xbFopen( dbf->GetOpenMode(), dbf->GetShareMode())) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
if(( rc = ReadDbtHeader( 1 )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
if(( mbb = (void *) malloc( GetBlockSize())) == NULL ){
xbFclose();
- iErrorStop = 30;
+ iErrorStop = 120;
rc = XB_NO_MEMORY;
throw rc;
}
@@ -792,23 +774,21 @@ xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
char * cBlock = NULL;
#ifdef XB_LOCKING_SUPPORT
- xbInt16 iAutoLock = dbf->GetAutoLock();
xbBool bTableLocked = xbFalse;
xbBool bMemoLocked = xbFalse;
#endif
try{
-
#ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !dbf->GetTableLocked() ){
+ if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
} else {
bTableLocked = xbTrue;
}
if(( iRc = LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
} else {
bMemoLocked = xbTrue;
@@ -819,20 +799,20 @@ xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
// create temp file
xbString sTempMemoName;
if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 120;
throw iRc;
}
xbMemoDbt4 *pMemo = new xbMemoDbt4( dbf, sTempMemoName );
if(( iRc = pMemo->CreateMemoFile()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ 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 = 30;
+ iErrorStop = 140;
throw iRc;
}
xbInt32 lFldCnt = dbf->GetFieldCnt();
@@ -841,7 +821,7 @@ xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
for( xbUInt32 ulI = 1; ulI <= ulRecCnt; ulI++ ){
if(( iRc = dbf->GetRecord( ulI )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 150;
throw iRc;
}
@@ -851,18 +831,18 @@ xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
// for each memo field
for( xbInt32 lFc = 0; lFc < lFldCnt; lFc++ ){
if(( iRc = dbf->GetFieldType( lFc, cFldType )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 160;
throw iRc;
}
if( cFldType == 'M' ){
// copy it to work field
if(( iRc = dbf->GetMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 170;
throw iRc;
}
// write it to new field
if(( iRc = pMemo->UpdateMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 180;
throw iRc;
}
}
@@ -873,25 +853,25 @@ xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
xbUInt32 ulBlkSize = GetBlockSize();
xbUInt64 ullFileSize;
if(( iRc = pMemo->GetFileSize( ullFileSize )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 190;
throw iRc;
}
// file size should be evenly divisible by block size
xbUInt32 ulBlkCnt;
if( ullFileSize % ulBlkSize ){
- iErrorStop = 90;
+ iErrorStop = 200;
throw iRc;
} else {
ulBlkCnt = (xbUInt32) (ullFileSize / ulBlkSize);
}
if(( iRc = xbTruncate( 0 )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 210;
throw iRc;
}
if(( cBlock = (char *) malloc( ulBlkSize )) == NULL ){
- iErrorStop = 110;
+ iErrorStop = 220;
throw iRc;
}
@@ -900,17 +880,17 @@ xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
for( xbUInt32 ulBc = 0; ulBc < ulBlkCnt; ulBc++ ){
if(( iRc = pMemo->ReadBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
- iErrorStop = 120;
+ iErrorStop = 230;
throw iRc;
}
if(( iRc = WriteBlock( ulBc, ulBlkSize, cBlock )) != XB_NO_ERROR ){
- iErrorStop = 130;
+ iErrorStop = 240;
throw iRc;
}
}
if(( xbFseek( 8, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 140;
+ iErrorStop = 250;
iRc = XB_SEEK_ERROR;
throw iRc;
}
@@ -920,44 +900,31 @@ xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
//close and delete target
if(( iRc = pMemo->xbFclose()) != XB_NO_ERROR ){
- iErrorStop = 150;
+ iErrorStop = 260;
throw iRc;
}
if(( iRc = pMemo->xbRemove()) != XB_NO_ERROR ){
- iErrorStop = 160;
+ iErrorStop = 270;
throw iRc;
}
free( cBlock );
delete pMemo;
- #ifdef XB_LOCKING_SUPPORT
- if( iAutoLock && !dbf->GetTableLocked() ){
- if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 200;
- throw iRc;
- }
- if(( iRc = LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 210;
- throw iRc;
- }
- }
- #endif
}
catch (xbInt16 iRc ){
free( cBlock );
- #ifdef XB_LOCKING_SUPPORT
- if( bTableLocked )
- dbf->LockTable( XB_UNLOCK );
- if( bMemoLocked )
- LockMemo( XB_UNLOCK );
- #endif
-
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;
}
/***********************************************************************/
@@ -977,7 +944,7 @@ xbInt16 xbMemoDbt4::ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption ) {
try{
if(( rc = ReadBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
rc = XB_READ_ERROR;
}
if( iOption == 1 ){
@@ -990,7 +957,7 @@ xbInt16 xbMemoDbt4::ReadBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption ) {
ulFreeBlockCnt = eGetUInt32((char *) mbb+4 );
}
else{
- iErrorStop = 20;
+ iErrorStop = 110;
rc = XB_INVALID_OPTION;
throw rc;
}
@@ -1021,12 +988,12 @@ xbInt16 xbMemoDbt4::ReadDbtHeader( xbInt16 iOption ) {
try{
if( !FileIsOpen() ){
- iErrorStop = 10;
+ iErrorStop = 100;
rc = XB_NOT_OPEN;
throw rc;
}
if( xbFseek( 0, SEEK_SET )){
- iErrorStop = 20;
+ iErrorStop = 110;
rc = XB_SEEK_ERROR;
throw rc;
}
@@ -1036,7 +1003,7 @@ xbInt16 xbMemoDbt4::ReadDbtHeader( xbInt16 iOption ) {
iReadLen = 4;
if(( xbFread( &MemoBlock, (size_t) iReadLen, 1 )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
rc = XB_READ_ERROR;
throw rc;
}
@@ -1104,13 +1071,13 @@ xbInt16 xbMemoDbt4::UpdateHeaderName() {
try{
if(( rc = xbFseek( 8, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
for( int i = 1; i < 9; i++ ){
if(( rc = xbFputc( sDbfFileNameWoExt[i] )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw rc;
}
}
@@ -1140,7 +1107,7 @@ xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
try{
if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw rc;
}
@@ -1155,26 +1122,24 @@ xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
// 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 = 20;
+ iErrorStop = 110;
throw rc;
}
if(( llNewBlocks.RemoveByVal( ulBlockNo )) < XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw rc;
}
} else {
// first revision, save what it was in case of Abort() command
if(( llOldBlocks.InsertAtFront( ulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw rc;
}
}
-
if(( rc = dbf->PutField( iFieldNo, "" )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw rc;
}
-
}
} else {
// free up the old space
@@ -1184,13 +1149,13 @@ xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
if( llNewBlocks.SearchFor( ulBlockNo ) > 0 ){
if(( rc = FreeMemoBlockChain( ulBlockNo, ulLastDataBlock )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ 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 = 70;
+ iErrorStop = 160;
throw rc;
}
}
@@ -1207,7 +1172,7 @@ xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
xbUInt32 ulHeadBlock;
xbUInt32 ulPrevNode;
if(( rc = FindBlockSetInChain( ulBlocksNeeded, ulLastDataBlock, ulHeadBlock, ulPrevNode, bUsedBlockFound )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 170;
throw rc;
}
iField1 = -1;
@@ -1217,34 +1182,33 @@ xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
if( bUsedBlockFound ){
if(( rc = GetBlockSetFromChain( ulBlocksNeeded, ulHeadBlock, ulPrevNode )) != XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 180;
throw rc;
}
if(( rc = WriteBlockHeader( ulHeadBlock, 1 )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 190;
throw rc;
}
if(( rc = xbFwrite( sMemoData.Str(), sMemoData.Len(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 200;
throw rc;
}
-
} else { // append to the end
if(( rc = WriteBlockHeader( ulLastDataBlock, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
+ iErrorStop = 220;
throw rc;
}
if(( rc = xbFwrite( sMemoData.Str(), sMemoData.Len(), 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
+ iErrorStop = 230;
throw rc;
}
if(( rc = xbFputc( 0x00, (xbInt32)((ulBlocksNeeded * GetBlockSize()) - (sMemoData.Len() + 8)))) != XB_NO_ERROR ){
- iErrorStop = 140;
+ iErrorStop = 240;
throw rc;
}
@@ -1252,7 +1216,7 @@ xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
ulHdrNextBlock += ulBlocksNeeded;
ulHeadBlock = ulLastDataBlock;
if(( rc = UpdateHeadNextNode()) != XB_NO_ERROR ){
- iErrorStop = 150;
+ iErrorStop = 250;
throw rc;
}
@@ -1261,18 +1225,18 @@ xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
ulNextFreeBlock = ulLastDataBlock + ulBlocksNeeded;
ulHeadBlock = ulLastDataBlock;
if(( rc = WriteBlockHeader( ulPrevNode, 2 )) != XB_NO_ERROR ){
- iErrorStop = 160;
+ iErrorStop = 260;
throw rc;
}
}
}
if(( rc = llNewBlocks.InsertAtFront( ulHeadBlock )) != XB_NO_ERROR ){ // In case of Abort(), this block needs to be freed
- iErrorStop = 170;
+ iErrorStop = 270;
throw rc;
}
if(( rc = dbf->PutLongField( iFieldNo, (xbInt32) ulHeadBlock )) != XB_NO_ERROR ){
- iErrorStop = 180;
+ iErrorStop = 280;
throw rc;
}
}
@@ -1284,7 +1248,6 @@ xbInt16 xbMemoDbt4::UpdateMemoField( xbInt16 iFieldNo, const xbString & sMemoDat
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( rc ));
}
-
return rc;
}
/***********************************************************************/
@@ -1312,13 +1275,13 @@ xbInt16 xbMemoDbt4::WriteBlockHeader( xbUInt32 ulBlockNo, xbInt16 iOption ) {
ePutUInt32((char *) mbb+4, ulFreeBlockCnt );
}
else{
- iErrorStop = 10;
+ iErrorStop = 100;
rc = XB_INVALID_OPTION;
throw rc;
}
if(( rc = WriteBlock( ulBlockNo, 8, mbb )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
rc = XB_READ_ERROR;
}
}
@@ -1345,15 +1308,15 @@ xbInt16 xbMemoDbt4::Zap(){
ePutUInt32( cBuf, ulHdrNextBlock );
if(( iRc != xbFseek( 0, SEEK_SET )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
if(( iRc != xbFwrite( cBuf, 4, 1 ))!= XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
if(( iRc != xbTruncate( GetBlockSize())) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
}
diff --git a/src/core/xbssv.cpp b/src/core/xbssv.cpp
index c595f6b..252daab 100755
--- a/src/core/xbssv.cpp
+++ b/src/core/xbssv.cpp
@@ -121,7 +121,6 @@ xbInt16 xbSsv::iCreateMdxBlockSize = 1024; // 1024 is DBase 7 default siz
//! @brief Class Constructor.
xbSsv::xbSsv(){}
/*************************************************************************/
-#ifdef XB_DEBUG_SUPPORT
void xbSsv::BitDump( unsigned char c ) const {
for( int i = 7; i >= 0; i-- )
std::cout << (BitSet( c, i ) ? 1 : 0);
@@ -129,7 +128,6 @@ void xbSsv::BitDump( unsigned char c ) const {
void xbSsv::BitDump( char c ) const {
BitDump( (unsigned char) c );
}
-#endif
/*************************************************************************/
//! @brief Check a bit in a one byte field and see if it is set.
/*!
diff --git a/src/core/xbstring.cpp b/src/core/xbstring.cpp
index 872062f..81e67b8 100755
--- a/src/core/xbstring.cpp
+++ b/src/core/xbstring.cpp
@@ -1358,6 +1358,61 @@ xbString &xbString::Remove(xbUInt32 ulStartPos, xbUInt32 ulDelSize ) {
}
+
+
+
+/************************************************************************/
+//! @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 ulNewSize;
+ xbUInt32 ulSp2;
+ char *sBuf2;
+
+ while( !bDone ){
+ ulPos = Pos( sReplace );
+ if( ulPos == 0 ){
+ bDone = xbTrue;
+ } else {
+
+ ulNewSize = this->size + sizeof( sReplaceWith ) - sizeof( sReplace );
+ sBuf2 = (char *) calloc( 1, ulNewSize );
+
+ // copy part1
+ for( xbUInt32 ul = 0; ul < ulPos-1; ul++ )
+ sBuf2[ul] = data[ul];
+
+ // copy part2
+ strcat( sBuf2, sReplaceWith );
+
+ // copy part3
+ ulSp2 = ulPos + strlen( sReplace );
+ char *p = data;
+ p+= (ulSp2 - 1);
+ strcat( sBuf2, p );
+
+ if( iOption )
+ bDone = xbTrue;
+
+ free(data);
+ data = sBuf2;
+
+ }
+ }
+
+ return *this;
+}
+
/************************************************************************/
//! @brief Resize a string
/*!
diff --git a/src/core/xbtblmgr.cpp b/src/core/xbtblmgr.cpp
index e1bf496..f154dc6 100755
--- a/src/core/xbtblmgr.cpp
+++ b/src/core/xbtblmgr.cpp
@@ -61,7 +61,7 @@ xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sTblName, const xb
try{
if( sTblName.Len() == 0 ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_INVALID_TABLE_NAME;
throw iRc;
}
@@ -77,7 +77,7 @@ xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sTblName, const xb
}
if((i = (xbTblList *) calloc(1, sizeof(xbTblList))) == NULL){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_NO_MEMORY;
throw iRc;
}
@@ -96,7 +96,7 @@ xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sTblName, const xb
}
if( t && (strcmp( t->psTblAlias->Str(), sAlias.Str()) == 0 )){
- iErrorStop = 30;
+ iErrorStop = 120;
delete i->psTblName;
delete i->psTblAlias;
free( i );
@@ -110,7 +110,7 @@ xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sTblName, const xb
s->pNext = i;
}
catch (xbInt16 iRc ){
- if( iErrorStop != 30 ){
+ 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;
@@ -137,7 +137,6 @@ xbInt16 xbTblMgr::DisplayTableList() const {
}
return iTblCnt;
}
-
/*************************************************************************/
/* Get pointer to named dbf.
Looks up an open DBF file by Name.
@@ -152,8 +151,15 @@ 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( sTblAlias == t->psTblAlias->Str())
+ if( s == t->psTblAlias->Str())
return t->pDbf;
t = t->pNext;
}
@@ -166,7 +172,6 @@ xbDbf *xbTblMgr::GetDbfPtr(const xbString& sTblAlias) const {
}
return NULL;
}
-
/*************************************************************************/
/* Get pointer to named dbf.
Looks up an open DBF file by Name.
@@ -192,12 +197,21 @@ xbDbf *xbTblMgr::GetDbfPtr(xbInt16 iItemNo ) const {
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;
@@ -252,6 +266,5 @@ xbInt16 xbTblMgr::RemoveTblFromTblList( xbDbf *pTbl ) {
}
return XB_NOT_FOUND;
}
-
/*************************************************************************/
} /* namespace */
diff --git a/src/core/xbxbase.cpp b/src/core/xbxbase.cpp
index 7dd3ac7..7443b26 100755
--- a/src/core/xbxbase.cpp
+++ b/src/core/xbxbase.cpp
@@ -51,12 +51,12 @@ xbInt16 xbXBase::CloseAllTables(){
d = (xbDbf *) GetDbfPtr( 1 );
if( d ){
if(( iRc = d->Close()) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
} else {
iRc = XB_INVALID_OBJECT;
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -130,7 +130,6 @@ void xbXBase::SetLogSize( size_t lSize ) {
xLog->LogSetLogSize( lSize );
}
-
//! @brief Write message to logfile.
/*!
\param sLogMessage - Message to write.
@@ -189,7 +188,7 @@ void xbXBase::SetLogDirectory( const xbString & sLogDirectory ){
xbBool xbXBase::GetLogStatus() const {
return xbFalse;
}
-xbInt16 xbXBase::WriteLogMessage( const xbString & sLogMessage ){
+xbInt16 xbXBase::WriteLogMessage( const xbString & sLogMessage, xbInt16 ){
return XB_NO_ERROR;
}
xbInt16 xbXBase::WriteLogBytes( xbUInt32 lCnt, const char *p ){
@@ -202,7 +201,7 @@ void xbXBase::DisableMsgLogging() {
return;
}
xbInt16 xbXBase::FlushLog() {
- return;
+ return XB_NO_ERROR;
}
void xbXBase::SetLogSize( size_t lSize ) {
return;
@@ -569,23 +568,22 @@ xbDbf* xbXBase::Open( const xbString &sTableName, const xbString &sAlias, xbInt1
try{
if( sTableName.Len() == 0 ){
- iErrorStop = 10;
+ 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 = 20;
+ iErrorStop = 110;
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
unsigned char cFileTypeByte;
if(( iRc = f->GetXbaseFileTypeByte( f->GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc;
}
-
xbInt16 iTblVsn = f->DetermineXbaseTableVersion( cFileTypeByte );
f->xbFclose();
sFqFileName.Set( f->GetFqFileName() );
@@ -597,7 +595,7 @@ xbDbf* xbXBase::Open( const xbString &sTableName, const xbString &sAlias, xbInt1
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 = 40;
+ iErrorStop = 130;
iRc = XB_FILE_TYPE_NOT_SUPPORTED;
throw iRc;
#endif
@@ -609,72 +607,64 @@ xbDbf* xbXBase::Open( const xbString &sTableName, const xbString &sAlias, xbInt1
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 = 50;
+ iErrorStop = 140;
iRc = XB_FILE_TYPE_NOT_SUPPORTED;
throw iRc;
#endif
} else {
- iErrorStop = 60;
+ iErrorStop = 150;
iRc = XB_FILE_TYPE_NOT_SUPPORTED;
throw iRc;
}
if( iRc != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw iRc;
}
}
catch (xbInt16 iRc ){
-
- std::cout << "Openerror\n";
-
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;
-
- xbDbf * pwDbf;
-
+
try{
xbFile f(this);
if( sTableName.Len() == 0 ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
f.SetFileName( sTableName );
if(( iRc = f.FileExists( f.GetFqFileName() )) != xbTrue ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
unsigned char cFileTypeByte;
if(( iRc = f.GetXbaseFileTypeByte( f.GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
return iRc;
}
if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 4 ){
#ifdef XB_DBF4_SUPPORT
- pwDbf = new xbDbf4( this );
+ 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 = 40;
+ iErrorStop = 130;
iRc = XB_FILE_TYPE_NOT_SUPPORTED;
throw iRc;
#endif
@@ -684,27 +674,22 @@ xbInt16 xbXBase::OpenHighestVersion( const xbString &sTableName, const xbString
*dbf = new xbDbf3( this );
#else
//std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
- iErrorStop = 50;
+ iErrorStop = 140;
iRc = XB_FILE_TYPE_NOT_SUPPORTED;
throw iRc;
#endif
} else {
- iErrorStop = 60;
+ iErrorStop = 150;
iRc = XB_FILE_TYPE_NOT_SUPPORTED;
throw iRc;
}
-
}
catch (xbInt16 iRc ){
-
- std::cout << "OpenHighestVersion error\n";
-
xbString sMsg;
sMsg.Sprintf( "xbxbase::OpenHighestVersion() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
WriteLogMessage( sMsg.Str() );
WriteLogMessage( GetErrorMessage( iRc ));
-
}
return iRc;
}
diff --git a/src/examples/xb_ex_expression.cpp b/src/examples/xb_ex_expression.cpp
new file mode 100755
index 0000000..dc6d7e6
--- /dev/null
+++ b/src/examples/xb_ex_expression.cpp
@@ -0,0 +1,230 @@
+/* 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 ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbIx *pIx = NULL;
+ void *pTag = NULL;
+
+ xbXBase x;
+ xbDbf *MyFile = new xbDbf4( &x );
+
+ try{
+
+ if(( iRc = MyFile->CreateTable( "EXPEXAMPL.DBF", "TestMdxX2", MyV4Record, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ /*
+ CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
+ */
+
+ // the following index definition has two expressions
+ // 1) CFLD1+CFLD2 -- concat two char fields into an index key
+ // 2) .NOT. DELETED() -- don't include any deleted records in the index
+ if(( iRc = MyFile->CreateTag( "MDX", "TAG1", "CFLD1+CFLD2", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // add a record to the table
+ if(( iRc = MyFile->BlankRecord()) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->PutField( "CFLD1", "Some text" )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->PutField( "CFLD2", "Other text" )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->PutLongField( "NFLD1", 1000 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ xbDate dt;
+ dt.Set( "19890209" );
+ if(( iRc = MyFile->PutDateField( "DATE1", dt )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->AppendRecord()) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+
+ if(( iRc = MyFile->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+
+ // To use the XBase64 expression processing logic
+ // 1) Parse an expression with the xbExp::ParseExpression() method
+ // 2) Process the parsed expression with the xbExp::ProcessExpression() method
+ // 3) If needed, determine the expression return type with the xbExp::GetReturnType() method
+ // 4) Use the appriate methid to retrieve the expression value:
+ // xbExp::GetNumericResult()
+ // xbExp::GetDateResult()
+ // xbExp::GetLogicalResult()
+ // xbExp::GetStringResult()
+
+
+ // The expression only needs to be parsed once. The ProcessExpression() method can be used
+ // zero, one or many times after it is initially parsed.
+
+ // see docs/html/xbc5.html for expression documentation
+ // see example below
+
+
+ // Numeric expression example
+ xbString sExpression = "NFLD1 * (2 + RECNO())";
+ xbExp exp( &x );
+ // Parse the expression
+ if(( iRc = exp.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ // Process the parsed expression
+ if(( iRc = exp.ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ return -1;
+ }
+ PrintResult( &sExpression, &exp );
+
+
+ // String expression example
+ sExpression = "CFLD1+CFLD2+'{'+DTOS(DATE1)+'}'";
+ xbExp exp2( &x );
+ if(( iRc = exp2.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ // Process the parsed expression
+ if(( iRc = exp2.ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ return -1;
+ }
+ PrintResult( &sExpression, &exp2 );
+
+ // Date example
+ sExpression = "DATE() + 6";
+ xbExp exp3( &x );
+ if(( iRc = exp3.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+ // Process the parsed expression
+ if(( iRc = exp3.ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ return -1;
+ }
+ PrintResult( &sExpression, &exp3 );
+
+ // Logic example
+ sExpression = "NFLD1 = 5";
+ xbExp exp4( &x );
+ if(( iRc = exp4.ParseExpression( MyFile, sExpression )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc;
+ }
+ // Process the parsed expression
+ if(( iRc = exp4.ProcessExpression()) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ return -1;
+ }
+ PrintResult( &sExpression, &exp4 );
+
+
+
+ // Cleanup
+ MyFile->DeleteTable();
+ delete MyFile;
+
+
+ } catch (xbInt16 iRc ){
+
+ std::cout << "Error in program xb_ex_expression at location " << iErrorStop << std::endl;
+ std::cout << x.GetErrorMessage( iRc ) << std::endl;
+
+ }
+
+
+
+
+ return iRc;
+}
diff --git a/src/examples/xb_ex_string.cpp b/src/examples/xb_ex_string.cpp
index 3d582a1..30fd74e 100755
--- a/src/examples/xb_ex_string.cpp
+++ b/src/examples/xb_ex_string.cpp
@@ -65,15 +65,18 @@ int main()
// 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();
- s3.Dump( "RTrim test" );
+ std::cout << "RTrim test - " << s3.Str() << std::endl;
s3.Trim();
- s3.Dump( "Trim test" );
+ std::cout << "Trim test - " << s3.Str() << std::endl;
printf( "s3 Len = [%d]\n", s3.Len() );
// Concatenation tests - I
@@ -88,29 +91,24 @@ int main()
s1 -= "Concatenation test1 part 2 ";
s1 -= 'X';
s1 -= s2;
- s1.Dump( "Concatenation test 2 " );
-
+ std::cout << "Concatenation test 2 - " << s1.Str() << std::endl;
// Concatenation tests - III
s1 = "s1data ";
s2 = "s2data ";
s3 = s1 - s2;
- s3.Dump( "Concatenation test 3a" );
+ std::cout << "Concatenation test 3a - " << s3.Str() << std::endl;
s3 = s1 + s2;
- s3.Dump( "Concatenation test 3b" );
+ std::cout << "Concatenation test 3b - " << s3.Str() << std::endl;
s3 = s1 + " char * data ";
- s3.Dump( "Concatenation test 3c" );
-
- // s3 = " char * data " + s2;
- // s3.Dump( "Concatenation test 3d" );
+ std::cout << "Concatenation test 3c - " << s3.Str() << std::endl;
s3 = s1 + 'Z';
- s3.Dump( "Concatenation test 3e" );
+ std::cout << "Concatenation test 3d - " << s3.Str() << std::endl;
-// s3 = 'A' + s1;
s3 = 'A';
std::cout << s3.Str() << std::endl;
@@ -118,14 +116,8 @@ int main()
std::cout << s3.Str() << std::endl;
-
- s3 = 'A' + s1;
-
-
- return 0;
-
- // s3.Dump( "Concatenation test 3f" );
-
+ s3 = 'A' + s1;
+
std::cout << std::endl << "== operator tests" << std::endl;
if( s1 == s2 )
std::cout << s1.Str() << " == " << s2.Str() << std::endl;
@@ -145,8 +137,9 @@ int main()
std::cout << std::endl << "!= operator tests" << std::endl;
s2 = "abc123";
- s1.Dump( "s1" );
- s2.Dump( "s2" );
+ 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
@@ -284,7 +277,7 @@ int main()
std::cout << "s2 = " << s2.Str() << std::endl;
s1 = s2.Copy();
- s1.Dump( "s1.Copy() results" );
+ std::cout << "s1.Copy() results" << s1.Str() << std::endl;
s1 = "0x35";
char hexChar;
@@ -299,7 +292,7 @@ int main()
std::cout << "CvtHexString [" << s1.Str() << "] converts to [" << s2.Str() << "]" << std::endl;
s1.ExtractElement( "aaaa|bbbb|cccc|dddd", '|', 2, 0 );
- s1.Dump( "ExtractElement() " );
+ std::cout << "ExtractElement() " << s1.Str() << std::endl;
s1 = "123";
s2 = "ABC";
@@ -317,50 +310,52 @@ int main()
std::cout << s1.Str() << " s1.Pos('G') = " << s1.Pos( 'G' ) << std::endl;
std::cout << s1.Str() << " s1.Pos(\"JKL\") = " << s1.Pos( "JKL" ) << std::endl;
- s1.Dump( "Remove( 3, 5 ) before " );
+ 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;
- s1.Dump( "Remove( 3, 5 ) after " );
+ 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;
- s1.Dump( "Remove( 20, 10 ) " );
+
+ std::cout << "Remove( 20, 10 ) - " << s1.Str() << std::endl;
+
s1.Sprintf( "%d", 12345 );
- s1.Dump( "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" );
- s1.Dump( "Set" );
+ std::cout << "Set - " << s1.Str() << std::endl;
s1 = "ABCABCABZ";
- s1.Dump( "SwapChars( 'A', '9' ) before" );
+ std::cout << "SwapChars( 'A', '9' ) before - " << s1.Str() << std::endl;
s1.SwapChars( 'A', '9' );
- s1.Dump( "SwapChars( 'A', '9' ) after");
+ std::cout << "SwapChars( 'A', '9' ) after - " << s1.Str() << std::endl;
s1.ToLowerCase();
- s1.Dump( "ToLowerCase" );
+ std::cout << "ToLowerCase - " << s1.Str() << std::endl;
s1.ToUpperCase();
- s1.Dump( "ToUpperCase" );
+ std::cout << "ToUpperCase - " << s1.Str() << std::endl;
s1.ZapChar( '9' );
- s1.Dump( "ZapChar( '9' )" );
+ std::cout << "ZapChar( '9' )" << s1.Str() << std::endl;
s1.ZapLeadingChar( 'B' );
- s1.Dump( "ZapLeadingChar( 'B' )" );
+ std::cout << "ZapLeadingChar( 'B' )" << s1.Str() << std::endl;
s1.ZapTrailingChar( 'Z' );
- s1.Dump( "ZapLeadingChar( 'Z' )" );
+ std::cout << "ZapLeadingChar( 'Z' ) - " << s1.Str() << std::endl;
s1 = "123";
s1.PadLeft( '0', 9 );
- s1.Dump( "s1.PadLeft('0', 9 ) ");
+ std::cout << "s1.PadLeft('0', 9 ) - " << s1.Str() << std::endl;
s1 = "abc";
s1.PadRight( 'Z', 9 );
- s1.Dump( "s1.PadRight('Z', 9 ) ");
+ std::cout << "s1.PadRight('Z', 9 ) " << s1.Str() << std::endl;
xbString sNullString;
if( sNullString.IsNull())
diff --git a/src/examples/xb_ex_v4_create_dbf.cpp b/src/examples/xb_ex_v4_create_dbf.cpp
index a2aff74..6169213 100755
--- a/src/examples/xb_ex_v4_create_dbf.cpp
+++ b/src/examples/xb_ex_v4_create_dbf.cpp
@@ -13,6 +13,11 @@ Email Contact:
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>
@@ -24,18 +29,27 @@ int main()
#ifdef XB_DBF4_SUPPORT
- xbSchema MyRecord[] =
+ xbSchema MyAddressBookRecord[] =
{
- { "FIRSTNAME", XB_CHAR_FLD, 15, 0 },
{ "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 },
- { "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 },
+
+ { "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
- { "MEMO1", XB_MEMO_FLD, 10, 0 },
+ { "NOTES", XB_MEMO_FLD, 10, 0 },
#endif
{ "",0,0,0 }
};
@@ -46,11 +60,15 @@ int main()
xbInt16 iRc;
xbDbf * MyDbfFile;
+
+ #ifdef XB_MDX_SUPPORT
xbIx *pIx;
void *pTag;
+ #endif // XB_MDX_SUPPORT
+
MyDbfFile = new xbDbf4( &x );
- if(( iRc = MyDbfFile->CreateTable( "MyV4Table1", "MyV4TableAlias", MyRecord, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR )
+ if(( iRc = MyDbfFile->CreateTable( "Address.DBF", "Address", MyAddressBookRecord, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR )
x.DisplayError( iRc );
else
{
@@ -64,11 +82,11 @@ int main()
*/
// std::cout << "Creating three index tags\n";
- if(( iRc = MyDbfFile->CreateTag( "MDX", "NAME_TAG", "LASTNAME+FIRSTNAME", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
+ 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_TAG", "BIRTHDATE", "", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
+ 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", "ZIP_TAG", "ZIPCODE", "", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
+ 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
diff --git a/src/examples/xb_ex_v4_upd_dbf.cpp b/src/examples/xb_ex_v4_upd_dbf.cpp
index 6f68c73..96b6bdf 100755
--- a/src/examples/xb_ex_v4_upd_dbf.cpp
+++ b/src/examples/xb_ex_v4_upd_dbf.cpp
@@ -11,7 +11,7 @@ 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_v4_create_dbf
+ This example demonstrates how to open the DBase IV table created by xb_ex_v4_create_dbf
and apply various updates to the table.
*/
@@ -20,27 +20,11 @@ Email Contact:
using namespace xb;
-#undef XB_MEMO_FIELDS
-
int main()
{
#ifdef XB_DBF4_SUPPORT
- xbInt16 fld_FIRSTNAME;
- xbInt16 fld_LASTNAME;
- xbInt16 fld_BIRTHDATE;
- xbInt16 fld_AMOUNT;
- xbInt16 fld_RETIRED;
- xbInt16 fld_ZIPCODE;
- xbInt16 fld_NUMFLD1;
- xbInt16 fld_NUMFLD2;
-
-
- #ifdef XB_MEMO_FIELDS
- xbInt16 fld_MEMO1;
- #endif
-
/* define the classes */
xbXBase x; /* initialize xbase */
@@ -48,37 +32,30 @@ int main()
x.EnableMsgLogging();
x.WriteLogMessage( "Program [xb_ex_v4_upd_dbf] initializing..." );
-
- xbDbf *MyTable = new xbDbf4( &x ); /* class for table */
-
-#ifdef XB_INDEX_NDX
- xbNdx MyIndex1( &MyTable ); /* class for index 1 */
-#endif
+ xbDbf *MyTable = new xbDbf4( &x ); /* class for DBase V4 table */
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
try{
- if(( iRc = MyTable->Open( "MyV4Table1.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 1;
+ if(( iRc = MyTable->Open( "Address.DBF" )) != XB_NO_ERROR ){
+ iErrorStop = 100;
throw iRc;
}
/* 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" );
- fld_NUMFLD1 = MyTable->GetFieldNo( "NUMFLD1" );
- fld_NUMFLD2 = MyTable->GetFieldNo( "NUMFLD2" );
+ 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
- fld_MEMO1 = MyTable->GetFieldNo( "MEMO1" );
+ zbInt16 iFld_MEMO1 = MyTable->GetFieldNo( "MEMO1" );
#endif
@@ -88,187 +65,213 @@ int main()
// Blank the record buffer
if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 7;
+ iErrorStop = 110;
throw iRc;
}
// put field examples - using field numbers
- if(( iRc = MyTable->PutField( fld_LASTNAME, "JONES" )) != XB_NO_ERROR ){
- iErrorStop = 8;
+ 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( fld_FIRSTNAME, "JERRY" )) != XB_NO_ERROR ){
- iErrorStop = 9;
+ if(( iRc = MyTable->PutField( iFld_FIRSTNAME, "JERRY" )) != XB_NO_ERROR ){
+ iErrorStop = 130;
throw iRc;
}
- if(( iRc = MyTable->PutField( fld_AMOUNT, "12.35" )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ if(( iRc = MyTable->PutField( iFld_AMOUNT1, "12.35" )) != XB_NO_ERROR ){
+ iErrorStop = 140;
throw iRc;
}
- if(( iRc = MyTable->PutLogicalField( fld_RETIRED, "Y" )) != XB_NO_ERROR ){
- iErrorStop = 11;
+ if(( iRc = MyTable->PutLogicalField( iFld_FRIEND, "Y" )) != XB_NO_ERROR ){
+ iErrorStop = 150;
throw iRc;
}
- if(( iRc = MyTable->PutField( fld_BIRTHDATE, "19880209" )) != XB_NO_ERROR ){
- iErrorStop = 12;
+ if(( iRc = MyTable->PutField( iFld_BIRTHDATE, "19880209" )) != XB_NO_ERROR ){
+ iErrorStop = 160;
throw iRc;
}
- if(( iRc = MyTable->PutLongField( fld_ZIPCODE, 12345 )) != XB_NO_ERROR ){
- iErrorStop = 13;
+ 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 = 15;
+ 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 = 16;
+ 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 = 20;
+ iErrorStop = 210;
throw iRc;
}
if(( iRc = MyTable->PutField( "FIRSTNAME", "ALBERT" )) != XB_NO_ERROR ){
- iErrorStop = 21;
+ iErrorStop = 220;
throw iRc;
}
- if(( iRc = MyTable->PutField( "AMOUNT", "987.55" )) != XB_NO_ERROR ){
- iErrorStop = 22;
+ if(( iRc = MyTable->PutDoubleField( "AMOUNT1", (xbDouble) 987.55 )) != XB_NO_ERROR ){
+ iErrorStop = 230;
throw iRc;
}
- if(( iRc = MyTable->PutLogicalField( "RETIRED?", "N" )) != XB_NO_ERROR ){
- iErrorStop = 23;
+ if(( iRc = MyTable->PutLogicalField( "FRIEND?", "N" )) != XB_NO_ERROR ){
+ iErrorStop = 240;
throw iRc;
}
- if(( iRc = MyTable->PutLongField( "ZIPCODE", 44256 )) != XB_NO_ERROR ){
- iErrorStop = 24;
+ 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( fld_NUMFLD1, f )) != XB_NO_ERROR ){
- iErrorStop = 13;
+ if(( iRc = MyTable->PutFloatField( iFld_AMOUNT2, f )) != XB_NO_ERROR ){
+ iErrorStop = 260;
throw iRc;
}
xbDouble d = 76543.21;
- if(( iRc = MyTable->PutDoubleField( fld_NUMFLD2, d )) != XB_NO_ERROR ){
- iErrorStop = 14;
+ 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 = 25;
+ 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( fld_FIRSTNAME, FirstName )) < 0 ){
- iErrorStop = 30;
+ 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 = 31;
+ iErrorStop = 310;
throw iRc;
}
std::cout << "Last Name is [" << LastName.Str() << "]" << std::endl;
xbInt16 iNoOfDecimals;
- if(( iRc = MyTable->GetFieldDecimal( "AMOUNT", iNoOfDecimals )) != XB_NO_ERROR ){
- iErrorStop = 32;
+ 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 = 36;
+ iErrorStop = 330;
throw iRc;
}
std::cout << "Field #4 name is " << FieldName.Str() << std::endl;
- xbString sRetired;
- if(( iRc = MyTable->GetLogicalField( "RETIRED?", sRetired )) < 0 ){
- iErrorStop = 38;
+ xbString sFriend;
+ if(( iRc = MyTable->GetLogicalField( "FRIEND?", sFriend )) < 0 ){
+ iErrorStop = 340;
throw iRc;
}
- std::cout << "Switch value = [" << sRetired.Str() << "]" << std::endl;
+ std::cout << "Switch value = [" << sFriend.Str() << "]" << std::endl;
xbInt32 lZip;
if(( iRc = MyTable->GetLongField( "ZIPCODE", lZip )) < 0 ){
- iErrorStop = 39;
+ iErrorStop = 350;
throw iRc;
}
std::cout << "Long value = [" << lZip << "]" << std::endl;
- if(( iRc = MyTable->GetFloatField( fld_NUMFLD1, f )) < 0 ){
- iErrorStop = 41;
+ if(( iRc = MyTable->GetFloatField( iFld_AMOUNT2, f )) < 0 ){
+ iErrorStop = 360;
throw iRc;
}
printf( "Field NUMFLD1 %8.2f\n", f );
- if(( iRc = MyTable->GetDoubleField( fld_NUMFLD2, d )) < 0 ){
- iErrorStop = 42;
+ 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 = 44;
+ iErrorStop = 380;
throw iRc;
}
// Append another record (it will be blank)
if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 45;
+ iErrorStop = 390;
throw iRc;
};
// mark current record for deletion
if(( iRc = MyTable->DeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 400;
throw iRc;
};
// save current record
if(( iRc = MyTable->PutRecord()) != XB_NO_ERROR ){
- iErrorStop = 51;
+ iErrorStop = 410;
throw iRc;
}
if(( iRc = MyTable->Commit()) != XB_NO_ERROR ){
- iErrorStop = 52;
+ iErrorStop = 420;
throw iRc;
}
+
+ // example code to loop through the table
+ for( xbUInt32 ulTuple = 1; ulTuple <= MyTable->GetRecordCount(); ulTuple++ ){
+ if(( iRc = MyTable->GetRecord( ulTuple ) != XB_NO_ERROR )){
+ iErrorStop = 430;
+ throw iRc;
+ }
+ // do something with the record here
+ std::cout << "Tuple = " << MyTable->GetCurRecNo() << std::endl;
+ }
+
/* Close database and associated indexes */
if(( iRc = MyTable->Close()) != XB_NO_ERROR ){
- iErrorStop = 53;
+ iErrorStop = 440;
throw iRc;
}
diff --git a/src/include/xbase.h b/src/include/xbase.h
index 33d2dc9..480d716 100755
--- a/src/include/xbase.h
+++ b/src/include/xbase.h
@@ -58,8 +58,10 @@ Email Contact:
#endif
#ifdef HAVE_VARARGS_H
+#ifndef HAVE_STDARG_H
#include <varargs.h>
#endif
+#endif
#ifdef HAVE_WINDOWS_H
#include <windows.h>
diff --git a/src/include/xbbcd.h b/src/include/xbbcd.h
index f94ed01..8c931d3 100755
--- a/src/include/xbbcd.h
+++ b/src/include/xbbcd.h
@@ -65,8 +65,6 @@ class XBDLLEXPORT xbBcd {
// const unsigned char * GetBcd() const;
void StringToBcd( const xbString &sStringIn );
-// void StringToBcdOld( const xbString &sStringIn );
-
xbInt16 Compare( const xbBcd &bcdIn );
xbInt16 Compare( xbDouble d );
diff --git a/src/include/xbconfig.h.in b/src/include/xbconfig.h.in
index b749ff2..969b761 100755
--- a/src/include/xbconfig.h.in
+++ b/src/include/xbconfig.h.in
@@ -98,7 +98,7 @@
#cmakedefine XB_NDX_SUPPORT
#cmakedefine XB_MDX_SUPPORT
#cmakedefine XB_SQL_SUPPORT
-#cmakedefine XB_NDXINF_SUPPORT
+#cmakedefine XB_INF_SUPPORT
#cmakedefine XB_FILTER_SUPPORT
#cmakedefine XB_UTILS_SUPPORT
diff --git a/src/include/xbdbf.h b/src/include/xbdbf.h
index 710dd14..c0842cb 100755
--- a/src/include/xbdbf.h
+++ b/src/include/xbdbf.h
@@ -179,17 +179,20 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbInt16 GetNextRecord ();
virtual xbInt16 GetNextRecord ( xbInt16 iOption );
virtual xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );
- virtual xbInt32 GetPhysicalIxCnt () const;
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 );
@@ -203,6 +206,7 @@ class XBDLLEXPORT xbDbf : public xbFile {
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 );
@@ -316,6 +320,7 @@ class XBDLLEXPORT xbDbf : public xbFile {
#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 );
@@ -326,30 +331,29 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbInt16 Find( xbDouble &dKey );
virtual xbIx *GetCurIx() const;
virtual void *GetCurTag() const;
-
+
virtual xbInt16 GetFirstKey();
virtual xbInt16 GetNextKey();
virtual xbInt16 GetPrevKey();
virtual xbInt16 GetLastKey();
-
+
virtual const xbString &GetCurIxType() const;
virtual const xbString &GetCurTagName() const;
virtual xbIxList *GetIxList() const;
+ virtual xbInt32 GetPhysicalIxCnt () const;
xbLinkListNode<xbTag *> *GetTagList () const;
+
virtual xbInt16 OpenIndex( const xbString &sIxType, const xbString &sIndexName );
+ virtual xbInt16 Reindex( xbInt16 iTagOpt );
virtual xbInt16 SetCurTag( const xbString &sTagName );
virtual void SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag );
- #ifdef XB_DEBUG_SUPPORT
- virtual xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );
- virtual xbInt16 Reindex( xbInt16 iTagOpt );
- #endif // XB_DEBUG_SUPPORT
#endif // XB_INDEX_SUPPORT
- #ifdef XB_NDXINF_SUPPORT
+ #ifdef XB_INF_SUPPORT
virtual xbInt16 AssociateIndex( const xbString &sType, const xbString &sName, xbInt16 iOption );
- xbLinkListNode<xbString> *GetNdxInfList() const;
- #endif // XB_NDXINF_SUPPORT
+ xbLinkListNode<xbString> *GetInfList() const;
+ #endif // XB_INF_SUPPORT
//#ifdef XB_MDX_SUPPORT
//virtual xbInt16 GetCreateMdxBlockSize() const;
@@ -365,12 +369,14 @@ class XBDLLEXPORT xbDbf : public xbFile {
xbInt16 AddIndex( xbIx *ix, const xbString &sFmt );
void ClearTagList();
- virtual xbInt16 GetNdxInfFileName( xbString &sNdxIdxFileName );
xbInt16 RemoveIndex( xbIx * ix );
void UpdateSchemaIxFlag( xbInt16 iFldNo, unsigned char cVal );
virtual xbInt16 UpdateTagList ();
- #endif
+ #endif // XB_INDEX_SUPPORT
+ #ifdef XB_INF_SUPPORT
+ virtual xbInt16 GetInfFileName( xbString &sNdxIdxFileName );
+ #endif // XB_INF_SUPPORT
#ifdef XB_LOCKING_SUPPORT
@@ -384,11 +390,11 @@ class XBDLLEXPORT xbDbf : public xbFile {
xbUInt32 ulCreateMemoBlockSize; // blocksize to use when creating dbt file
#endif
- #ifdef XB_NDXINF_SUPPORT
- virtual xbInt16 DeleteNdxInfData();
- virtual xbInt16 LoadNdxInfData();
- virtual xbInt16 SaveNdxInfData();
- #endif // XB_NDXINF_SUPPORT
+ #ifdef XB_INF_SUPPORT
+ virtual xbInt16 DeleteInfData();
+ virtual xbInt16 LoadInfData();
+ virtual xbInt16 SaveInfData();
+ #endif // XB_INF_SUPPORT
/*
#ifdef XB_MDX_SUPPORT
@@ -454,9 +460,6 @@ class XBDLLEXPORT xbDbf : public xbFile {
#ifdef XB_INDEX_SUPPORT
xbIxList *ixList; // pointer to a list of indices associated with the table
-// #ifdef XB_MDX_SUPPORT
-// xbIx *ixMdx; // pointer to production multi-tag index file
-// #endif
xbIx *pCurIx; // Pointer to current index class
void *vpCurIxTag; // Pointer to current tag
xbString sCurIxType; // Current index type
@@ -464,9 +467,9 @@ class XBDLLEXPORT xbDbf : public xbFile {
#endif // XB_INDEX_SUPPORT
-#ifdef XB_NDXINF_SUPPORT
- xbLinkList<xbString> llNdxInfData; // linked list of strings containing ndx file entries
-#endif // XB_NDXINF_SUPPORT
+#ifdef XB_INF_SUPPORT
+ xbLinkList<xbString> llInfData; // linked list of strings containing ndx file entries
+#endif // XB_INF_SUPPORT
};
@@ -487,6 +490,7 @@ class XBDLLEXPORT xbDbf3 : public xbDbf {
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 );
@@ -518,6 +522,7 @@ class XBDLLEXPORT xbDbf4 : public xbDbf {
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 );
diff --git a/src/include/xbfile.h b/src/include/xbfile.h
index a636632..ffbda06 100755
--- a/src/include/xbfile.h
+++ b/src/include/xbfile.h
@@ -151,7 +151,6 @@ class XBDLLEXPORT xbFile : public xbSsv {
xbInt16 xbRemove ();
xbInt16 xbRename ( const xbString &sOldName, const xbString &sNewName );
- xbInt16 xbRename ( const xbString &sOldName, const xbString &sNewName, xbInt16 iOption );
void xbRewind ();
xbInt16 xbTruncate ( xbInt64 llSize );
diff --git a/src/include/xbmemo.h b/src/include/xbmemo.h
index e86a65c..ad9aac2 100755
--- a/src/include/xbmemo.h
+++ b/src/include/xbmemo.h
@@ -59,30 +59,32 @@ class XBDLLEXPORT xbMemo : public xbFile {
/* virtual methods */
virtual ~xbMemo();
- virtual xbInt16 Abort () = 0;
- virtual xbInt16 CloseMemoFile ();
- virtual xbInt16 Commit () = 0;
+ virtual xbInt16 Abort () = 0;
+ virtual xbInt16 CloseMemoFile ();
+ virtual xbInt16 Commit () = 0;
+ virtual xbInt16 CreateMemoFile () = 0;
+
+ virtual xbInt16 DumpMemoHeader () = 0;
- #ifdef XB_LOCKING_SUPPORT
- virtual xbInt16 LockMemo ( xbInt16 iLockFunction );
- virtual xbBool GetMemoLocked () const;
- #endif
- /* pure virtual methods */
- virtual xbInt16 CreateMemoFile () = 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;
+ 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;
- virtual xbInt16 DumpMemoHeader () = 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
@@ -135,6 +137,7 @@ class XBDLLEXPORT xbMemoDbt3 : public xbMemo {
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 ();
@@ -143,7 +146,6 @@ class XBDLLEXPORT xbMemoDbt3 : public xbMemo {
#ifdef XB_DEBUG_SUPPORT
virtual xbInt16 DumpMemoFreeChain();
- virtual xbInt16 DumpMemoHeader ();
#endif
protected:
@@ -176,7 +178,7 @@ class XBDLLEXPORT xbMemoDbt4 : public xbMemo {
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 );
@@ -186,7 +188,6 @@ class XBDLLEXPORT xbMemoDbt4 : public xbMemo {
#ifdef XB_DEBUG_SUPPORT
virtual xbInt16 DumpMemoFreeChain ();
- virtual xbInt16 DumpMemoHeader ();
virtual xbInt16 DumpMemoInternals ();
virtual xbInt16 ReadFreeBlockHeader( xbUInt32 ulBlockNo, xbUInt32 &ulNextBlock, xbUInt32 &ulFreeBlockCnt );
#endif
diff --git a/src/include/xbsql.h b/src/include/xbsql.h
index 3869995..653096c 100755
--- a/src/include/xbsql.h
+++ b/src/include/xbsql.h
@@ -29,6 +29,19 @@ This class manages a list of open tables, open indices are connected to the open
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 XBDLLEXPORT xbSql : public xbSsv {
public:
// xbSql();
@@ -42,18 +55,21 @@ class XBDLLEXPORT xbSql : public xbSsv {
private:
+ xbInt16 SqlAlterTable( const xbString &sCmdLine );
xbInt16 SqlCreateTable( const xbString &sCmdLine );
- xbInt16 SqlCreateIndex( const xbString &sCmdLine );
-
- xbInt16 SqlDropIndex( 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 );
-
+ xbInt16 SqlSelect( const xbString &sCmdLine );
+
void SqlHelp() const;
xbInt16 SqlInsert( const xbString &sCmLine );
xbInt16 SqlSet( const xbString &sCmdLine );
diff --git a/src/include/xbssv.h b/src/include/xbssv.h
index 80da2d0..b9345fd 100755
--- a/src/include/xbssv.h
+++ b/src/include/xbssv.h
@@ -70,12 +70,9 @@ class XBDLLEXPORT xbSsv{
void SetDataDirectory ( const xbString &sDataDirectory );
void SetDefaultDateFormat ( const xbString &sDefaultDateFormat );
-
xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
- #ifdef XB_DEBUG_SUPPORT
void BitDump ( unsigned char c ) const;
void BitDump ( char c ) const;
- #endif
xbBool GetDefaultAutoCommit () const;
void SetDefaultAutoCommit ( xbBool bDefaultAutoCommit );
diff --git a/src/include/xbstring.h b/src/include/xbstring.h
index c2f15cd..f5a22da 100755
--- a/src/include/xbstring.h
+++ b/src/include/xbstring.h
@@ -95,8 +95,8 @@ class XBDLLEXPORT xbString {
xbString &Append(char c);
xbString &Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen );
xbString &Assign(const char *srcStr, xbUInt32 lStartPos );
- xbString &Assign(const xbString &s, xbUInt32 pos, xbUInt32 n );
- xbString &Assign(const xbString &s, xbUInt32 n );
+ xbString &Assign(const xbString &s, xbUInt32 pos, xbUInt32 lCopyLen );
+ xbString &Assign(const xbString &s, xbUInt32 lCopyLen );
xbString Copy() const;
xbUInt32 CountChar( char c ) const;
@@ -136,6 +136,7 @@ class XBDLLEXPORT xbString {
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();
diff --git a/src/include/xbtblmgr.h b/src/include/xbtblmgr.h
index d551002..150026b 100755
--- a/src/include/xbtblmgr.h
+++ b/src/include/xbtblmgr.h
@@ -39,14 +39,15 @@ class XBDLLEXPORT xbTblMgr : public xbSsv {
public:
xbTblMgr();
~xbTblMgr();
- xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sTblName );
- xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sTblName, const xbString &sTblAlias );
- xbInt16 DisplayTableList () const;
- xbDbf * GetDbfPtr ( const xbString &sTblAlias ) const;
- xbDbf * GetDbfPtr ( xbInt16 sItemNo ) const;
- xbInt16 GetOpenTableCount () const;
- xbInt16 RemoveTblFromTblList ( const xbString &sTblAlias );
- xbInt16 RemoveTblFromTblList ( xbDbf *d );
+ xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sTblName );
+ xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sTblName, 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:
diff --git a/src/sql/xbalttbl.cpp b/src/sql/xbalttbl.cpp
new file mode 100755
index 0000000..576eab7
--- /dev/null
+++ b/src/sql/xbalttbl.cpp
@@ -0,0 +1,125 @@
+/* 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 )
+ std::cout << "dbf valued\n";
+ else
+ std::cout << "dbf not valued\n";
+
+ 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/src/sql/xbcrix.cpp b/src/sql/xbcrix.cpp
index b24782e..8dc6f62 100755
--- a/src/sql/xbcrix.cpp
+++ b/src/sql/xbcrix.cpp
@@ -21,6 +21,7 @@ namespace xb{
/***********************************************************************/
+#ifdef XB_INDEX_SUPPORT
xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
// std::cout << "CREATE INDEX " << sCmdLine << std::endl;
@@ -68,8 +69,6 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
try{
- // std::cout << "xbSql::CreateIx()\n" ;
-
// drop off the first node
ulPos = sCmd.Pos( ' ' );
sCmd.Ltrunc( ulPos );
@@ -104,7 +103,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
if( sIxType == "" ){
if(( iRc = uda.GetTokenForKey( "IXTYPE", sIxType )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 100;
throw iRc;
}
}
@@ -114,7 +113,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
xbFile f( xbase );
f.SetFileName( sIxName );
if( f.FileExists()){
- iErrorStop = 30;
+ iErrorStop = 110;
iRc = XB_FILE_EXISTS;
throw iRc;
}
@@ -143,7 +142,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
if( !dbf ){
if(( iRc = xbase->OpenHighestVersion( sTableName, "", &dbf )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 120;
throw iRc;
}
}
@@ -154,13 +153,14 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
}
sCmd.Ltrunc( ulPos );
- // std::cout << "cp1 ulPos = " << ulPos << " scmd = " << sCmd << "\n";
+ std::cout << "cp1 ulPos = " << ulPos << " sCmd = [" << sCmd << "]\n";
//ulPos = sCmd.GetLastPos( ')' );
xbString sKeyExpression;
xbBool bDone = xbFalse;
xbUInt32 lPos = 1;
xbInt16 iParenCtr = 0;
+
while( !bDone && lPos < sCmd.Len()){
if( sCmd[lPos] == '(' ){
iParenCtr++;
@@ -172,19 +172,21 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
} else {
bDone = xbTrue;
}
- } else if( sCmd[lPos] == ',' ){
+ } else if( sCmd[lPos] == ',' && iParenCtr == 0 ){
sKeyExpression.Append( '+' );
} else if( sCmd[lPos] != ' ' ){
sKeyExpression.Append( sCmd[lPos] );
}
lPos++;
}
-// std::cout << "Key Expression =[" << sKeyExpression << "]\n";
+
+ std::cout << "Key Expression =[" << sKeyExpression << "]\n";
+
sCmd.Ltrunc( lPos );
sCmd.Trim();
xbBool bDesc = xbFalse;
-// std::cout << "sCmd - looking for DESC [" << sCmd << "]\n";
+ // std::cout << "sCmd - looking for DESC [" << sCmd << "]\n";
if( sCmd.Len() > 4 ){
sNode = sCmd;
sNode.ToUpperCase();
@@ -193,11 +195,12 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
bDesc = xbTrue;
sCmd.Ltrunc( 4 );
sCmd.Trim();
- // std::cout << "Descending\n";
+ std::cout << "Descending\n";
}
}
-// std::cout << "sCmd - looking for FILTER stuff [" << sCmd << "]\n";
+
+ // std::cout << "sCmd - looking for FILTER stuff [" << sCmd << "]\n";
xbString sFilter;
if( sCmd.Len() > 6 ){
sNode = sCmd;
@@ -205,29 +208,29 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
ulPos = sNode.Pos( "FILTER" );
if( ulPos > 0 ){
sFilter = sCmd;
- sFilter.Ltrunc( ulPos + 7 );
+ sFilter.Ltrunc( ulPos + 6 );
sFilter.Trim();
}
}
-// std::cout << "sCmd - FILTER = [" << sFilter << "]\n";
+ // std::cout << "sCmd - FILTER = [" << sFilter << "]\n";
#ifdef XB_LOCKING_SUPPORT
if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 130;
throw iRc;
}
#endif // XB_LOCKING_SUPPORT
-// std::cout << "SqlCreateIndex() - ixtype = " << sIxType << "\n";
+ // std::cout << "SqlCreateIndex() - ixtype = " << sIxType << "\n";
xbIx *pIx;
void *vpTag;
if(( iRc = dbf->CreateTag( sIxType, sIxName, sKeyExpression, sFilter, bDesc, bUnique, xbFalse, &pIx, &vpTag )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 140;
throw iRc;
}
-// std::cout << "SqlCreateIndex() - back from tag create\n";
+ // std::cout << "SqlCreateIndex() - back from tag create\n";
#ifdef XB_NDX_SUPPORT
if( sIxType == "NDX"){
sCmd.Ltrunc( ulPos );
@@ -236,20 +239,27 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
sCmd.ToUpperCase();
if( sCmd.Pos( "ASSOCIATE" )){
if(( iRc = dbf->AssociateIndex( "NDX", sIxName, 0 )) != XB_NO_ERROR ){
- iErrorStop = 80;
+ iErrorStop = 150;
throw iRc;
}
}
}
}
- if( sIxType == "NDX"){
- if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
- }
+// if( sIxType == "NDX"){
+// if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
+// iErrorStop = 160;
+// throw iRc;
+// }
+// }
#endif // XB_NDX_SUPPORT
+
+ if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+
+
#ifdef XB_LOCKING_SUPPORT
if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
iErrorStop = 140;
@@ -272,7 +282,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
return iRc;
}
-
+#endif // XB_INDEX_SUPPORT
/***********************************************************************/
} /* namespace */
#endif /* XB_SQL_SUPPORT */
diff --git a/src/sql/xbcrtbl.cpp b/src/sql/xbcrtbl.cpp
index 4193d01..7f6b8fa 100755
--- a/src/sql/xbcrtbl.cpp
+++ b/src/sql/xbcrtbl.cpp
@@ -225,7 +225,7 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
xbDbf * dbf = NULL;
#ifdef XB_DBF4_SUPPORT
dbf = new xbDbf4( xbase );
- #elif XB_DBF3_SUPPORT
+ #elif defined (XB_DBF3_SUPPORT)
dbf = new xbDbf3( xbase );
#endif
if(( iRc = dbf->CreateTable( sTableName, "", schema, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
diff --git a/src/sql/xbdelete.cpp b/src/sql/xbdelete.cpp
new file mode 100755
index 0000000..157b281
--- /dev/null
+++ b/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->GetXbasePtr(), dbf );
+ if(( iRc = f.Set( sFilter )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ iRc2 = f.GetFirstRecord( XB_ALL_RECS );
+ while( iRc2 == XB_NO_ERROR ){
+ if( iDelOpt == 0 ){
+ if( !dbf->RecordDeleted()){
+ if(( iRc = dbf->DeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ }
+
+ } else { // undelete
+ if( dbf->RecordDeleted()){
+ if(( iRc = dbf->UndeleteRecord()) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+ }
+ }
+ iRc2 = f.GetNextRecord();
+ }
+ }
+ }
+
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlDropTable() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/src/sql/xbdrpix.cpp b/src/sql/xbdrpix.cpp
index 9e3bc3b..2815264 100755
--- a/src/sql/xbdrpix.cpp
+++ b/src/sql/xbdrpix.cpp
@@ -19,7 +19,7 @@ Email Contact:
namespace xb{
-
+#ifdef XB_INDEX_SUPPORT
/***********************************************************************/
xbInt16 xbSql::SqlDropIndex( const xbString &sCmdLine ){
@@ -63,7 +63,7 @@ xbInt16 xbSql::SqlDropIndex( const xbString &sCmdLine ){
sNode.Trim();
sNode.ToUpperCase();
if( sNode != "EXISTS" ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_SYNTAX_ERROR;
throw iRc;
} else {
@@ -97,30 +97,42 @@ xbInt16 xbSql::SqlDropIndex( const xbString &sCmdLine ){
dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
if( !dbf ){
if(( iRc = xbase->OpenHighestVersion( sTableName, "", &dbf )) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
if( dbf == NULL ){
- iErrorStop = 40;
+ iErrorStop = 120;
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
#ifdef XB_LOCKING_SUPPORT
if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 130;
throw iRc;
}
#endif // XB_LOCKING_SUPPORT
- iRc = dbf->DeleteTag( "NDX", sIxName );
- if( iRc == XB_FILE_NOT_FOUND && !bIfExists ){
- iErrorStop = 60;
- throw( iRc );
- } else if( iRc != XB_NO_ERROR ){
- iErrorStop = 70;
- throw iRc;
+ 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 ){
@@ -136,7 +148,7 @@ xbInt16 xbSql::SqlDropIndex( const xbString &sCmdLine ){
return iRc;
}
-
+#endif // XB_INDEX_SUPPORT
/***********************************************************************/
} /* namespace */
#endif /* XB_SQL_SUPPORT */
diff --git a/src/sql/xbinsert.cpp b/src/sql/xbinsert.cpp
index 1095202..835f9e6 100755
--- a/src/sql/xbinsert.cpp
+++ b/src/sql/xbinsert.cpp
@@ -52,13 +52,13 @@ xbInt16 xbSql::SqlInsert( const xbString &sCmdLine ){
if( !dbf ){
if(( iRc = xbase->OpenHighestVersion( sTableName, "", &dbf )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
}
-
+
if( !dbf ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
@@ -78,7 +78,7 @@ xbInt16 xbSql::SqlInsert( const xbString &sCmdLine ){
// verify there are the same count in the field list and values list
if( iFldCnt != iDataCnt ){
- iErrorStop = 30;
+ iErrorStop = 120;
iRc = XB_SYNTAX_ERROR;
throw iRc;
}
@@ -90,11 +90,11 @@ xbInt16 xbSql::SqlInsert( const xbString &sCmdLine ){
sFieldName.ExtractElement( sFieldList, ',', i, 0 );
sFieldName.Trim();
if(( iRc = dbf->GetFieldNo( sFieldName, iFldNo )) != XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc;
}
if(( iRc = dbf->GetFieldType( iFldNo, cFldType )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 140;
throw iRc;
}
@@ -113,7 +113,7 @@ xbInt16 xbSql::SqlInsert( const xbString &sCmdLine ){
case 'N':
case 'L':
if(( iRc = dbf->PutField( iFldNo, sFieldData )) != XB_NO_ERROR ){
- iErrorStop = 100;
+ iErrorStop = 150;
throw iRc;
}
break;
@@ -121,7 +121,7 @@ xbInt16 xbSql::SqlInsert( const xbString &sCmdLine ){
case 'D':
// assumes input date format of yyyy-mm-dd
if( sFieldData.Len() != 10 || sFieldData[5] != '-' || sFieldData[8] != '-' ){
- iErrorStop = 110;
+ iErrorStop = 160;
iRc = XB_INVALID_DATA;
throw iRc;
}
@@ -129,7 +129,7 @@ xbInt16 xbSql::SqlInsert( const xbString &sCmdLine ){
sWork1.Remove( 8, 1 );
sWork1.Remove( 5, 1 );
if(( iRc = dbf->PutField( iFldNo, sWork1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
+ iErrorStop = 170;
throw iRc;
}
break;
@@ -140,14 +140,14 @@ xbInt16 xbSql::SqlInsert( const xbString &sCmdLine ){
break;
default:
- iErrorStop= 150;
+ iErrorStop= 180;
iRc = XB_INVALID_FIELD_TYPE;
throw iRc;
}
}
if(( iRc = dbf->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 300;
+ iErrorStop = 190;
throw iRc;
}
@@ -159,17 +159,17 @@ xbInt16 xbSql::SqlInsert( const xbString &sCmdLine ){
iFldNo = llN->GetKey();
sFieldData = llD->GetKey();
if(( iRc = dbf->UpdateMemoField( iFldNo, sFieldData )) != XB_NO_ERROR ){
- iErrorStop = 400;
+ iErrorStop = 200;
throw iRc;
}
llN = llN->GetNextNode();
llD = llD->GetNextNode();
}
- if(( iRc == dbf->Commit()) != XB_NO_ERROR ){
- iErrorStop = 500;
- throw iRc;
- }
+ if(( iRc = dbf->Commit()) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
}
catch (xbInt16 iRc ){
xbString sMsg;
diff --git a/src/sql/xbselect.cpp b/src/sql/xbselect.cpp
new file mode 100755
index 0000000..91c0485
--- /dev/null
+++ b/src/sql/xbselect.cpp
@@ -0,0 +1,92 @@
+/* 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::SqlSelect( const xbString &sCmdLine ){
+
+ std::cout << "SELECT [" << sCmdLine << "]\n";
+ // expected format:
+ // SELECT
+
+ 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 = 10;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = uda.UpdTokenForKey( sKey, sToken )) != XB_NO_ERROR ){
+ iErrorStop = 10;
+ throw iRc;
+ }
+ }
+ }
+*/
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlSelect() 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/src/sql/xbsql.cpp b/src/sql/xbsql.cpp
index 25cd2c8..5261b1a 100755
--- a/src/sql/xbsql.cpp
+++ b/src/sql/xbsql.cpp
@@ -57,7 +57,20 @@ xbInt16 xbSql::ExecuteNonQuery( const xbString &sCmdLine ) {
// std::cout << "node 1 = " << sNode1.Str() << std::endl;
- if( sNode1 == "CREATE" ){
+ 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 );
@@ -65,8 +78,11 @@ xbInt16 xbSql::ExecuteNonQuery( const xbString &sCmdLine ) {
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;
@@ -81,22 +97,35 @@ xbInt16 xbSql::ExecuteNonQuery( const xbString &sCmdLine ) {
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 == "SELECT" )
+ iRc = SqlSelect( sCmd );
+
else if( sNode1 == "SET" )
iRc = SqlSet( sCmd );
@@ -114,11 +143,23 @@ xbXBase *xbSql::GetXbasePtr() const {
/***********************************************************************/
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 << "USE /dir/to/dbf/tables" << std::endl;
- std::cout << "CREATE TABLE" << std::endl << std::endl << std::endl;
+ 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;
}
/***********************************************************************/
@@ -133,11 +174,6 @@ xbInt16 xbSql::SqlUse( const xbString &sCmdLine ){
}
/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-/***********************************************************************/
-
-/***********************************************************************/
} /* namespace */
#endif /* XB_SQL_SUPPORT */
+
diff --git a/src/tests/tstfuncs.cpp b/src/tests/tstfuncs.cpp
index c499d3f..d9b108d 100755
--- a/src/tests/tstfuncs.cpp
+++ b/src/tests/tstfuncs.cpp
@@ -29,7 +29,7 @@ xbInt16 TestMethod( xbInt16 PrintOption, const char * title, xbDouble result, xb
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 );
+// xbInt16 FileCompare( xbXBase &x, xbInt16 iPo, const xbString &sFile1, const xbString &sFile2, const xbString &sSkipBytes );
#ifdef XB_LOCKING_SUPORT
@@ -458,15 +458,15 @@ xbDouble ChronTime(){
}
-
+/*
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
-*/
+
+// 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;
@@ -577,5 +577,7 @@ xbInt16 FileCompare( xbXBase &x, xbInt16 iPo, const xbString &sFile1, const xbSt
return iRc;
}
+*/
+
diff --git a/src/tests/xb_test_dbf_v3_memos.cpp b/src/tests/xb_test_dbf_v3_memos.cpp
index e364741..ad3e8e0 100755
--- a/src/tests/xb_test_dbf_v3_memos.cpp
+++ b/src/tests/xb_test_dbf_v3_memos.cpp
@@ -54,8 +54,7 @@ int main( int argCnt, char **av )
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
-
+ #ifdef XB_LOGGING_SUPPORT
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -63,12 +62,15 @@ int main( int argCnt, char **av )
xbString sMsg;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-
-#endif
+ #endif
x.SetDataDirectory( PROJECT_DATA_DIR );
x.EnableMsgLogging();
+
+ #ifdef XB_LOCKING_SUPPORT
x.DisableDefaultAutoLock();
+ #endif // XB_LOCKING_SUPPORT
+
InitTime();
if( po > 0 )
@@ -218,9 +220,33 @@ int main( int argCnt, char **av )
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 );
diff --git a/src/tests/xb_test_dbf_v3_nomemos.cpp b/src/tests/xb_test_dbf_v3_nomemos.cpp
index aab118f..e5adc48 100755
--- a/src/tests/xb_test_dbf_v3_nomemos.cpp
+++ b/src/tests/xb_test_dbf_v3_nomemos.cpp
@@ -71,7 +71,11 @@ int main( int argCnt, char **av )
x.SetDataDirectory( PROJECT_DATA_DIR );
x.EnableMsgLogging();
+
+ #ifdef XB_LOCKING_SUPPORT
x.DisableDefaultAutoLock();
+ #endif // XB_LOCKING_SUPPORT
+
InitTime();
if( po > 0 )
diff --git a/src/tests/xb_test_dbf_v4_memos.cpp b/src/tests/xb_test_dbf_v4_memos.cpp
index e92b5b2..2b0e09c 100755
--- a/src/tests/xb_test_dbf_v4_memos.cpp
+++ b/src/tests/xb_test_dbf_v4_memos.cpp
@@ -61,7 +61,11 @@ int main( int argCnt, char **av )
x.SetDataDirectory( PROJECT_DATA_DIR );
x.EnableMsgLogging();
+
+ #ifdef XB_LOCKING_SUPPORT
x.DisableDefaultAutoLock();
+ #endif // XB_LOCKING_SUPPORT
+
InitTime();
@@ -318,8 +322,28 @@ int main( int argCnt, char **av )
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 );
}
diff --git a/src/tests/xb_test_dbf_v4_nomemos.cpp b/src/tests/xb_test_dbf_v4_nomemos.cpp
index 68ecda0..4036588 100755
--- a/src/tests/xb_test_dbf_v4_nomemos.cpp
+++ b/src/tests/xb_test_dbf_v4_nomemos.cpp
@@ -58,7 +58,7 @@ int main( int argCnt, char **av )
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -66,11 +66,15 @@ int main( int argCnt, char **av )
xbString sMsg;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
x.SetDataDirectory( PROJECT_DATA_DIR );
x.EnableMsgLogging();
+
+ #ifdef XB_LOCKING_SUPPORT
x.DisableDefaultAutoLock();
+ #endif // XB_LOCKING_SUPPORT
+
InitTime();
if( po > 0 )
diff --git a/src/tests/xb_test_expression.cpp b/src/tests/xb_test_expression.cpp
index e3b47cc..75ed3e5 100755
--- a/src/tests/xb_test_expression.cpp
+++ b/src/tests/xb_test_expression.cpp
@@ -65,7 +65,9 @@ xbInt16 DevTester( xbXBase * xb, xbDbf * dbf, const char * sExpIn ){
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 ){
@@ -203,13 +205,17 @@ xbInt16 TestMethod( xbXBase *xb, xbDbf *d, xbInt16 PrintOption, const char * tit
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 )
@@ -255,7 +261,9 @@ xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * t
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 )
@@ -297,7 +305,9 @@ xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * t
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 )
@@ -341,7 +351,9 @@ xbInt16 TestMethod( xbXBase * xb, xbDbf * d, xbInt16 PrintOption, const char * t
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 )
@@ -634,7 +646,9 @@ int main( int argCnt, char **av )
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" );
diff --git a/src/tests/xb_test_file.cpp b/src/tests/xb_test_file.cpp
index ca32693..4614805 100755
--- a/src/tests/xb_test_file.cpp
+++ b/src/tests/xb_test_file.cpp
@@ -39,9 +39,9 @@ int main( int argCnt, char **av )
else if( av[1][0] == 'V' )
po = 2;
}
-
-#ifdef XB_LOGGING_SUPPORT
xbXBase x;
+
+ #ifdef XB_LOGGING_SUPPORT
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -49,7 +49,7 @@ int main( int argCnt, char **av )
xbString sMsg;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
InitTime();
xbFile f( &x );
@@ -57,13 +57,13 @@ int main( int argCnt, char **av )
xbString sWrkStr2;
sWrkStr = PROJECT_DATA_DIR;
f.SetDataDirectory( PROJECT_DATA_DIR );
-
+
#ifdef WIN32
sWrkStr.SwapChars( '/', '\\' );
#else
sWrkStr.SwapChars( '\\', '/' );
#endif
-
+
rc += TestMethod( po, "Set/GetDataDirectory()", f.GetDataDirectory(), sWrkStr, sWrkStr.Len());
f.SetFileName( "TestFile.txt" );
@@ -85,14 +85,13 @@ int main( int argCnt, char **av )
sWrkStr += "TestFile.txt";
rc += TestMethod( po, "GetFqFileName()", f.GetFqFileName(), sWrkStr, 26 );
-#ifdef WIN32
+ #ifdef WIN32
sWrkStr = "\\some\\directory\\myfile.dat";
sWrkStr2 = "\\some\\directory\\";
-#else
+ #else
sWrkStr = "/some/directory/myfile.dat";
sWrkStr2 = "/some/directory/";
-#endif
-
+ #endif
f.SetFqFileName( sWrkStr );
rc += TestMethod( po, "GetDirectory()", f.GetDirectory(), sWrkStr2, 16 );
@@ -107,7 +106,6 @@ int main( int argCnt, char **av )
rc += TestMethod( po, "xbFopen()", f.xbFopen( "w+b", XB_MULTI_USER ), XB_NO_ERROR );
-
xbString sTest;
sTest = "Test Data";
rc += TestMethod( po, "xbWrite()", f.xbFwrite( sTest.Str(), 9, 1 ), XB_NO_ERROR );
@@ -161,12 +159,10 @@ int main( int argCnt, char **av )
rc += TestMethod( po, "GetFileExtPart()", f2.GetFileExtPart( sFqnS , sFn ), XB_NO_ERROR );
rc += TestMethod( po, "GetFileExtPart()", f2.GetFileDirPart( sFqnS , sFn ), XB_NO_ERROR );
-
rc += TestMethod( po, "SetBlockSize()", f.SetBlockSize( 100 ), XB_INVALID_BLOCK_SIZE );
rc += TestMethod( po, "SetBlockSize()", f.SetBlockSize( 512 ), XB_NO_ERROR );
rc += TestMethod( po, "GetBlockSize()", (xbInt32) f.GetBlockSize(), 512 );
-
char BlockBuf[513];
memset( BlockBuf, 0x00, 513 );
rc += TestMethod( po, "xbFopen()", f.xbFopen( "w+b", XB_SINGLE_USER ), XB_NO_ERROR );
@@ -202,10 +198,10 @@ int main( int argCnt, char **av )
if( po > 0 || rc < 0 )
fprintf( stdout, "Total Errors = %d\n", rc * -1 );
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
return rc;
}
diff --git a/src/tests/xb_test_filter.cpp b/src/tests/xb_test_filter.cpp
index 2aeade3..ac4b896 100755
--- a/src/tests/xb_test_filter.cpp
+++ b/src/tests/xb_test_filter.cpp
@@ -52,7 +52,7 @@ int main( int argCnt, char **av )
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
x.EnableMsgLogging();
if( iPo ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -61,7 +61,7 @@ int main( int argCnt, char **av )
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
x.SetLogSize( 1000000 );
-#endif
+ #endif
x.SetDataDirectory( PROJECT_DATA_DIR );
x.EnableMsgLogging();
@@ -74,16 +74,20 @@ int main( int argCnt, char **av )
if( iPo > 0 )
std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
- xbDbf *V4Dbf = new xbDbf4( &x );
+ #ifdef XB_DBF4_SUPPORT
+ xbDbf *MyFile = new xbDbf4( &x );
+ #else
+ xbDbf *MyFile = new xbDbf3( &x );
+ #endif
- iRc2 = V4Dbf->CreateTable( "TestFilt.DBF", "TestFilter", MyV4Record, XB_OVERLAY, XB_MULTI_USER );
+ 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 = V4Dbf->CreateTag( "NDX", "TestFilt.NDX", "CFLD", "", 0, 0, XB_OVERLAY, &ixPtr, &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 );
@@ -99,79 +103,85 @@ int main( int argCnt, char **av )
c = j + 65;
s = c;
s.PadRight( c, (xbUInt32) i + 1 );
- V4Dbf->BlankRecord();
- V4Dbf->PutField( "CFLD", s );
- V4Dbf->PutLongField( "NFLD", ++lRecCnt );
- iRc = V4Dbf->AppendRecord();
+ MyFile->BlankRecord();
+ MyFile->PutField( "CFLD", s );
+ MyFile->PutLongField( "NFLD", ++lRecCnt );
+ iRc = MyFile->AppendRecord();
}
}
- iRc += TestMethod( iPo, "SetCurTag()", V4Dbf->SetCurTag( "" ), XB_NO_ERROR );
- xbFilter f1( &x, V4Dbf );
+ #ifdef XB_INDEX_SUPPORT
+ iRc += TestMethod( iPo, "SetCurTag()", MyFile->SetCurTag( "" ), XB_NO_ERROR );
+ #endif // XB_INDEX_SUPPORT
+
+ xbFilter f1( &x, MyFile );
xbString sMyFilterExpression = "LEFT( CFLD, 2 ) = 'YY'";
iRc += TestMethod( iPo, "Set()", f1.Set( sMyFilterExpression ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "SetCurTag()", V4Dbf->SetCurTag( "" ), 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) V4Dbf->GetCurRecNo(), 28 );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 28 );
iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 54 );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 54 );
iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 80 );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 80 );
iRc += TestMethod( iPo, "GetLast()", f1.GetLastRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 106 );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 106 );
iRc += TestMethod( iPo, "GetPrev()", f1.GetPrevRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 80 );
+ 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) V4Dbf->GetCurRecNo(), 50 );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 50 );
iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 76 );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 76 );
iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 102 );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 102 );
iRc += TestMethod( iPo, "GetLast()", f1.GetLastRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 128 );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 128 );
iRc += TestMethod( iPo, "GetPrev()", f1.GetPrevRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 102 );
+ iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) MyFile->GetCurRecNo(), 102 );
#ifdef XB_NDX_SUPPORT
f1.SetLimit( 0 );
// change things up a bit
- iRc += TestMethod( iPo, "GetRecord()", V4Dbf->GetRecord( 32 ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "PutField()", V4Dbf->PutField( "ZFLD", "Z" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetRecord()", V4Dbf->GetRecord( 52 ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "PutField()", V4Dbf->PutField( "ZFLD", "Z" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetRecord()", V4Dbf->GetRecord( 76 ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "PutField()", V4Dbf->PutField( "ZFLD", "Z" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetRecord()", V4Dbf->GetRecord( 103 ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "PutField()", V4Dbf->PutField( "ZFLD", "Z" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "Commit()", V4Dbf->Commit(), XB_NO_ERROR );
-
- iRc += TestMethod( iPo, "SetCurTag()", V4Dbf->SetCurTag( "TestFilt" ), XB_NO_ERROR );
+ 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, "GetFirstRecord()", f1.GetFirstRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 52 );
- iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 103 );
- iRc += TestMethod( iPo, "GetNextRecord()", f1.GetNextRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 76 );
- iRc += TestMethod( iPo, "GetLast()", f1.GetLastRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 32 );
- iRc += TestMethod( iPo, "GetPrev()", f1.GetPrevRecord(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "GetCurRecNo()", (xbInt32) V4Dbf->GetCurRecNo(), 76 );
+ 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()", V4Dbf->Close(), XB_NO_ERROR );
- delete V4Dbf;
+ iRc += TestMethod( iPo, "Close()", MyFile->Close(), XB_NO_ERROR );
+ delete MyFile;
if( iPo > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
diff --git a/src/tests/xb_test_funcs.cpp b/src/tests/xb_test_funcs.cpp
index 07e2c17..e8b73b0 100755
--- a/src/tests/xb_test_funcs.cpp
+++ b/src/tests/xb_test_funcs.cpp
@@ -92,7 +92,11 @@ int main( int argCnt, char **av )
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 );
diff --git a/src/tests/xb_test_mdx.cpp b/src/tests/xb_test_mdx.cpp
index 9351e4d..af191ad 100755
--- a/src/tests/xb_test_mdx.cpp
+++ b/src/tests/xb_test_mdx.cpp
@@ -227,11 +227,22 @@ int main( int argCnt, char **av )
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 );
- x.CloseAllTables();
- delete V4DbfX1;
+ iRc += TestMethod( iPo, "Rename()", V4DbfX1->Rename( "TestMdxR.DBF" ), XB_NO_ERROR );
- if( iPo > 0 || iRc < 0 )
+
+ x.CloseAllTables();
+ delete V4DbfX1;
+
+ if( iPo > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
#ifdef XB_LOGGING_SUPPORT
diff --git a/src/tests/xb_test_ndx.cpp b/src/tests/xb_test_ndx.cpp
index 31306c0..b8b97f6 100755
--- a/src/tests/xb_test_ndx.cpp
+++ b/src/tests/xb_test_ndx.cpp
@@ -53,22 +53,26 @@ int main( int argCnt, char **av )
{ "",0,0,0 }
};
-
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
+ xbString sMsg;
+
+ #ifdef XB_LOGGING_SUPPORT
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
+ #endif
x.SetDataDirectory( PROJECT_DATA_DIR );
x.EnableMsgLogging();
-// x.DisableDefaultAutoLock();
+
+ #ifdef XB_LOCKING_SUPPORT
+ x.DisableDefaultAutoLock();
+ #endif
+
InitTime();
char c;
@@ -116,6 +120,9 @@ int main( int argCnt, char **av )
iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxN.NDX", 0 );
iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
+ #ifdef XB_LOCKING_SUPPORT
+ iRc += TestMethod( iPo, "LockTable()", V3Dbf->LockTable( XB_LOCK ), XB_NO_ERROR );
+ #endif
iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxC", 8 );
iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxN" ), XB_NO_ERROR );
@@ -177,7 +184,6 @@ int main( int argCnt, char **av )
iRc += TestMethod( iPo, "SetCurTag()", V3Dbf->SetCurTag( "TestNdxD" ), XB_NO_ERROR );
iRc += TestMethod( iPo, "GetCurTagName()", V3Dbf->GetCurTagName().Str(), "TestNdxD", 8 );
- std::cout << d.Str() << "\n";
iRc += TestMethod( iPo, "Find( '19890420' )", V3Dbf->Find( d ), XB_NOT_FOUND );
V3Dbf->GetRecord( 26 );
@@ -315,16 +321,84 @@ int main( int argCnt, char **av )
}
}
- iRc += TestMethod( iPo, "Close()", V3Dbf->Close(), XB_NO_ERROR );
+ #ifdef XB_LOCKING_SUPPORT
+ iRc += TestMethod( iPo, "LockTable()", V3Dbf->LockTable( XB_UNLOCK ), XB_NO_ERROR );
+ #endif
+
+ xbString sDir;
+ V3Dbf->GetFileDirPart( sDir );
+ xbString sDbfName;
+ xbString sInfName;
+ sDbfName.Sprintf( "%sTestNdxR.DBF", sDir.Str());
+ sInfName.Sprintf( "%sTestNdxR.INF", sDir.Str());
+
+ V3Dbf->xbRemove( sDbfName );
+ V3Dbf->xbRemove( sInfName );
+
+ iRc += TestMethod( iPo, "Rename()", V3Dbf->Rename( "TestNdxR.DBF" ), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
+ // iRc += TestMethod( iPo, "Close()", V3Dbf->Close(), XB_NO_ERROR ); // did a delete instead of close
+
delete V3Dbf;
+ x.SetUniqueKeyOpt( XB_EMULATE_DBASE );
+ V3Dbf = new xbDbf3( &x );
+
+ iRc2 = V3Dbf->CreateTable( "TestNdx.DBF", "TestNdx", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxC.NDX", "CFLD", "", 0, xbTrue, XB_OVERLAY, &ixPtr, &ndx );
+ iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxC.NDX", 0 );
+ iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
+
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "AAA" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+
+ ixl = V3Dbf->GetIxList();
+ while( ixl ){
+ if( *ixl->sFmt == "NDX" ){
+ ix = (xbIxNdx *) ixl->ix;
+ //ix->GetTagName( 0, sTagName );
+ sMsg.Sprintf( "CheckTagIntegrity() - [%s]", ix->GetTagName(ix->GetCurTag()).Str());
+ iRc += TestMethod( iPo, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 2 ), XB_NO_ERROR );
+ ixl = ixl->next;
+ }
+ }
+
+ iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
+
if( iPo > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
x.WriteLogMessage( sMsg, 2 );
-#endif
+ #endif
return iRc;
}
diff --git a/src/tests/xb_test_ndx2.cpp b/src/tests/xb_test_ndx2.cpp
deleted file mode 100755
index f406b05..0000000
--- a/src/tests/xb_test_ndx2.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/* xb_test_ndx2.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 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 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[] =
- {
- { "CFLD", XB_CHAR_FLD, 30, 0 },
- { "DFLD", XB_DATE_FLD, 8, 0 },
- { "NFLD", XB_NUMERIC_FLD, 12, 0 },
- { "",0,0,0 }
- };
-
-
- xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
- 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 );
- x.SetLogSize( 1000000 );
-#endif
-
- x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
-// x.DisableDefaultAutoLock();
-
- x.SetUniqueKeyOpt( XB_EMULATE_DBASE );
- InitTime();
- xbString s;
- iRc = 0;
-
- if( po > 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( po, "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( po, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-
- iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxC.NDX", 0 );
- iRc += TestMethod( po, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
-
-
- iRc += TestMethod( po, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
- iRc += TestMethod( po, "Putfield()", V3Dbf->PutField( "CFLD", "AAA" ), XB_NO_ERROR );
- iRc += TestMethod( po, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
- iRc += TestMethod( po, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
- iRc += TestMethod( po, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
-
-
- iRc += TestMethod( po, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
- iRc += TestMethod( po, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
- iRc += TestMethod( po, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
- iRc += TestMethod( po, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
- iRc += TestMethod( po, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
-
- iRc += TestMethod( po, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
- iRc += TestMethod( po, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
- iRc += TestMethod( po, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
- iRc += TestMethod( po, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
- iRc += TestMethod( po, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
-
-
- xbIxList *ixl = V3Dbf->GetIxList();
- xbIxNdx *ix;
- xbString sTagName;
- while( ixl ){
- if( *ixl->sFmt == "NDX" ){
- ix = (xbIxNdx *) ixl->ix;
- //ix->GetTagName( 0, sTagName );
- sMsg.Sprintf( "CheckTagIntegrity() - [%s]", ix->GetTagName(ix->GetCurTag()).Str());
- iRc += TestMethod( po, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 2 ), XB_NO_ERROR );
- ixl = ixl->next;
- }
- }
-
- iRc += TestMethod( po, "Close()", V3Dbf->Close(), XB_NO_ERROR );
- delete V3Dbf;
-
- 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, 2 );
-#endif
-
- return iRc;
-}
diff --git a/src/tests/xb_test_sql.cpp b/src/tests/xb_test_sql.cpp
index 630cc89..20c8514 100755
--- a/src/tests/xb_test_sql.cpp
+++ b/src/tests/xb_test_sql.cpp
@@ -35,6 +35,8 @@ int main( int argCnt, char **av )
/* 1 - NORMAL */
/* 2 - VERBOSE */
+ xbString sSql;
+
if( argCnt > 1 ) {
if( av[1][0] == 'Q' )
po = 0;
@@ -56,7 +58,7 @@ int main( int argCnt, char **av )
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -64,7 +66,7 @@ int main( int argCnt, char **av )
xbString sMsg;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
@@ -77,26 +79,108 @@ int main( int argCnt, char **av )
if( po > 0 )
std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+
xbDbf4 SqlDbf( &x ); // version 4 dbf file
+
+
+ // clean up any things possibly needing cleaned up
+ xbString sDir;
+ SqlDbf.GetFileDirPart( sDir );
+ xbString sDbfName;
+ xbString sDbtName;
+ xbString sMdxName;
+ sDbfName.Sprintf( "%sTestSQL.DBF", sDir.Str());
+ sDbtName.Sprintf( "%sTestSQL.DBR", sDir.Str());
+ sMdxName.Sprintf( "%sTestSQL.MDX", sDir.Str());
+ SqlDbf.xbRemove( sDbfName );
+ SqlDbf.xbRemove( sDbtName );
+ SqlDbf.xbRemove( sMdxName );
+ sDbfName.Sprintf( "%sTestSqlR.DBF", sDir.Str());
+ sDbtName.Sprintf( "%sTestSqlR.DBT", sDir.Str());
+ sMdxName.Sprintf( "%sTestSqlR.MDX", sDir.Str());
+ SqlDbf.xbRemove( sDbfName );
+ SqlDbf.xbRemove( sDbtName );
+ SqlDbf.xbRemove( sMdxName );
+
+
iRc2 = SqlDbf.CreateTable( "TestSQL.DBF", "TestSQL", MySqlRecord, XB_OVERLAY, XB_MULTI_USER );
iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
+ #ifdef XB_MDX_SUPPORT
+ sSql = "CREATE INDEX tag1 ON TestSQL.DBF( CITY, STATE, DTOS( LASTUPDATE )) FILTER .NOT. DELETED()";
+ // xbString sSql = "CREATE INDEX tag1 ON TestSQL.DBF( CITY, STATE )";
- xbString sSql = "INSERT INTO TestSQL (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, "SqL CreateIndex()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+ #endif // XB_MDX_SUPPORT
+ sSql = "INSERT INTO TestSQL (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, "Insert()", (xbInt32) iRc2, XB_NO_ERROR );
+ iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
+ sSql = "INSERT INTO TestSQL (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'Dallas', 'TX', 76248, 'Dallas is hot in the summer', '1989-02-09', 'N')";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "ALTER TABLE TestSQL.DBF RENAME TO TestSqlR.DBF";
+
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlAlterTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ x.DisplayTableList();
+
+
+ sSql = "DELETE FROM TestSqlR.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 TestSqlR.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 TestSqlR.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+ sSql = "UNDELETE FROM TestSqlR.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+ sSql = "DELETE FROM TestSqlR.DBF WHERE BAD='EXPRESSION'";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_INVALID_FIELD_NAME );
+// if( iRc2 )
+// x.DisplayError( iRc2 );
+
+
+// sSql = "SELECT CITY, STATE ZIPCODE FROM TestSQL.DBF WHERE CITY IS NOT NULL";
+// iRc += TestMethod( po, "Select()", SqlDbf.Select( sSql ), XB_NO_ERROR );
+
+
iRc += TestMethod( po, "Close()", SqlDbf.Close(), XB_NO_ERROR );
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 );
@@ -105,3 +189,4 @@ int main( int argCnt, char **av )
return iRc;
}
+ \ No newline at end of file
diff --git a/src/tests/xb_test_string.cpp b/src/tests/xb_test_string.cpp
index f39c101..9d730db 100755
--- a/src/tests/xb_test_string.cpp
+++ b/src/tests/xb_test_string.cpp
@@ -43,13 +43,13 @@ int main( int argCnt, char **av = NULL )
}
xbXBase x;
+ xbString sMsg;
#ifdef XB_LOGGING_SUPPORT
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
@@ -305,7 +305,6 @@ int main( int argCnt, char **av = NULL )
s1.Left( 0 );
rc += TestMethod( po, "Left(0) ", s1, "", 0 );
-
char buf[5];
buf[0] = 'W';
buf[1] = 'X';
@@ -362,7 +361,6 @@ int main( int argCnt, char **av = NULL )
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 );
@@ -380,6 +378,13 @@ int main( int argCnt, char **av = NULL )
s3.Sprintf( "%s and %s", s1.Str(), s2.Str());
rc += TestMethod( po, "Sprintf", s3, "string 1 and string 2.0", 23 );
+ s1.Set( "abcdef.dbf" );
+ s1.Replace( "def", "DEF" );
+ rc += TestMethod( po, "Replace", s1, "abcDEF.dbf", 10 );
+ s1.Replace( ".dbf", ".DBF" );
+ rc += TestMethod( po, "Replace", s1, "abcDEF.DBF", 10 );
+
+
xbInt16 iErrorStop = 10;
xbInt16 iRc = -100;
sMsg.Sprintf( "class::method() Exception Caught. Error Stop = [%d] iRc = [%d] Expression = [%s]", iErrorStop, iRc, s3.Str() );
@@ -387,10 +392,10 @@ int main( int argCnt, char **av = NULL )
if( po > 0 || rc < 0 )
fprintf( stdout, "Total Errors = %d\n", rc * -1 );
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
return rc;
}
diff --git a/src/tests/xb_test_tblmgr.cpp b/src/tests/xb_test_tblmgr.cpp
index 26ec96a..451432c 100755
--- a/src/tests/xb_test_tblmgr.cpp
+++ b/src/tests/xb_test_tblmgr.cpp
@@ -54,11 +54,11 @@ int main( int argCnt, char **av )
if( po == 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
+ #ifdef WIN32
+ std::cout << "WIN32 environment" << std::endl;
+ #else
+ std::cout << "Not WIN32 environment" << std::endl;
+ #endif
}
xbDbf * d1;
@@ -77,8 +77,8 @@ int main( int argCnt, char **av )
rc += TestMethod( po, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableA" ), 0 );
rc += TestMethod( po, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableB" ), 0 );
rc += TestMethod( po, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableD" ), 0 );
-
-
+
+
// Next line should generate an exception
rc += TestMethod( po, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableC" ), XB_DUP_TABLE_OR_ALIAS );
diff --git a/src/tests/xb_test_xbase.cpp b/src/tests/xb_test_xbase.cpp
index 6dad3f7..9d523c5 100755
--- a/src/tests/xb_test_xbase.cpp
+++ b/src/tests/xb_test_xbase.cpp
@@ -39,25 +39,22 @@ int main( int argCnt, char **av )
po = 2;
}
-
xbXBase x;
+ xbString sMsg;
-
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
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
+ #endif
InitTime();
x.SetDefaultDateFormat( "YY-MM-DD" );
iRc += TestMethod( po, "SetDefaultDateFormat", x.GetDefaultDateFormat(), "YY-MM-DD", 8 );
-
if( po == 2 ){
if( x.GetEndianType() == 'L' )
std::cout << "Little Endian Architecture" << std::endl;
@@ -70,7 +67,7 @@ int main( int argCnt, char **av )
iRc += TestMethod( po, "GetErrorMessage", x.GetErrorMessage( XB_DBF_FILE_NOT_OPEN ), "DBF File Not Open", 17 );
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
xbString sLogDir = PROJECT_LOG_DIR;
iRc += TestMethod( po, "GetDefaultLogDirectory()", x.GetDefaultLogDirectory(), sLogDir, sLogDir.Len());
@@ -81,11 +78,10 @@ int main( int argCnt, char **av )
iRc += TestMethod( po, "GetDefaultLogFileName()", x.GetDefaultLogFileName(), sLogName, sLogName.Len());
x.WriteLogMessage( "test" );
-#endif
+ #endif
x.xbSleep( 250 );
-
if( po == 2 ){
std::cout << "DisplayError Test ==> ";
diff --git a/src/utils/checkndx.cpp b/src/utils/checkndx.cpp
deleted file mode 100755
index adb5e1c..0000000
--- a/src/utils/checkndx.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- Xbase64 project source code
-
- Copyright (C) 1997,2003 Gary A. Kunkel
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- Contact:
-
- Email:
-
- xbase64-devel@lists.sourceforge.net
- xbase64-users@lists.sourceforge.net
-
-*/
-
-
-// FIXME - program needs to be updated
-
-#include <xbase64/xbase64.h>
-
-int main(int ac,char** av)
-{
-#ifdef XBASE_DEBUG
- xbXBase x;
- xbDbf d( &x );
- xbNdx i( &d );
- xbInt16 rc;
-
- if( 3 != ac ){
- std::cout <<
- "\nUsage: checkndx dbf_file index_file\n";
- return 1;
- }
-
- if(( rc = d.Open( av[1] )) != XB_NO_ERROR )
- {
- std::cout << "\nCould not open file " << av[1] << " rc = " << rc << "\n";
- return 2;
- }
-
- if(( rc = i.OpenIndex( av[2] )) != XB_NO_ERROR )
- {
- std::cout << "\nCould not open file " << av[2] << " rc = " << rc << "\n";
- return 3;
- }
-
- std::cout << "\nRunning...\n";
- rc = i.CheckIndexIntegrity( 1 );
- std::cout << "\nNdx integrity check = " << rc << "\n";
-
- i.DumpHdrNode(0);
-
- d.Close();
-#else
- std::cout << "\nXBASE_DEBUG is not compiled in\n";
-#endif
- return 0;
-}
diff --git a/src/utils/dbfxtrct.cpp b/src/utils/dbfxtrct.cpp
deleted file mode 100755
index 17752c1..0000000
--- a/src/utils/dbfxtrct.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- Xbase64 project source code
-
- This program extracts data from a dbf data file and puts it in
- a comma delimited output file, suitable for input into an awk or
- perl script
-
- This program excludes all memo fields
-
- Copyright (C) 1997,2003 Gary A. Kunkel
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- Contact:
-
- Email:
-
- xbase64-devel@lists.sourceforge.net
- xbase64-users@lists.sourceforge.net
-
-*/
-
-#include <xbase64/xbase64.h>
-
-
-// FIXME - program need to be updated
-
-/*************************************************************************/
-void Usage();
-void Usage()
-{
- std::cout << "\nUsage: dbfxtrct -iDATABASE.DBF -sINDEX.N[TD]X -f -F -dMM/DD/YY\n";
- std::cout << "\nWhere DATABASE.DBF is the name of the database file to dump\n";
- std::cout << "INDEX.NTX or .NDX is an optional index sort paramater\n";
- std::cout << "-f optional field name list in first record\n";
- std::cout << "-F optional field name and attributes in first record\n";
- std::cout << "MM/DD/YY is an optional output date format for any date fields\n";
- std::cout << "\nThis program creates output suitable for awk and perl scripts\n";
- std::cout << "\nThis program does not support memo fields (yet).\n";
-}
-/*************************************************************************/
-int main(int ac,char** av)
-{
- xbXBase x;
- xbDbf d( &x );
- xbInt16 rc, FieldOption = 0;
- xbIndex *ix = 0;
- xbNdx z(&d);
-
- char *dbfname = NULL;
- char *ixname = NULL;
- char *p;
- char buf[200];
- xbExpn exp( &x );
-
-/* Get the input paramaters
-
- -i input datafile name
- -s optional sort index name
- -f optional field names in record one
- -F optional field names and attributes in record one
- -d date format
-*/
- for( int i = 1; i < ac; i++ )
- {
- p = av[i];
- if( *p != '-' ){
- std::cout << "Invalid paramater " << *p << std::endl;
- Usage();
- return 1;
- }
- p++;
- if( *p == 'i' )
- dbfname = ++p;
- else if( *p == 's' )
- ixname = ++p;
- else if( *p == 'f' )
- FieldOption = 1;
- else if( *p == 'F' )
- FieldOption = 2;
- else if( *p == 'd' )
- x.SetDefaultDateFormat( ++p );
- else{
- std::cout << "Invalid paramater " << *p << std::endl;
- Usage();
- return 1;
- }
- }
-
-/* if missing params, display a usage message and exit */
-
- if( !dbfname ){
- Usage();
- return 1;
- }
-
-/* open the database file */
-
- if(( rc = d.Open( dbfname )) != XB_NO_ERROR )
- {
- std::cout << "\nCould not open file " << dbfname << " rc = " << rc
- << "\n";
- return 2;
- }
-
-/* if an index was specified, open the index file */
-
- if( ixname ){
-
-#ifdef XB_INDEX_NTX
- if( strstr( ixname, "NTX" ))
- ix = new xbNtx( &d );
-#endif
-
-#ifdef XB_INDEX_NDX
- if( strstr( ixname, "NDX" ))
- ix = new xbNdx( &d );
-#endif
- if( !ix ){
- std::cout << "Unknown index type. .NTX and .NDX index file support only\n";
- return 3;
- }
- if(( rc = ix->OpenIndex( ixname )) != XB_NO_ERROR )
- {
- std::cout << "\nCould not open index " << ixname << " rc = " << rc
- << "\n";
- return 4;
- }
- }
-
-
-/* if -f or -F paramater, dump the header information */
- if( FieldOption ){
- for( xbLong l = 0; l < d.FieldCount(); l++ ){
- if( l ) std::cout << ",";
- std::cout << d.GetFieldName(l);
- if( FieldOption == 2 ){
- std::cout << "|" << d.GetFieldType(l) << "|" << d.GetFieldLen(l);
- std::cout << "|" << d.GetFieldDecimal(l);
- }
- }
- std::cout << std::endl;
- }
-
-/* if an index used, then loop thru each record, based on index, else
- dump in dbf sort order */
- if( ixname )
- rc = ix->GetFirstKey();
- else
- rc = d.GetFirstRecord();
-
- while( rc == XB_NO_ERROR ){
- for( xbLong l = 0; l < d.FieldCount(); l++ ){
- if( l ) std::cout << ",";
- strcpy( buf, exp.LTRIM( d.GetStringField( l )));
- if( d.GetFieldType( l ) == 'D' )
- std::cout << exp.DTOC( buf );
- else
- std::cout << exp.TRIM( buf );
- }
- if( ixname )
- rc = ix->GetNextKey();
- else
- rc = d.GetNextRecord();
- std::cout << std::endl;
- }
-
- d.Close();
- return 0;
-}
diff --git a/src/utils/preamble.txt b/src/utils/preamble.txt
deleted file mode 100755
index e2aeda8..0000000
--- a/src/utils/preamble.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-/* xbXXXXX.XXX
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2017 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
-
-*/
-
-
-namespace xb{
-
diff --git a/src/utils/reindex.cpp b/src/utils/reindex.cpp
deleted file mode 100755
index 3013167..0000000
--- a/src/utils/reindex.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- Xbase64 project source code
-
- This sample program packs an Xbase DBF file
-
- Copyright (C) 1997,2003 Gary A. Kunkel
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- Contact:
-
- Email:
-
- xbase64-devel@lists.sourceforge.net
- xbase64-users@lists.sourceforge.net
-*/
-
-
-// FIXME - program needs to be updated
-
-#include <xbase64/xbase64.h>
-
-static void
-showStatus(xbLong itemNum, xbLong numItems)
-{
- printf("indexing record %ld of %ld\r", itemNum, numItems);
- fflush(stdout);
-}
-
-int main(int ac,char** av)
-{
- if (3 != ac) {
- std::cout <<
- "\nUsage: reindex dbf_file ndx_file\n"
- ;
- return 1;
- }
-
- char* filename = av[1];
- char* filename2 = av[2];
-
- xbXBase x;
- xbDbf MyFile( &x );
- xbNdx MyIndex( &MyFile );
-
- if( MyFile.Open( filename )) {
- std::cout << "Could not open file " << filename << "\n";
- return 0;
- }
- if( MyIndex.OpenIndex( filename2 )) {
- std::cout << "Could not open index file " << filename2 << "\n";
- return 0;
- }
-
- xbInt16 rc = MyIndex.ReIndex(showStatus);
- printf("\n");
- if( rc != XB_NO_ERROR ) {
- std::cout << "\nError reindexing index ==> " << filename2;
- std::cout << " Return Code = " << rc;
- }
-
- /* or
- if(( rc = MyFile.RebuildAllIndicis()) != XB_NO_ERROR )
- {
- std::cout << "\nError reindexing...";
- std::cout << "\nReturn Code = " << rc;
- }
- */
- MyFile.Close();
- return 0;
-}
diff --git a/src/utils/xb_dbfutil.cpp b/src/utils/xb_dbfutil.cpp
index e008155..9c04fe3 100755
--- a/src/utils/xb_dbfutil.cpp
+++ b/src/utils/xb_dbfutil.cpp
@@ -87,6 +87,7 @@ class xbUtil{
void CopyDbfStructure();
void UpdateTableAutoCommit();
void DisplayTableInfo();
+ void RenameTable();
// 4 - RecordMenu options
void GetRecord();
@@ -136,18 +137,18 @@ class xbUtil{
#ifdef XB_INDEX_SUPPORT
void LockIndices();
void UnlockIndices();
- #endif // XB_INDEX_SUPPORT
+ #endif // XB_INDEX_SUPPORT
#ifdef XB_MEMO_SUPPORT
void LockMemo();
void UnlockMemo();
- #endif
+ #endif // XB_MEMO_SUPPORT
void LockHeader();
void UnlockHeader();
void xbFileLock();
void xbFileUnlock();
- #endif
+ #endif // XB_LOCKING_SUPPORT
// 7 - Expression Menu options
#ifdef XB_EXPRESSION_SUPPORT
@@ -159,8 +160,8 @@ class xbUtil{
void IsLeapYear();
#ifdef XB_DEBUG_SUPPORT
void DumpExpressionTree();
- #endif
- #endif
+ #endif // XB_DEBUG_SUPPORT
+ #endif // XB_EXPRESSION_SUPPORT
// 8 - Index Menu Options
#ifdef XB_INDEX_SUPPORT
@@ -345,10 +346,12 @@ void xbUtil::UnlockIndices(){
x.DisplayError( iRc );
}
-#endif // XB_LOCKING_SUPPORT
+#endif // XB_LOCKING_SUPPORT
+#endif // XB_INDEX_SUPPORT
/*************************************************************************************/
+#ifdef XB_EXPRESSION_SUPPORT
void xbUtil::ParseExpression( xbInt16 iOption ){
if( iOption == 0 )
@@ -395,9 +398,9 @@ void xbUtil::ProcessParsedExpression( xbInt16 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";
+ // 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 ){
@@ -405,9 +408,9 @@ void xbUtil::ProcessParsedExpression( xbInt16 iOption ){
return;
}
- std::cout << "Dump from w/i dbfutil after processing expression\n";
- exp->DumpTree( xbTrue );
- std::cout << "-- end of dumptree in dbfutil\n";
+ //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;
@@ -455,7 +458,6 @@ void xbUtil::DumpExpressionTree(){
}
#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;
@@ -1427,6 +1429,31 @@ void xbUtil::DisplayTableInfo(){
}
/*************************************************************************************/
+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];
@@ -1528,7 +1555,7 @@ void xbUtil::UpdateTableAutoCommit(){
std::cout << "ON]" << std::endl;
else
std::cout << "OFF]" << std::endl;
- std::cout << " 0 ==> Disable Auto Commit for table" << 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];
@@ -1546,7 +1573,7 @@ void xbUtil::UpdateTableAutoCommit(){
}
d->SetAutoCommit( iAuto );
std::cout << "Auto Commit set to [" << d->GetAutoCommit(0) << "]" << std::endl;
- if( d->GetAutoCommit() )
+ if( d->GetAutoCommit() )
std::cout << "Auto Commit enabled for table" << std::endl;
else
std::cout << "Auto Commit disabled for table" << std::endl;
@@ -1582,7 +1609,7 @@ void xbUtil::CopyDbfStructure(){
return;
}
std::cout << "Copy Table" << std::endl;
- std::cout << "Enter new DBF file name (ie; myfile.dbf or MYFILE.DBF): ";
+ std::cout << "Enter new DBF file name (ie; MYFILE.DBF): ";
std::cin.getline( filename, 128 );
f.SetFileName( filename );
if( strlen( filename ) == 0 ){
@@ -1725,7 +1752,7 @@ void xbUtil::Open(){
unsigned char cFileTypeByte;
std::cout << "Open Table" << std::endl;
- std::cout << "Enter DBF file name (.dbf or .DBF): ";
+ std::cout << "Enter DBF file name (.DBF): ";
std::cin.getline( filename, 128 );
f.SetFileName( filename );
@@ -2138,6 +2165,8 @@ void xbUtil::ProcessOption( const xbString &sOption ){
UpdateTableAutoCommit();
else if( sOption == "=3.14" )
DisplayTableInfo();
+ else if( sOption == "=3.15" )
+ RenameTable();
else if( sOption == "=4" )
RecordMenu();
else if( sOption == "=4.1" )
@@ -2169,7 +2198,7 @@ void xbUtil::ProcessOption( const xbString &sOption ){
else if( sOption == "=4.14" )
CommitRecord();
#ifdef XB_FILTER_SUPPORT
- else if( sOption == "=4.20" )
+ else if( sOption == "=4.20" )
SetFilter();
else if( sOption == "=4.21" )
GetFirstFilterRec();
@@ -2238,8 +2267,8 @@ void xbUtil::ProcessOption( const xbString &sOption ){
xbFileLock();
else if( sOption == "=6.21" )
xbFileUnlock();
- #endif
- #endif
+ #endif // XB_DEBUG_SUPPORT
+ #endif // XB_LOCKING_SUPPORT
#ifdef XB_EXPRESSION_SUPPORT
else if( sOption == "=7" )
@@ -2250,6 +2279,7 @@ void xbUtil::ProcessOption( const xbString &sOption ){
ProcessParsedExpression( 0 );
else if( sOption == "=7.3" )
ParseAndProcessExpression();
+
#ifdef XB_DEBUG_SUPPORT
else if (sOption == "=7.4" )
DumpExpressionTree();
@@ -2263,7 +2293,6 @@ void xbUtil::ProcessOption( const xbString &sOption ){
#endif // XB_EXPRESSION_SUPPORT
#ifdef XB_INDEX_SUPPORT
-
else if( sOption == "=8" )
IndexMenu();
else if( sOption == "=8.1" )
@@ -2408,11 +2437,12 @@ void xbUtil::IndexMenu()
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 << " 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;
@@ -2768,6 +2798,8 @@ void xbUtil::FileMenu()
std::cout << "12 - Copy Dbf Structure" << std::endl;
std::cout << "13 - Update Table Auto Commit Setting" << std::endl;
std::cout << "14 - Display Table Info" << std::endl;
+ std::cout << "15 - Rename Table" << std::endl;
+
std::cout << "99 - Exit Menu" << std::endl;
option = GetOption();
@@ -2787,6 +2819,7 @@ void xbUtil::FileMenu()
case 12: CopyDbfStructure(); break;
case 13: UpdateTableAutoCommit(); break;
case 14: DisplayTableInfo(); break;
+ case 15: RenameTable(); break;
case 99: break;
default: std::cout << "Invalid Option" << std::endl;
@@ -2886,7 +2919,10 @@ void xbUtil::SystemMenu()
void xbUtil::MainMenu()
{
int option = 0;
- std::cout << std::endl<< std::endl << "XBase64 Utility Program";
+ 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;
@@ -2968,6 +3004,7 @@ void xbUtil::MainMenu()
}
}
/*************************************************************************************/
+
#ifdef XB_INDEX_SUPPORT
void xbUtil::DisplayOpenIndexFiles(){
@@ -3425,8 +3462,8 @@ void xbUtil::AssociateNonProdIx(){
std::cout << "See InfFile menu option, option 11 from the main menu or =11 from here\n";
}
-#ifdef XB_DEBUG_SUPPORT
+#ifdef XB_DEBUG_SUPPORT
void xbUtil::DumpRecsByIx( xbInt16 iOpt ){
// iDirection = 0 - Forward - MDX
// = 1 - Reverse - MDX
diff --git a/src/utils/xb_pack.cpp b/src/utils/xb_pack.cpp
index ba61837..ccec5a3 100755
--- a/src/utils/xb_pack.cpp
+++ b/src/utils/xb_pack.cpp
@@ -22,11 +22,7 @@ int main(int ac,char** av)
if (ac <= 1) {
std::cout <<
"\nUsage: xb_pack filename...\n"
- "\nThis program does not automatically reindex any NDX indexes."
- "\nUse the reindex program to reindex any indexes associated"
- "\nwith the database, or build your own program which executes "
- "\nthe Pack() method after opening all the index files "
- "\nassociated with the database.\n\n";
+ "\nThis program does automatically reindexes any open NDX or MDX indexes.";
return 1;
}
@@ -44,6 +40,13 @@ int main(int ac,char** av)
std::cout << " Return Code = " << iRc << std::endl;
}
+ #ifdef XB_INDEX_SUPPORT
+ if(( iRc = MyFile->Reindex( 1 )) != XB_NO_ERROR ) {
+ std::cout << "\nError reindexing DBF database ==> " << av[1] << std::endl;
+ std::cout << " Return Code = " << iRc << std::endl;
+ }
+ #endif // XB_INDEX_SUPPORT
+
MyFile->Close();
delete MyFile;
diff --git a/src/utils/xb_tblinfo.cpp b/src/utils/xb_tblinfo.cpp
index 884ce5e..6b88403 100755
--- a/src/utils/xb_tblinfo.cpp
+++ b/src/utils/xb_tblinfo.cpp
@@ -23,11 +23,17 @@ int main( int ac, char ** av ){
xbXBase x;
xbBool bHdr = xbFalse;
- xbBool bMdxFound = xbFalse;
xbInt16 iRc;
xbString sTagName;
xbDbf *MyFile = NULL;
+ #ifdef XB_MDX_SUPPORT
+ #ifdef XB_DEBUG_SUPPORT
+ xbBool bMdxFound = xbFalse;
+ #endif // XB_DEBUG_SUPPORT
+ #endif // XB_MDX_SUPPORT
+
+
x.EnableMsgLogging();
x.SetLogSize( 1000000L );
@@ -63,6 +69,7 @@ int main( int ac, char ** av ){
}
MyFile->DumpHeader( 4 );
+ #ifdef XB_MDX_SUPPORT
// for each mdx file, dump the header
xbIxList *ixl = MyFile->GetIxList();
xbIx *ixp;
@@ -71,18 +78,23 @@ int main( int ac, char ** av ){
ixp = ixl->ix;
ixp->GetFileType( sFileType );
+ #ifdef XB_DEBUG_SUPPORT
if( sFileType == "MDX" ){
bMdxFound = xbTrue;
if( bHdr ){
- // std::cout << "MDX header\n";
ixp->DumpHeader( 1, 3 );
}
}
+ #endif // XB_DEBUG_SUPPORT
ixl = ixl->next;
- }
+ }
+ #ifdef XB_DEBUG_SUPPORT
if( !bMdxFound )
std::cout << "No MDX index for file." << std::endl;
+ #endif // XB_DEBUG_SUPPORT
+ #endif // XB_MDX_SUPPORT
+
MyFile->Close();
delete MyFile;