summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2023-08-14 21:07:48 +0200
committerJörg Frings-Fürst <debian@jff-webhosting.net>2023-08-14 21:07:48 +0200
commitd850e78baf62d1f472a3a296f407c127c64cec88 (patch)
tree39725643b44c91ea25809766cf95cd0b1173e880
parent15f88452d39eee5a89551a89ef2b93df5168ba2f (diff)
parentc894a7cdd8686ea695602a23a511a3f1b0d047be (diff)
Update upstream source from tag 'upstream/4.1.4'
Update to upstream version '4.1.4' with Debian dir 403f575aa88344456029245280a05149f0173f2e
-rwxr-xr-xAUTHORS45
-rwxr-xr-xNEWS58
-rwxr-xr-xREADME23
-rwxr-xr-xTODO1
-rwxr-xr-xbuild/borland5.5/CMakeLists.txt116
-rw-r--r--build/borland5.5/README.borland5_529
-rwxr-xr-xbuild/debian/CMakeLists.txt116
-rw-r--r--build/debian/README.debian7
-rwxr-xr-xbuild/linux32/CMakeLists.txt116
-rw-r--r--build/linux32/README.linux3222
-rwxr-xr-xbuild/linux64/CMakeLists.txt116
-rw-r--r--build/linux64/README.linux6422
-rwxr-xr-xbuild/mac64/CMakeLists.txt116
-rw-r--r--build/mac64/README.mac6421
-rwxr-xr-xbuild/mingw/BuildMinGw.bat8
-rwxr-xr-xbuild/mingw/CMakeLists.txt809
-rwxr-xr-xbuild/mingw/CleanMingw.bat19
-rw-r--r--build/mingw/README.mingw21
-rwxr-xr-xbuild/win32vs/BuildWin.bat5
-rwxr-xr-xbuild/win32vs/CMakeLists.txt116
-rw-r--r--build/win32vs/README.win32vs23
-rwxr-xr-xbuild/win64vs/BuildWin.bat5
-rwxr-xr-xbuild/win64vs/CMakeLists.txt116
-rw-r--r--build/win64vs/README.win64vs22
-rw-r--r--docs/doxygen/html/annotated.html1
-rw-r--r--docs/doxygen/html/classes.html5
-rw-r--r--docs/doxygen/html/classxb_1_1xbDate.html222
-rw-r--r--docs/doxygen/html/classxb_1_1xbDbf.html634
-rw-r--r--docs/doxygen/html/classxb_1_1xbFile.html390
-rw-r--r--docs/doxygen/html/classxb_1_1xbSsv.html108
-rw-r--r--docs/doxygen/html/classxb_1_1xbString.html87
-rw-r--r--docs/doxygen/html/classxb_1_1xbTblMgr.html140
-rw-r--r--docs/doxygen/html/classxb_1_1xbXBase.html263
-rw-r--r--docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html6
-rw-r--r--docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html4
-rw-r--r--docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html2
-rw-r--r--docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html4
-rw-r--r--docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html4
-rw-r--r--docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html4
-rw-r--r--docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html4
-rw-r--r--docs/doxygen/html/files.html110
-rw-r--r--docs/doxygen/html/functions_c.html4
-rw-r--r--docs/doxygen/html/functions_d.html2
-rw-r--r--docs/doxygen/html/functions_e.html2
-rw-r--r--docs/doxygen/html/functions_func_c.html3
-rw-r--r--docs/doxygen/html/functions_func_d.html2
-rw-r--r--docs/doxygen/html/functions_func_e.html2
-rw-r--r--docs/doxygen/html/functions_func_g.html20
-rw-r--r--docs/doxygen/html/functions_func_i.html2
-rw-r--r--docs/doxygen/html/functions_func_s.html5
-rw-r--r--docs/doxygen/html/functions_g.html20
-rw-r--r--docs/doxygen/html/functions_i.html4
-rw-r--r--docs/doxygen/html/functions_n.html1
-rw-r--r--docs/doxygen/html/functions_s.html5
-rw-r--r--docs/doxygen/html/functions_vars.html8
-rw-r--r--docs/doxygen/html/globals.html10
-rw-r--r--docs/doxygen/html/globals_defs.html2
-rw-r--r--docs/doxygen/html/globals_func.html8
-rw-r--r--docs/doxygen/html/hierarchy.html19
-rw-r--r--docs/doxygen/html/include_2xbcrix_8cpp.html80
-rw-r--r--docs/doxygen/html/menudata.js1
-rw-r--r--docs/doxygen/html/search/all_0.js2
-rw-r--r--docs/doxygen/html/search/all_10.js20
-rw-r--r--docs/doxygen/html/search/all_15.js405
-rw-r--r--docs/doxygen/html/search/all_2.js50
-rw-r--r--docs/doxygen/html/search/all_3.js2
-rw-r--r--docs/doxygen/html/search/all_4.js2
-rw-r--r--docs/doxygen/html/search/all_6.js62
-rw-r--r--docs/doxygen/html/search/all_8.js16
-rw-r--r--docs/doxygen/html/search/all_b.js2
-rw-r--r--docs/doxygen/html/search/all_c.js3
-rw-r--r--docs/doxygen/html/search/all_e.js10
-rw-r--r--docs/doxygen/html/search/classes_0.js10
-rw-r--r--docs/doxygen/html/search/classes_1.html37
-rw-r--r--docs/doxygen/html/search/classes_1.js12
-rw-r--r--docs/doxygen/html/search/defines_3.js80
-rw-r--r--docs/doxygen/html/search/files_1.js193
-rw-r--r--docs/doxygen/html/search/functions_0.js2
-rw-r--r--docs/doxygen/html/search/functions_10.js17
-rw-r--r--docs/doxygen/html/search/functions_15.js4
-rw-r--r--docs/doxygen/html/search/functions_2.js15
-rw-r--r--docs/doxygen/html/search/functions_3.js2
-rw-r--r--docs/doxygen/html/search/functions_4.js2
-rw-r--r--docs/doxygen/html/search/functions_6.js62
-rw-r--r--docs/doxygen/html/search/functions_8.js2
-rw-r--r--docs/doxygen/html/search/functions_b.js2
-rw-r--r--docs/doxygen/html/search/functions_e.js8
-rw-r--r--docs/doxygen/html/search/searchdata.js4
-rw-r--r--docs/doxygen/html/search/variables_0.js17
-rw-r--r--docs/doxygen/html/search/variables_2.js6
-rw-r--r--docs/doxygen/html/search/variables_4.js6
-rw-r--r--docs/doxygen/html/search/variables_5.js7
-rw-r--r--docs/doxygen/html/search/variables_6.js5
-rw-r--r--docs/doxygen/html/search/variables_7.js4
-rw-r--r--docs/doxygen/html/search/variables_8.js5
-rw-r--r--docs/doxygen/html/search/variables_9.js9
-rw-r--r--docs/doxygen/html/search/variables_a.html37
-rw-r--r--docs/doxygen/html/search/variables_a.js8
-rw-r--r--docs/doxygen/html/sql_2xbcrix_8cpp.html80
-rw-r--r--docs/doxygen/html/structsFldMap.html149
-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.html2
-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__dumprecs_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__date_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__expression_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__log_8cpp.html117
-rw-r--r--docs/doxygen/html/xb__ex__sql_8cpp.html2
-rw-r--r--docs/doxygen/html/xb__ex__ssv_8cpp.html12
-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.html70
-rw-r--r--docs/doxygen/html/xb__import_8cpp.html161
-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__blockread_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__tdx_8cpp.html118
-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/xbalttbl_8cpp.html2
-rw-r--r--docs/doxygen/html/xbase_8h.html2
-rw-r--r--docs/doxygen/html/xbase_8h_source.html2
-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.html2
-rw-r--r--docs/doxygen/html/xbblkread_8h.html2
-rw-r--r--docs/doxygen/html/xbblkread_8h_source.html2
-rw-r--r--docs/doxygen/html/xbblockread_8cpp.html2
-rw-r--r--docs/doxygen/html/xbcrix_8cpp.html2
-rw-r--r--docs/doxygen/html/xbcrtbl_8cpp.html2
-rw-r--r--docs/doxygen/html/xbcrtbl_8save2_8cpp.html80
-rw-r--r--docs/doxygen/html/xbcrtbl_8save_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.html111
-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.html542
-rw-r--r--docs/doxygen/html/xbdelete_8cpp.html2
-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.html25
-rw-r--r--docs/doxygen/html/xbexp_8h_source.html255
-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.html4
-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.html265
-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.html808
-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/xbixtdx_8cpp.html80
-rw-r--r--docs/doxygen/html/xblnklst_8h.html2
-rw-r--r--docs/doxygen/html/xblnklst_8h_source.html6
-rw-r--r--docs/doxygen/html/xblnklstord_8h.html2
-rw-r--r--docs/doxygen/html/xblnklstord_8h_source.html8
-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.html41
-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.html2
-rw-r--r--docs/doxygen/html/xbretcod_8h.html18
-rw-r--r--docs/doxygen/html/xbretcod_8h_source.html137
-rw-r--r--docs/doxygen/html/xbselect_8cpp.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.html2
-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.html231
-rw-r--r--docs/doxygen/html/xbstmt_8cpp.html2
-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.html144
-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.html2
-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.html204
-rw-r--r--docs/doxygen/latex/annotated.tex1
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDate.pdfbin4739 -> 4739 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDate.tex130
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDbf.pdfbin4914 -> 4914 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbDbf.tex343
-rw-r--r--docs/doxygen/latex/classxb_1_1xbFile.pdfbin4915 -> 4915 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbFile.tex216
-rw-r--r--docs/doxygen/latex/classxb_1_1xbSsv.pdfbin6100 -> 6100 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbSsv.tex68
-rw-r--r--docs/doxygen/latex/classxb_1_1xbString.tex46
-rw-r--r--docs/doxygen/latex/classxb_1_1xbTblMgr.pdfbin5490 -> 5490 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbTblMgr.tex68
-rw-r--r--docs/doxygen/latex/classxb_1_1xbXBase.pdfbin5492 -> 5492 bytes
-rw-r--r--docs/doxygen/latex/classxb_1_1xbXBase.tex130
-rw-r--r--docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex8
-rw-r--r--docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex6
-rw-r--r--docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex4
-rw-r--r--docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex6
-rw-r--r--docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex6
-rw-r--r--docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex6
-rw-r--r--docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex6
-rw-r--r--docs/doxygen/latex/files.tex212
-rw-r--r--docs/doxygen/latex/hierarchy.tex1
-rw-r--r--docs/doxygen/latex/include_2xbcrix_8cpp.tex3
-rw-r--r--docs/doxygen/latex/refman.tex9
-rw-r--r--docs/doxygen/latex/sql_2xbcrix_8cpp.tex3
-rw-r--r--docs/doxygen/latex/structsFldMap.tex45
-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.tex4
-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__dumprecs_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__date_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__expression_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__log_8cpp.tex17
-rw-r--r--docs/doxygen/latex/xb__ex__sql_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xb__ex__ssv_8cpp.tex10
-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.tex32
-rw-r--r--docs/doxygen/latex/xb__import_8cpp.tex38
-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__blockread_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__tdx_8cpp.tex18
-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/xbalttbl_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbase_8h.tex4
-rw-r--r--docs/doxygen/latex/xbase_8h_source.tex2
-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.tex2
-rw-r--r--docs/doxygen/latex/xbblkread_8h.tex4
-rw-r--r--docs/doxygen/latex/xbblkread_8h_source.tex2
-rw-r--r--docs/doxygen/latex/xbblockread_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbcrix_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbcrtbl_8cpp.tex4
-rw-r--r--docs/doxygen/latex/xbcrtbl_8save2_8cpp.tex3
-rw-r--r--docs/doxygen/latex/xbcrtbl_8save_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.tex111
-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.tex538
-rw-r--r--docs/doxygen/latex/xbdelete_8cpp.tex4
-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.tex18
-rw-r--r--docs/doxygen/latex/xbexp_8h_source.tex255
-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.tex4
-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.tex263
-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.tex808
-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/xbixtdx_8cpp.tex3
-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.tex41
-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.tex2
-rw-r--r--docs/doxygen/latex/xbretcod_8h.tex12
-rw-r--r--docs/doxygen/latex/xbretcod_8h_source.tex137
-rw-r--r--docs/doxygen/latex/xbselect_8cpp.tex4
-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.tex2
-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.tex227
-rw-r--r--docs/doxygen/latex/xbstmt_8cpp.tex4
-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.tex144
-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.tex2
-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.tex203
-rwxr-xr-xdocs/howto/GettingStarted.txt2
-rwxr-xr-xdocs/html/Xbase64ClassDiagramV2.jpegbin0 -> 291478 bytes
-rwxr-xr-xdocs/html/Xbase64ClassDiagramV2.jpeg.jpegbin0 -> 299517 bytes
-rwxr-xr-xdocs/html/index.html34
-rwxr-xr-xdocs/html/ntx.index.html180
-rwxr-xr-xdocs/html/xbae.html5
-rwxr-xr-xdocs/html/xbaf.html37
-rwxr-xr-xdocs/html/xbc1.html39
-rwxr-xr-xdocs/html/xbc10.html932
-rwxr-xr-xdocs/html/xbc11.html142
-rwxr-xr-xdocs/html/xbc12.html319
-rwxr-xr-xdocs/html/xbc13.html46
-rwxr-xr-xdocs/html/xbc14.html113
-rwxr-xr-xdocs/html/xbc15.html96
-rwxr-xr-xdocs/html/xbc16.html52
-rwxr-xr-xdocs/html/xbc17.html219
-rwxr-xr-xdocs/html/xbc18.html252
-rwxr-xr-xdocs/html/xbc2.html151
-rwxr-xr-xdocs/html/xbc3.html42
-rwxr-xr-xdocs/html/xbc4.html261
-rwxr-xr-xdocs/html/xbc5.html553
-rwxr-xr-xdocs/html/xbc6.html220
-rwxr-xr-xdocs/html/xbc7.html182
-rwxr-xr-xdocs/html/xbc8.html245
-rwxr-xr-xdocs/html/xbc9.html393
-rw-r--r--docs/man/xb_cfg_chk.1.gzbin546 -> 552 bytes
-rw-r--r--docs/man/xb_copydbf.1.gzbin705 -> 711 bytes
-rw-r--r--docs/man/xb_dbfutil.1.gzbin633 -> 639 bytes
-rw-r--r--docs/man/xb_deletall.1.gzbin656 -> 662 bytes
-rw-r--r--docs/man/xb_dumpdbt.1.gzbin672 -> 678 bytes
-rw-r--r--docs/man/xb_dumprecs.1.gzbin691 -> 696 bytes
-rw-r--r--docs/man/xb_import.1.gzbin0 -> 976 bytes
-rw-r--r--docs/man/xb_pack.1.gzbin697 -> 703 bytes
-rw-r--r--docs/man/xb_tblinfo.1.gzbin675 -> 680 bytes
-rw-r--r--docs/man/xb_undelall.1.gzbin690 -> 696 bytes
-rwxr-xr-xsrc/core/xbblockread.cpp14
-rwxr-xr-xsrc/core/xbdate.cpp341
-rwxr-xr-xsrc/core/xbdbf.cpp267
-rwxr-xr-xsrc/core/xbdbf3.cpp3
-rwxr-xr-xsrc/core/xbdbf4.cpp5
-rwxr-xr-xsrc/core/xbexp.cpp102
-rwxr-xr-xsrc/core/xbexpnode.cpp2
-rwxr-xr-xsrc/core/xbfields.cpp77
-rwxr-xr-xsrc/core/xbfile.cpp268
-rwxr-xr-xsrc/core/xbfilter.cpp2
-rwxr-xr-xsrc/core/xbfuncs.cpp7
-rwxr-xr-xsrc/core/xbixbase.cpp2
-rwxr-xr-xsrc/core/xbixmdx.cpp259
-rwxr-xr-xsrc/core/xbixndx.cpp54
-rwxr-xr-xsrc/core/xbixtdx.cpp661
-rwxr-xr-xsrc/core/xblog.cpp25
-rwxr-xr-xsrc/core/xbmemo.cpp2
-rwxr-xr-xsrc/core/xbmemo3.cpp16
-rwxr-xr-xsrc/core/xbmemo4.cpp5
-rwxr-xr-xsrc/core/xbssv.cpp115
-rwxr-xr-xsrc/core/xbstring.cpp163
-rwxr-xr-xsrc/core/xbtag.cpp2
-rwxr-xr-xsrc/core/xbtblmgr.cpp5
-rwxr-xr-xsrc/core/xbuda.cpp2
-rwxr-xr-xsrc/core/xbxbase.cpp78
-rwxr-xr-xsrc/examples/xb_ex_date.cpp2
-rwxr-xr-xsrc/examples/xb_ex_expression.cpp5
-rwxr-xr-xsrc/examples/xb_ex_log.cpp77
-rwxr-xr-xsrc/examples/xb_ex_ssv.cpp4
-rwxr-xr-xsrc/examples/xb_ex_string.cpp5
-rwxr-xr-xsrc/examples/xb_ex_v3_create_dbf.cpp28
-rwxr-xr-xsrc/examples/xb_ex_v3_upd_dbf.cpp144
-rwxr-xr-xsrc/examples/xb_ex_v4_create_dbf.cpp9
-rwxr-xr-xsrc/examples/xb_ex_v4_upd_dbf.cpp16
-rwxr-xr-xsrc/include/xbconfig.h.in6
-rwxr-xr-xsrc/include/xbcrix.cpp292
-rwxr-xr-xsrc/include/xbdate.h5
-rwxr-xr-xsrc/include/xbdbf.h22
-rwxr-xr-xsrc/include/xbexp.h1
-rwxr-xr-xsrc/include/xbexpnode.h2
-rwxr-xr-xsrc/include/xbfile.h139
-rwxr-xr-xsrc/include/xbindex.h184
-rwxr-xr-xsrc/include/xbindex.h.nope605
-rwxr-xr-xsrc/include/xblog.h15
-rwxr-xr-xsrc/include/xbretcod.h3
-rwxr-xr-xsrc/include/xbssv.h19
-rwxr-xr-xsrc/include/xbstring.h6
-rwxr-xr-xsrc/include/xbxbase.h13
-rwxr-xr-xsrc/sql/xbcrix.cpp54
-rwxr-xr-xsrc/sql/xbcrtbl.cpp13
-rwxr-xr-xsrc/sql/xbcrtbl.save.cpp256
-rwxr-xr-xsrc/sql/xbdelete.cpp2
-rwxr-xr-xsrc/sql/xbdrptbl.cpp11
-rwxr-xr-xsrc/tests/tstfuncs.cpp2
-rwxr-xr-xsrc/tests/xb_test_date.cpp34
-rwxr-xr-xsrc/tests/xb_test_dbf_v3_memos.cpp6
-rwxr-xr-xsrc/tests/xb_test_dbf_v4_nomemos.cpp14
-rwxr-xr-xsrc/tests/xb_test_expression.cpp62
-rwxr-xr-xsrc/tests/xb_test_file.cpp116
-rwxr-xr-xsrc/tests/xb_test_funcs.cpp3
-rwxr-xr-xsrc/tests/xb_test_lock.cpp318
-rwxr-xr-xsrc/tests/xb_test_lock2.cpp34
-rwxr-xr-xsrc/tests/xb_test_log.cpp52
-rwxr-xr-xsrc/tests/xb_test_mdx.cpp15
-rwxr-xr-xsrc/tests/xb_test_ndx.cpp55
-rwxr-xr-xsrc/tests/xb_test_sql.cpp119
-rwxr-xr-xsrc/tests/xb_test_string.cpp176
-rwxr-xr-xsrc/tests/xb_test_tblmgr.cpp33
-rwxr-xr-xsrc/tests/xb_test_tdx.cpp162
-rwxr-xr-xsrc/tests/xb_test_xbase.cpp113
-rwxr-xr-xsrc/utils/xb_cfg_check.cpp55
-rwxr-xr-xsrc/utils/xb_dbfutil.cpp75
-rwxr-xr-xsrc/utils/xb_execsql.cpp69
-rwxr-xr-xsrc/utils/xb_import.cpp242
506 files changed, 16411 insertions, 8065 deletions
diff --git a/AUTHORS b/AUTHORS
index 55cd46a..7b65b0a 100755
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,29 +1,42 @@
-This is a list of the people who are or have worked on the XBASE Library.
+Xbase64 Authors / Contributors
-Derry Bryson <derry@techass.com> - current maintainer
-Mario Motta - testing and bugfixes
-Serge Smirnov <sw1181@mail.ru> - MSVC stuff and OCAML support
-Frolov Sergey - bugfixes (memory leaks)
-Gary Kunkel - original author
+
+
+This is a list of the people who are or have worked on or after version 4.0.0 of the Xbase64 Library.
+
+
+------------------------------------------------------------------------------
+The following is the list of AUTHORS that contributed after release 4.0.0
+------------------------------------------------------------------------------
+
+Gary Kunkel <XDB-devel@lists.sourceforge.net> - original author, current maintainer
+Brecht Sanders <XDB-devel@lists.sourceforge.net> - mingw port
------------------------------------------------------------------------------
-The following is the original AUTHORS file for the xbase library
+The following is the list of AUTHORS that contributed prior to release 4.0.0
------------------------------------------------------------------------------
+
This is a partial list of the people that have helped with the xbase
project and something specific they worked on. Most have worked on more
than what is listed.
-Bob Cotton <bcotton@synix.com> - Clipper NTX index support
+
+Derry Bryson <derry@techass.com> - last maintainer
+Bob Cotton <bcotton@synix.com> - Clipper NTX index support
Denis Braussen <postoffice@mail.dotcom.fr> - general support
-Denis Pershin <dyp@inetlab.com> - provided library enhancements
-Eirk Bachman <ebp@geocities.com> - keeper of definitive Xbase spec
-Gabriel Emerson <egabriel@io.com> - provided logo
-Kehl Hubertus <kehlh@hotmail.com> - Xbase to Xbase C++ Perl Converter
-Michael Bedward <mbedward@ozemail.com.au> - Expression logic support
-Paul Foster <paulf@quillandmouse.com> - general support
-Vitaly Fedrushkov <willy@snowyowl.csu.ac.ru> - TV support and more
+Denis Pershin <dyp@inetlab.com> - provided library enhancements
+Eirk Bachman <ebp@geocities.com> - keeper of definitive Xbase spec
+Frolov Sergey - bugfixes (memory leaks)
+Gabriel Emerson <egabriel@io.com> - provided logo
+Kehl Hubertus <kehlh@hotmail.com> - Xbase to Xbase C++ Perl Converter
+Mario Motta - testing and bugfixes
+Michael Bedward <mbedward@ozemail.com.au> - Expression logic support
+Paul Foster <paulf@quillandmouse.com> - general support
+Serge Smirnov <sw1181@mail.ru> - MSVC stuff and OCAML support
+Vitaly Fedrushkov <willy@snowyowl.csu.ac.ru> - TV support and more
+
------------------------------------------------------------------------------
If you are missing and you should be included in this file, please let me
-know at xbase@techass.com. Thanks, Derry Bryson.
+know at XDB-devel@lists.sourceforge.net. Thanks, Gary Kunkel.
diff --git a/NEWS b/NEWS
index 1dd9edd..76de1be 100755
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,62 @@
-Xbase64 (Feb 1, 2023)
+Xbase64 (06/01/23)
------------------------
+4.1.4 - 06/01/23
+
+1) Created html chapter for log routines.
+2) Created sample log program.
+3) Added logic to enable/disable block processing for xbDbf::Reindex method.
+4) Updated usage of xbDbf::GetRecordCnt() to support error capture logic.
+5) Updated message handling logic in the SQL processor routines (beta).
+6) New utility program called xb_import, used to import records from a flat file into a DBF file/table.
+7) Updates to the xbDate class for handling null date values. Upgrade notes - xbDate values now default
+ to a null date on initialization, previous versions defaults to current date.
+8) Added method xbDbf::GetNullSts() - used to determine if a field is considered null.
+9) Reolved memory leak in expression parser when error condition encountered.
+10) Updates to Reindex routine, memory leak fix when error condition encountered
+11) Reindex, delete tag if reindex failure, updates to test programs to verify
+
+
+
+4.1.3 - 04/14/23
+
+1) Changed xbDbf::ReadHeader() to be a protected method, was private
+2) Added new config option for temp directory for temp file processing
+3) Added support for termporary indices (.TDX)
+4) New method xbFile::CreateFqn()
+5) Updated methods and shared static variables for Data, Log and Temp folders
+ Also moved Set and Get methods for log file to xbSsv class.
+6) Updated method xbFile::CreateUniqueFileName() to check for path separator at the
+ end of the supplied path, if not there, add it.
+7) Fix to xbDbf::DeleteTag() logic for setting cur tag to null when no tags exist.
+
+
+
+4.1.2 - 04/05/23
+
+1) New method created - xbSsv::GetPathSeparator()
+2) Updates to lock testing program.
+3) Updates for doxygen auto documentation.
+4) Documentation updates, added html chapter 19.
+5) Updates to CMakeLists.txt config file
+
+
+
+4.1.1 - 03/28/23
+
+1) Updates to AUTHORS file
+2) Port for mingw
+ - New mingw build folder
+ - Updates to CMakeLists.txt
+3) Documentation updates
+4) Added support for getenv_s for Visual Studio compiles
+5) Updates to Drop Table routine
+6) Updates to Create Table routine
+7) Updates to xb_lock_test and xb_lock_test2 library testing programs
+
+
+
4.1.0 - 03/02/23
1) Created block read functionality, class xbBlockRead
@@ -21,6 +76,7 @@ Xbase64 (Feb 1, 2023)
13) Created Debian specific build folder
+
4.0.3 - 12/26/22
1) Additional documentation updates
diff --git a/README b/README
index 2005427..35144ad 100755
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
- Xbase64 Version 4.1.1
- 12/26/22
+ Xbase64 Version 4.1.4
+ 04/14/23
WHAT IS IT?
@@ -9,8 +9,8 @@ Xbase64 is an xbase (i.e. dBase, FoxPro, etc.) compatible C++ class library
originally by Gary Kunkel and others (see the AUTHORS file).
Xbase64 is useful for accessing data in legacy dBase 3 and 4 database files as
-well as a general light-weight database engine. It includes support for
-DBF (dBase version 3 and 4) data files, NDX and MDX indices and DBT (dBase version 3 and 4).
+well as a general light weight database engine. It includes support for
+DBF (dBase version 3 and 4) data files, NDX and MDX indices and DBT (dBase version 3 and 4).
It supports file and record locking under *nix and Windows.
@@ -18,9 +18,11 @@ DIRECTORY LAYOUT
----------------
/build/borland5.5 Build library for Borland 5.5 environment
- /build/linux32 Build library for Linux 32 bit environment
- /build/linux64 Build library for Linux 64 bit environment
+ /build/debian Build library for Debian environment
+ /build/linux32 Build library for Linux 32 bit environment (tested on Slackware)
+ /build/linux64 Build library for Linux 64 bit environment (tested on Slackware)
/build/mac64 Build library for Mac 64 bit environment
+ /build/mingw Build library for mingw bit environment
/build/win32vs Build library for Windows 32 bit Visual Studio environment
/build/win64vs Build library for Windows 64 bit Visual Studio environment
@@ -29,13 +31,20 @@ DIRECTORY LAYOUT
/logs Log files
/sql SQL files
/src Library source code
+ /temp Folder for temp files
Starting point
--------------
- docs/html/index.html
+1) For Linux/Unix environment, download the latest gz file and execute the following
+ gunzip xbase64_x.y.z.tar.gz
+ tar -cvf xbase64_x.y.z
+
+2) For Windows environment, download the lates zip file and unzip it
+
+3) Point your browser to - docs/html/index.html
diff --git a/TODO b/TODO
index 13310dd..9ff2577 100755
--- a/TODO
+++ b/TODO
@@ -31,4 +31,3 @@ Xbase64 TODO's (not necessarily in this order!)
- impact on indices
-6) Block reads
diff --git a/build/borland5.5/CMakeLists.txt b/build/borland5.5/CMakeLists.txt
index f514c5c..ce2566a 100755
--- a/build/borland5.5/CMakeLists.txt
+++ b/build/borland5.5/CMakeLists.txt
@@ -1,14 +1,14 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.2)
-project (xbase64)
+project (Xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 4 )
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -25,7 +25,6 @@ IF( BORLAND )
add_compile_options( -w-8022 )
ENDIF( BORLAND )
-
MESSAGE( "--- Checking integer sizes" )
INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE( "short int" SHORT_INT )
@@ -160,6 +159,7 @@ option( XB_MEMO_SUPPORT "Compile memo field 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_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
@@ -179,6 +179,7 @@ Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
@@ -190,6 +191,7 @@ Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -242,6 +244,8 @@ CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
@@ -294,13 +298,15 @@ get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
# Undo bad decisions
@@ -320,14 +326,23 @@ IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
MESSAGE( "--- Expression required for indices. Setting to ON" )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
@@ -360,6 +375,12 @@ IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
# Build configuration header file
configure_file (
@@ -367,11 +388,11 @@ configure_file (
"${PROJECT_BINARY_DIR}/include/xbconfig.h"
)
-# Microsoft Windows settings
-IF( WIN32 )
+# Microsoft Windows compiler settings
+IF( MSVC )
# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
add_definitions( /EHsc )
-ENDIF( WIN32 )
+ENDIF( MSVC )
# set up include directories
@@ -441,6 +462,11 @@ IF( XB_MDX_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
IF( XB_SQL_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
@@ -559,14 +585,26 @@ add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
-IF( XB_MDX_SUPPORT )
+
+
IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
IF( XB_INDEX_SUPPORT )
add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
@@ -652,6 +690,11 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
#build utility programs
@@ -675,6 +718,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -695,6 +741,7 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_deletall DESTINATION bin)
install (TARGETS xb_dumpdbt DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
IF( XB_SQL_SUPPORT )
@@ -705,14 +752,16 @@ IF( XB_UTILS_SUPPORT )
ENDIF( XB_UTILS_SUPPORT )
-install (FILES include/xbconfig.h
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbase.h
${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
${PROJECT_SOURCE_DIR}/include/xbdate.h
${PROJECT_SOURCE_DIR}/include/xbdbf.h
${PROJECT_SOURCE_DIR}/include/xbexp.h
${PROJECT_SOURCE_DIR}/include/xbexpnode.h
${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
${PROJECT_SOURCE_DIR}/include/xbindex.h
${PROJECT_SOURCE_DIR}/include/xblnklst.h
${PROJECT_SOURCE_DIR}/include/xblnklstord.h
@@ -723,15 +772,11 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbsql.h
${PROJECT_SOURCE_DIR}/include/xbssv.h
${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
DESTINATION include/${CMAKE_PROJECT_NAME})
IF( NOT WIN32 )
@@ -741,6 +786,7 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
@@ -750,12 +796,14 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
ENDIF( NOT WIN32 )
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/borland5.5/README.borland5_5 b/build/borland5.5/README.borland5_5
new file mode 100644
index 0000000..849614b
--- /dev/null
+++ b/build/borland5.5/README.borland5_5
@@ -0,0 +1,29 @@
+
+3/26/23
+
+Install steps for Xbase64 with Borland compiler version 5.5
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, take necessary steps to install it.
+
+2) Verify gcc is intalled with the command: gcc --version
+ If it is not installed, execute the following commands:
+
+
+3) Build xbase64 library
+
+ cd build/borland5.5 (go to the appropriate build directory)
+ BuildBorland.bat (configure and compile for your environment)
+ make test (test library build)
+
+ sudo make install (install it)
+ xb_cfg_chk (test install)
+
+ if xb_cg-chk does not execute, add "C:\Program Files\xbase64\bin"
+ to the path.
+
+
+Also of note:
+
+ CleanBorland.bat - initializes the borland5.5 build library
+
diff --git a/build/debian/CMakeLists.txt b/build/debian/CMakeLists.txt
index f514c5c..ce2566a 100755
--- a/build/debian/CMakeLists.txt
+++ b/build/debian/CMakeLists.txt
@@ -1,14 +1,14 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.2)
-project (xbase64)
+project (Xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 4 )
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -25,7 +25,6 @@ IF( BORLAND )
add_compile_options( -w-8022 )
ENDIF( BORLAND )
-
MESSAGE( "--- Checking integer sizes" )
INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE( "short int" SHORT_INT )
@@ -160,6 +159,7 @@ option( XB_MEMO_SUPPORT "Compile memo field 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_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
@@ -179,6 +179,7 @@ Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
@@ -190,6 +191,7 @@ Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -242,6 +244,8 @@ CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
@@ -294,13 +298,15 @@ get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
# Undo bad decisions
@@ -320,14 +326,23 @@ IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
MESSAGE( "--- Expression required for indices. Setting to ON" )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
@@ -360,6 +375,12 @@ IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
# Build configuration header file
configure_file (
@@ -367,11 +388,11 @@ configure_file (
"${PROJECT_BINARY_DIR}/include/xbconfig.h"
)
-# Microsoft Windows settings
-IF( WIN32 )
+# Microsoft Windows compiler settings
+IF( MSVC )
# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
add_definitions( /EHsc )
-ENDIF( WIN32 )
+ENDIF( MSVC )
# set up include directories
@@ -441,6 +462,11 @@ IF( XB_MDX_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
IF( XB_SQL_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
@@ -559,14 +585,26 @@ add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
-IF( XB_MDX_SUPPORT )
+
+
IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
IF( XB_INDEX_SUPPORT )
add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
@@ -652,6 +690,11 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
#build utility programs
@@ -675,6 +718,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -695,6 +741,7 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_deletall DESTINATION bin)
install (TARGETS xb_dumpdbt DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
IF( XB_SQL_SUPPORT )
@@ -705,14 +752,16 @@ IF( XB_UTILS_SUPPORT )
ENDIF( XB_UTILS_SUPPORT )
-install (FILES include/xbconfig.h
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbase.h
${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
${PROJECT_SOURCE_DIR}/include/xbdate.h
${PROJECT_SOURCE_DIR}/include/xbdbf.h
${PROJECT_SOURCE_DIR}/include/xbexp.h
${PROJECT_SOURCE_DIR}/include/xbexpnode.h
${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
${PROJECT_SOURCE_DIR}/include/xbindex.h
${PROJECT_SOURCE_DIR}/include/xblnklst.h
${PROJECT_SOURCE_DIR}/include/xblnklstord.h
@@ -723,15 +772,11 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbsql.h
${PROJECT_SOURCE_DIR}/include/xbssv.h
${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
DESTINATION include/${CMAKE_PROJECT_NAME})
IF( NOT WIN32 )
@@ -741,6 +786,7 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
@@ -750,12 +796,14 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
ENDIF( NOT WIN32 )
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/debian/README.debian b/build/debian/README.debian
index 2c7e95b..dd6d8eb 100644
--- a/build/debian/README.debian
+++ b/build/debian/README.debian
@@ -1,5 +1,7 @@
-Debian build stes for Xbase64 - 2/16/23
+3/26/23
+
+Debian build steps for Xbase64
1) Verify cmake is installed with command: cmake --version
If it is not installed, install the latest version through the Debian software store.
@@ -16,8 +18,9 @@ Debian build stes for Xbase64 - 2/16/23
cd build/debian (go to the appropriate build directory)
cmake . (configure for your environment)
make (compile it)
+ make test (test library build)
sudo make install (install it)
- xb_cfg_chk (test it)
+ xb_cfg_chk (test install)
diff --git a/build/linux32/CMakeLists.txt b/build/linux32/CMakeLists.txt
index f514c5c..ce2566a 100755
--- a/build/linux32/CMakeLists.txt
+++ b/build/linux32/CMakeLists.txt
@@ -1,14 +1,14 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.2)
-project (xbase64)
+project (Xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 4 )
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -25,7 +25,6 @@ IF( BORLAND )
add_compile_options( -w-8022 )
ENDIF( BORLAND )
-
MESSAGE( "--- Checking integer sizes" )
INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE( "short int" SHORT_INT )
@@ -160,6 +159,7 @@ option( XB_MEMO_SUPPORT "Compile memo field 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_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
@@ -179,6 +179,7 @@ Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
@@ -190,6 +191,7 @@ Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -242,6 +244,8 @@ CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
@@ -294,13 +298,15 @@ get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
# Undo bad decisions
@@ -320,14 +326,23 @@ IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
MESSAGE( "--- Expression required for indices. Setting to ON" )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
@@ -360,6 +375,12 @@ IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
# Build configuration header file
configure_file (
@@ -367,11 +388,11 @@ configure_file (
"${PROJECT_BINARY_DIR}/include/xbconfig.h"
)
-# Microsoft Windows settings
-IF( WIN32 )
+# Microsoft Windows compiler settings
+IF( MSVC )
# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
add_definitions( /EHsc )
-ENDIF( WIN32 )
+ENDIF( MSVC )
# set up include directories
@@ -441,6 +462,11 @@ IF( XB_MDX_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
IF( XB_SQL_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
@@ -559,14 +585,26 @@ add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
-IF( XB_MDX_SUPPORT )
+
+
IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
IF( XB_INDEX_SUPPORT )
add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
@@ -652,6 +690,11 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
#build utility programs
@@ -675,6 +718,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -695,6 +741,7 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_deletall DESTINATION bin)
install (TARGETS xb_dumpdbt DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
IF( XB_SQL_SUPPORT )
@@ -705,14 +752,16 @@ IF( XB_UTILS_SUPPORT )
ENDIF( XB_UTILS_SUPPORT )
-install (FILES include/xbconfig.h
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbase.h
${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
${PROJECT_SOURCE_DIR}/include/xbdate.h
${PROJECT_SOURCE_DIR}/include/xbdbf.h
${PROJECT_SOURCE_DIR}/include/xbexp.h
${PROJECT_SOURCE_DIR}/include/xbexpnode.h
${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
${PROJECT_SOURCE_DIR}/include/xbindex.h
${PROJECT_SOURCE_DIR}/include/xblnklst.h
${PROJECT_SOURCE_DIR}/include/xblnklstord.h
@@ -723,15 +772,11 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbsql.h
${PROJECT_SOURCE_DIR}/include/xbssv.h
${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
DESTINATION include/${CMAKE_PROJECT_NAME})
IF( NOT WIN32 )
@@ -741,6 +786,7 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
@@ -750,12 +796,14 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
ENDIF( NOT WIN32 )
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/linux32/README.linux32 b/build/linux32/README.linux32
new file mode 100644
index 0000000..ebb193e
--- /dev/null
+++ b/build/linux32/README.linux32
@@ -0,0 +1,22 @@
+
+3/26/23
+
+Install steps for Xbase64 on a linux 32 bit platform.
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, take necessary steps to install it.
+
+2) Verify gcc is intalled with the command: gcc --version
+ If it is not installed, take necessary steps to install it.
+
+3) Build xbase64 library
+
+ cd build/linux32 (go to the appropriate build directory)
+ cmake . (configure for your environment)
+ make (compile it)
+ make test (test library build)
+ sudo make install (install it)
+ xb_cfg_chk (test install)
+
+
+
diff --git a/build/linux64/CMakeLists.txt b/build/linux64/CMakeLists.txt
index f514c5c..ce2566a 100755
--- a/build/linux64/CMakeLists.txt
+++ b/build/linux64/CMakeLists.txt
@@ -1,14 +1,14 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.2)
-project (xbase64)
+project (Xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 4 )
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -25,7 +25,6 @@ IF( BORLAND )
add_compile_options( -w-8022 )
ENDIF( BORLAND )
-
MESSAGE( "--- Checking integer sizes" )
INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE( "short int" SHORT_INT )
@@ -160,6 +159,7 @@ option( XB_MEMO_SUPPORT "Compile memo field 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_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
@@ -179,6 +179,7 @@ Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
@@ -190,6 +191,7 @@ Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -242,6 +244,8 @@ CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
@@ -294,13 +298,15 @@ get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
# Undo bad decisions
@@ -320,14 +326,23 @@ IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
MESSAGE( "--- Expression required for indices. Setting to ON" )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
@@ -360,6 +375,12 @@ IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
# Build configuration header file
configure_file (
@@ -367,11 +388,11 @@ configure_file (
"${PROJECT_BINARY_DIR}/include/xbconfig.h"
)
-# Microsoft Windows settings
-IF( WIN32 )
+# Microsoft Windows compiler settings
+IF( MSVC )
# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
add_definitions( /EHsc )
-ENDIF( WIN32 )
+ENDIF( MSVC )
# set up include directories
@@ -441,6 +462,11 @@ IF( XB_MDX_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
IF( XB_SQL_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
@@ -559,14 +585,26 @@ add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
-IF( XB_MDX_SUPPORT )
+
+
IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
IF( XB_INDEX_SUPPORT )
add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
@@ -652,6 +690,11 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
#build utility programs
@@ -675,6 +718,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -695,6 +741,7 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_deletall DESTINATION bin)
install (TARGETS xb_dumpdbt DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
IF( XB_SQL_SUPPORT )
@@ -705,14 +752,16 @@ IF( XB_UTILS_SUPPORT )
ENDIF( XB_UTILS_SUPPORT )
-install (FILES include/xbconfig.h
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbase.h
${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
${PROJECT_SOURCE_DIR}/include/xbdate.h
${PROJECT_SOURCE_DIR}/include/xbdbf.h
${PROJECT_SOURCE_DIR}/include/xbexp.h
${PROJECT_SOURCE_DIR}/include/xbexpnode.h
${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
${PROJECT_SOURCE_DIR}/include/xbindex.h
${PROJECT_SOURCE_DIR}/include/xblnklst.h
${PROJECT_SOURCE_DIR}/include/xblnklstord.h
@@ -723,15 +772,11 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbsql.h
${PROJECT_SOURCE_DIR}/include/xbssv.h
${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
DESTINATION include/${CMAKE_PROJECT_NAME})
IF( NOT WIN32 )
@@ -741,6 +786,7 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
@@ -750,12 +796,14 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
ENDIF( NOT WIN32 )
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/linux64/README.linux64 b/build/linux64/README.linux64
new file mode 100644
index 0000000..e5620ef
--- /dev/null
+++ b/build/linux64/README.linux64
@@ -0,0 +1,22 @@
+
+3/26/23
+
+Install steps for Xbase64 on a linux 64 bit platform.
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, take necessary steps to install it.
+
+2) Verify gcc is intalled with the command: gcc --version
+ If it is not installed, take necessary steps to install it.
+
+3) Build xbase64 library
+
+ cd build/linux64 (go to the appropriate build directory)
+ cmake . (configure for your environment)
+ make (compile it)
+ make test (test library build)
+ sudo make install (install it)
+ xb_cfg_chk (test install)
+
+
+
diff --git a/build/mac64/CMakeLists.txt b/build/mac64/CMakeLists.txt
index f514c5c..ce2566a 100755
--- a/build/mac64/CMakeLists.txt
+++ b/build/mac64/CMakeLists.txt
@@ -1,14 +1,14 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.2)
-project (xbase64)
+project (Xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 4 )
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -25,7 +25,6 @@ IF( BORLAND )
add_compile_options( -w-8022 )
ENDIF( BORLAND )
-
MESSAGE( "--- Checking integer sizes" )
INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE( "short int" SHORT_INT )
@@ -160,6 +159,7 @@ option( XB_MEMO_SUPPORT "Compile memo field 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_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
@@ -179,6 +179,7 @@ Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
@@ -190,6 +191,7 @@ Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -242,6 +244,8 @@ CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
@@ -294,13 +298,15 @@ get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
# Undo bad decisions
@@ -320,14 +326,23 @@ IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
MESSAGE( "--- Expression required for indices. Setting to ON" )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
@@ -360,6 +375,12 @@ IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
# Build configuration header file
configure_file (
@@ -367,11 +388,11 @@ configure_file (
"${PROJECT_BINARY_DIR}/include/xbconfig.h"
)
-# Microsoft Windows settings
-IF( WIN32 )
+# Microsoft Windows compiler settings
+IF( MSVC )
# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
add_definitions( /EHsc )
-ENDIF( WIN32 )
+ENDIF( MSVC )
# set up include directories
@@ -441,6 +462,11 @@ IF( XB_MDX_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
IF( XB_SQL_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
@@ -559,14 +585,26 @@ add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
-IF( XB_MDX_SUPPORT )
+
+
IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
IF( XB_INDEX_SUPPORT )
add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
@@ -652,6 +690,11 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
#build utility programs
@@ -675,6 +718,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -695,6 +741,7 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_deletall DESTINATION bin)
install (TARGETS xb_dumpdbt DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
IF( XB_SQL_SUPPORT )
@@ -705,14 +752,16 @@ IF( XB_UTILS_SUPPORT )
ENDIF( XB_UTILS_SUPPORT )
-install (FILES include/xbconfig.h
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbase.h
${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
${PROJECT_SOURCE_DIR}/include/xbdate.h
${PROJECT_SOURCE_DIR}/include/xbdbf.h
${PROJECT_SOURCE_DIR}/include/xbexp.h
${PROJECT_SOURCE_DIR}/include/xbexpnode.h
${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
${PROJECT_SOURCE_DIR}/include/xbindex.h
${PROJECT_SOURCE_DIR}/include/xblnklst.h
${PROJECT_SOURCE_DIR}/include/xblnklstord.h
@@ -723,15 +772,11 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbsql.h
${PROJECT_SOURCE_DIR}/include/xbssv.h
${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
DESTINATION include/${CMAKE_PROJECT_NAME})
IF( NOT WIN32 )
@@ -741,6 +786,7 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
@@ -750,12 +796,14 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
ENDIF( NOT WIN32 )
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/mac64/README.mac64 b/build/mac64/README.mac64
new file mode 100644
index 0000000..a8952bc
--- /dev/null
+++ b/build/mac64/README.mac64
@@ -0,0 +1,21 @@
+
+Mingw build steps for Xbase64 running on Windows - 3/7/23
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version.
+
+
+
+2) Verify you have xcode installed and operational.
+
+
+3) Build xbase64 library
+
+
+ cd build/mac64
+ cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
+ make build the library
+ make test tsst the library
+ make install install it
+ xb_cfg_check test it
+
diff --git a/build/mingw/BuildMinGw.bat b/build/mingw/BuildMinGw.bat
new file mode 100755
index 0000000..979cd65
--- /dev/null
+++ b/build/mingw/BuildMinGw.bat
@@ -0,0 +1,8 @@
+rem Build using MinGW compiler
+
+
+cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug .
+
+rem cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release .
+
+mingw32-make \ No newline at end of file
diff --git a/build/mingw/CMakeLists.txt b/build/mingw/CMakeLists.txt
new file mode 100755
index 0000000..ce2566a
--- /dev/null
+++ b/build/mingw/CMakeLists.txt
@@ -0,0 +1,809 @@
+cmake_minimum_required(VERSION 3.2)
+
+project (Xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 4 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows compiler settings
+IF( MSVC )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( MSVC )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+
+
+IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/mingw/CleanMingw.bat b/build/mingw/CleanMingw.bat
new file mode 100755
index 0000000..f2cf057
--- /dev/null
+++ b/build/mingw/CleanMingw.bat
@@ -0,0 +1,19 @@
+
+rem Use this batch file to completely clean the mingw directory tree for a clean build from scratch
+
+rem rd /S /Q bin
+rd /S /Q CMakeFiles
+rd /S /Q include
+rd /S /Q lib
+rd /S /Q testing
+rd /S /Q bin
+del *.cmake
+del CmakeCache.txt
+del Makefile
+del *.h
+del *.exp
+del *.lib
+del *.filters
+del *.vcxproj
+del *.sln
+del *.a \ No newline at end of file
diff --git a/build/mingw/README.mingw b/build/mingw/README.mingw
new file mode 100644
index 0000000..aee6401
--- /dev/null
+++ b/build/mingw/README.mingw
@@ -0,0 +1,21 @@
+
+Mingw build steps for Xbase64 running on Windows - 3/7/23
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version.
+
+
+2) Verify mingw gcc is intalled with the command: mingw32-make --version
+ If it is not installed, install the latest version.
+
+
+3) Build xbase64 library
+
+ cd build/mingw (go to the appropriate build directory)
+ BuildMinGw.bat (configure for your environment and compile)
+ mingw32-make test (test library buiild)
+ mingw32-make install (install it)
+
+ "c:\Program Files (x86)\xbase64\bin\xb_cfg_chk"
+ (test install)
+
diff --git a/build/win32vs/BuildWin.bat b/build/win32vs/BuildWin.bat
index 421e5c8..48fe5fd 100755
--- a/build/win32vs/BuildWin.bat
+++ b/build/win32vs/BuildWin.bat
@@ -1,8 +1,7 @@
rem Build using MS Visual Studio
-
-rem cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug .
-
pause To build the Windows Visual Studio 32 bit version, execute this script from a Visual Studio 32 bit command window
+
+rem cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug .
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release .
nmake \ No newline at end of file
diff --git a/build/win32vs/CMakeLists.txt b/build/win32vs/CMakeLists.txt
index f514c5c..ce2566a 100755
--- a/build/win32vs/CMakeLists.txt
+++ b/build/win32vs/CMakeLists.txt
@@ -1,14 +1,14 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.2)
-project (xbase64)
+project (Xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 4 )
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -25,7 +25,6 @@ IF( BORLAND )
add_compile_options( -w-8022 )
ENDIF( BORLAND )
-
MESSAGE( "--- Checking integer sizes" )
INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE( "short int" SHORT_INT )
@@ -160,6 +159,7 @@ option( XB_MEMO_SUPPORT "Compile memo field 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_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
@@ -179,6 +179,7 @@ Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
@@ -190,6 +191,7 @@ Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -242,6 +244,8 @@ CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
@@ -294,13 +298,15 @@ get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
# Undo bad decisions
@@ -320,14 +326,23 @@ IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
MESSAGE( "--- Expression required for indices. Setting to ON" )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
@@ -360,6 +375,12 @@ IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
# Build configuration header file
configure_file (
@@ -367,11 +388,11 @@ configure_file (
"${PROJECT_BINARY_DIR}/include/xbconfig.h"
)
-# Microsoft Windows settings
-IF( WIN32 )
+# Microsoft Windows compiler settings
+IF( MSVC )
# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
add_definitions( /EHsc )
-ENDIF( WIN32 )
+ENDIF( MSVC )
# set up include directories
@@ -441,6 +462,11 @@ IF( XB_MDX_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
IF( XB_SQL_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
@@ -559,14 +585,26 @@ add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
-IF( XB_MDX_SUPPORT )
+
+
IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
IF( XB_INDEX_SUPPORT )
add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
@@ -652,6 +690,11 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
#build utility programs
@@ -675,6 +718,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -695,6 +741,7 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_deletall DESTINATION bin)
install (TARGETS xb_dumpdbt DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
IF( XB_SQL_SUPPORT )
@@ -705,14 +752,16 @@ IF( XB_UTILS_SUPPORT )
ENDIF( XB_UTILS_SUPPORT )
-install (FILES include/xbconfig.h
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbase.h
${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
${PROJECT_SOURCE_DIR}/include/xbdate.h
${PROJECT_SOURCE_DIR}/include/xbdbf.h
${PROJECT_SOURCE_DIR}/include/xbexp.h
${PROJECT_SOURCE_DIR}/include/xbexpnode.h
${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
${PROJECT_SOURCE_DIR}/include/xbindex.h
${PROJECT_SOURCE_DIR}/include/xblnklst.h
${PROJECT_SOURCE_DIR}/include/xblnklstord.h
@@ -723,15 +772,11 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbsql.h
${PROJECT_SOURCE_DIR}/include/xbssv.h
${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
DESTINATION include/${CMAKE_PROJECT_NAME})
IF( NOT WIN32 )
@@ -741,6 +786,7 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
@@ -750,12 +796,14 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
ENDIF( NOT WIN32 )
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/win32vs/README.win32vs b/build/win32vs/README.win32vs
new file mode 100644
index 0000000..19dc7f6
--- /dev/null
+++ b/build/win32vs/README.win32vs
@@ -0,0 +1,23 @@
+
+32 bit Visual Studio build steps for Xbase64 running on Windows - 3/27/23
+
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version.
+
+
+2) Verify Visual Studio is intalled with the command.
+
+
+3) Build xbase64 library
+
+ Open Visual Studio Command Prompt for 32 bit environment
+ cd build/win32vs (go to the appropriate build directory)
+ BuildWin.bat (configure for your environment and compile)
+ nmake test (test library buiild)
+ nmake install (install it)
+
+ "c:\Program Files (x86)\xbase64\bin\xb_cfg_chk" (test install)
+
+
+Also of note, batch file CleanWin.bat initializes the win64vs build folders. \ No newline at end of file
diff --git a/build/win64vs/BuildWin.bat b/build/win64vs/BuildWin.bat
index 2151838..2e33641 100755
--- a/build/win64vs/BuildWin.bat
+++ b/build/win64vs/BuildWin.bat
@@ -1,9 +1,8 @@
rem Build using MS Visual Studio
-
-cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug .
-
pause To build the Windows Visual Studio 64 bit version, execute this script from a Visual Studio 64 bit command window
+
+cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug .
rem cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release .
pause
diff --git a/build/win64vs/CMakeLists.txt b/build/win64vs/CMakeLists.txt
index f514c5c..ce2566a 100755
--- a/build/win64vs/CMakeLists.txt
+++ b/build/win64vs/CMakeLists.txt
@@ -1,14 +1,14 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.2)
-project (xbase64)
+project (Xbase64)
set( xbase_VERSION_MAJOR 4 )
set( xbase_VERSION_MINOR 1 )
-set( xbase_VERSION_PATCH 0 )
+set( xbase_VERSION_PATCH 4 )
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -25,7 +25,6 @@ IF( BORLAND )
add_compile_options( -w-8022 )
ENDIF( BORLAND )
-
MESSAGE( "--- Checking integer sizes" )
INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE( "short int" SHORT_INT )
@@ -160,6 +159,7 @@ option( XB_MEMO_SUPPORT "Compile memo field 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_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+option( XB_TDX_SUPPORT "Compile temporary index support into library" ON)
option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
@@ -179,6 +179,7 @@ Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_TDX_SUPPORT " ${XB_TDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
@@ -190,6 +191,7 @@ Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+Message( "--- XB_BLOCKREAD_SUPPORT " ${XB_BLOCKREAD_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -242,6 +244,8 @@ CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(getenv_s HAVE_GETENV_S_F)
+
CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
@@ -294,13 +298,15 @@ get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin )
+set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib )
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src )
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data )
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs )
+set( PROJECT_TEMP_DIR ${PROJECT_PARENT_DIR}/temp )
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME} )
# Undo bad decisions
@@ -320,14 +326,23 @@ IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+
+
IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
MESSAGE( "--- Expression required for indices. Setting to ON" )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ Set( XB_INDEX_SUPPORT "1" )
ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
@@ -360,6 +375,12 @@ IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+IF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+ MESSAGE( "--- MDX support required for Temporary indices. Setting to ON" )
+ set( XB_MDX_SUPPORT ON CACHE BOOL "Compile temporary index support into library" FORCE )
+ENDIF( XB_TDX_SUPPORT AND NOT XB_MDX_SUPPORT )
+
+
# Build configuration header file
configure_file (
@@ -367,11 +388,11 @@ configure_file (
"${PROJECT_BINARY_DIR}/include/xbconfig.h"
)
-# Microsoft Windows settings
-IF( WIN32 )
+# Microsoft Windows compiler settings
+IF( MSVC )
# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
add_definitions( /EHsc )
-ENDIF( WIN32 )
+ENDIF( MSVC )
# set up include directories
@@ -441,6 +462,11 @@ IF( XB_MDX_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixtdx.cpp )
+ENDIF( XB_TDX_SUPPORT )
+
+
IF( XB_SQL_SUPPORT )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
@@ -559,14 +585,26 @@ add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
ENDIF( XB_DBF3_SUPPORT )
ENDIF( XB_NDX_SUPPORT )
-IF( XB_MDX_SUPPORT )
+
+
IF( XB_DBF4_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
ENDIF( XB_MDX_SUPPORT )
+IF( XB_TDX_SUPPORT )
+add_executable( xb_test_tdx ${PROJECT_SOURCE_DIR}/tests/xb_test_tdx.cpp )
+target_link_libraries( xb_test_tdx ${EXTRA_LIBS})
+add_test( NAME xbIxTdx COMMAND xb_test_tdx QUIET )
+ENDIF( XB_TDX_SUPPORT )
+
+ENDIF( XB_DBF4_SUPPORT )
+
+
+
IF( XB_INDEX_SUPPORT )
add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
@@ -652,6 +690,11 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+ IF( XB_LOGGING_SUPPORT )
+ add_executable( xb_ex_log ${PROJECT_SOURCE_DIR}/examples/xb_ex_log.cpp )
+ target_link_libraries( xb_ex_log ${EXTRA_LIBS})
+ ENDIF( XB_LOGGING_SUPPORT )
+
ENDIF( XB_EXAMPLES_SUPPORT )
#build utility programs
@@ -675,6 +718,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+ add_executable( xb_import ${PROJECT_SOURCE_DIR}/utils/xb_import.cpp )
+ target_link_libraries( xb_import ${EXTRA_LIBS})
+
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -695,6 +741,7 @@ IF( XB_UTILS_SUPPORT )
install (TARGETS xb_deletall DESTINATION bin)
install (TARGETS xb_dumpdbt DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_import DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
IF( XB_SQL_SUPPORT )
@@ -705,14 +752,16 @@ IF( XB_UTILS_SUPPORT )
ENDIF( XB_UTILS_SUPPORT )
-install (FILES include/xbconfig.h
+install (FILES ${PROJECT_BINARY_DIR}/include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbase.h
${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
${PROJECT_SOURCE_DIR}/include/xbdate.h
${PROJECT_SOURCE_DIR}/include/xbdbf.h
${PROJECT_SOURCE_DIR}/include/xbexp.h
${PROJECT_SOURCE_DIR}/include/xbexpnode.h
${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
${PROJECT_SOURCE_DIR}/include/xbindex.h
${PROJECT_SOURCE_DIR}/include/xblnklst.h
${PROJECT_SOURCE_DIR}/include/xblnklstord.h
@@ -723,15 +772,11 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbsql.h
${PROJECT_SOURCE_DIR}/include/xbssv.h
${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- ${PROJECT_SOURCE_DIR}/include/xbblkread.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
-
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
DESTINATION include/${CMAKE_PROJECT_NAME})
IF( NOT WIN32 )
@@ -741,6 +786,7 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_import.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
@@ -750,12 +796,14 @@ install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
ENDIF( NOT WIN32 )
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.4 SOVERSION 0 )
+IF( WIN32 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION bin)
+ELSE( WIN32 )
+ IF( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ ELSE( EXISTS /usr/local/lib64 )
+ install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ ENDIF( EXISTS /usr/local/lib64 )
+ENDIF( WIN32 )
diff --git a/build/win64vs/README.win64vs b/build/win64vs/README.win64vs
new file mode 100644
index 0000000..c5e24a6
--- /dev/null
+++ b/build/win64vs/README.win64vs
@@ -0,0 +1,22 @@
+
+64 bit Visual Studio build steps for Xbase64 running on Windows - 3/7/23
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version.
+
+
+2) Verify Visual Studio is intalled with the command.
+
+
+3) Build xbase64 library
+
+ Open Visual Studio Command Prompt for 64 bit environment
+ cd build/win64vs (go to the appropriate build directory)
+ BuildWin.bat (configure for your environment and compile)
+ nmake test (test library buiild)
+ nmake install (install it)
+
+ "c:\Program Files (x86)\xbase64\bin\xb_cfg_chk" (test install)
+
+
+Also of note, batch file CleanWin.bat initializes the win64vs build folders. \ No newline at end of file
diff --git a/docs/doxygen/html/annotated.html b/docs/doxygen/html/annotated.html
index 5124dd1..78f63fe 100644
--- a/docs/doxygen/html/annotated.html
+++ b/docs/doxygen/html/annotated.html
@@ -78,6 +78,7 @@ $(function() {
<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbTblList.html" target="_self">xbTblList</a></td><td class="desc"></td></tr>
<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbTblMgr.html" target="_self">xbTblMgr</a></td><td class="desc"></td></tr>
<tr id="row_0_8_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbXBase.html" target="_self">xbXBase</a></td><td class="desc">XbXbase class </td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsFldMap.html" target="_self">sFldMap</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/docs/doxygen/html/classes.html b/docs/doxygen/html/classes.html
index 4c2c9d8..8db6dd4 100644
--- a/docs/doxygen/html/classes.html
+++ b/docs/doxygen/html/classes.html
@@ -66,9 +66,12 @@ $(function() {
<div class="headertitle"><div class="title">Data Structure Index</div></div>
</div><!--header-->
<div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_X">X</a></div>
+<div class="qindex"><a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_X">X</a></div>
<div class="classindex">
<dl class="classindex even">
+<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
+<dd><a class="el" href="structsFldMap.html">sFldMap</a></dd></dl>
+<dl class="classindex odd">
<dt class="alphachar"><a id="letter_X" name="letter_X">X</a></dt>
<dd><a class="el" href="classxb_1_1xbDate.html">xbDate</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbFile.html">xbFile</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="structxb_1_1xbSchema.html">xbSchema</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbSsv.html">xbSsv</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbString.html">xbString</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="structxb_1_1xbTblList.html">xbTblList</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbTblMgr.html">xbTblMgr</a> (<a class="el" href="namespacexb.html">xb</a>)</dd><dd><a class="el" href="classxb_1_1xbXBase.html">xbXBase</a> (<a class="el" href="namespacexb.html">xb</a>)</dd></dl>
</div>
diff --git a/docs/doxygen/html/classxb_1_1xbDate.html b/docs/doxygen/html/classxb_1_1xbDate.html
index 67f85fc..d7ea52b 100644
--- a/docs/doxygen/html/classxb_1_1xbDate.html
+++ b/docs/doxygen/html/classxb_1_1xbDate.html
@@ -104,6 +104,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a7ab727a7ec184a086ad36ef83b948170"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170">xbDate</a> (xbInt32 lJulDate)</td></tr>
<tr class="memdesc:a7ab727a7ec184a086ad36ef83b948170"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170">More...</a><br /></td></tr>
<tr class="separator:a7ab727a7ec184a086ad36ef83b948170"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8dfc827b466be3c5e3def599277dfa43"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a8dfc827b466be3c5e3def599277dfa43">xbDate</a> (xbUInt16 iInit)</td></tr>
+<tr class="memdesc:a8dfc827b466be3c5e3def599277dfa43"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classxb_1_1xbDate.html#a8dfc827b466be3c5e3def599277dfa43">More...</a><br /></td></tr>
+<tr class="separator:a8dfc827b466be3c5e3def599277dfa43"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a05c9680c6eb9fe07ecf13a189b596c37"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37">~xbDate</a> ()</td></tr>
<tr class="memdesc:a05c9680c6eb9fe07ecf13a189b596c37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <a href="classxb_1_1xbDate.html#a05c9680c6eb9fe07ecf13a189b596c37">More...</a><br /></td></tr>
<tr class="separator:a05c9680c6eb9fe07ecf13a189b596c37"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -180,6 +183,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a5f8051c31b29244265e8f26ac3547b9b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b">IsLeapYear</a> () const</td></tr>
<tr class="memdesc:a5f8051c31b29244265e8f26ac3547b9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if date is a leap year. <a href="classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b">More...</a><br /></td></tr>
<tr class="separator:a5f8051c31b29244265e8f26ac3547b9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a611a64b14ff89ad3c20b34081ea1e658"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658">IsNull</a> () const</td></tr>
+<tr class="memdesc:a611a64b14ff89ad3c20b34081ea1e658"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine if date is null date. <a href="classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658">More...</a><br /></td></tr>
+<tr class="separator:a611a64b14ff89ad3c20b34081ea1e658"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ee3377d4ead9d31099eee539d9b13a7"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7">JulianDays</a> () const</td></tr>
<tr class="memdesc:a1ee3377d4ead9d31099eee539d9b13a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate julian days for a given date. <a href="classxb_1_1xbDate.html#a1ee3377d4ead9d31099eee539d9b13a7">More...</a><br /></td></tr>
<tr class="separator:a1ee3377d4ead9d31099eee539d9b13a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -210,18 +216,30 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -235,15 +253,14 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -287,7 +304,7 @@ Static Protected Attributes</h2></td></tr>
<p >To calculate a future or past date, convert the base date to a Julian date, add (or subtract) the number of days necessary to (from) it and convert the julian date back to a Gregorian date. </p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ab3150e7db0ab5db10a07d748b55465eb" name="ab3150e7db0ab5db10a07d748b55465eb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab3150e7db0ab5db10a07d748b55465eb">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[1/4]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3150e7db0ab5db10a07d748b55465eb">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[1/5]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -306,7 +323,7 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
<a id="ac8a4d9330221a3daee21b3c28c1d9719" name="ac8a4d9330221a3daee21b3c28c1d9719"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac8a4d9330221a3daee21b3c28c1d9719">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[2/4]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8a4d9330221a3daee21b3c28c1d9719">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[2/5]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -332,7 +349,7 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
<a id="acf4546f5681735ede18210f60bab68d4" name="acf4546f5681735ede18210f60bab68d4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acf4546f5681735ede18210f60bab68d4">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[3/4]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#acf4546f5681735ede18210f60bab68d4">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[3/5]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -358,7 +375,7 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
<a id="a7ab727a7ec184a086ad36ef83b948170" name="a7ab727a7ec184a086ad36ef83b948170"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7ab727a7ec184a086ad36ef83b948170">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[4/4]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a7ab727a7ec184a086ad36ef83b948170">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[4/5]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -383,6 +400,32 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a8dfc827b466be3c5e3def599277dfa43" name="a8dfc827b466be3c5e3def599277dfa43"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8dfc827b466be3c5e3def599277dfa43">&#9670;&nbsp;</a></span>xbDate() <span class="overload">[5/5]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xb::xbDate::xbDate </td>
+ <td>(</td>
+ <td class="paramtype">xbUInt16&#160;</td>
+ <td class="paramname"><em>iInit</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructor. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iInitOpt</td><td>- Constructor to use to initialize date static variables Called by the main xbXbase::xbXBase constructor </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
<a id="a05c9680c6eb9fe07ecf13a189b596c37" name="a05c9680c6eb9fe07ecf13a189b596c37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05c9680c6eb9fe07ecf13a189b596c37">&#9670;&nbsp;</a></span>~xbDate()</h2>
@@ -546,7 +589,7 @@ Static Protected Attributes</h2></td></tr>
</div><div class="memdoc">
<p>Get century for date. </p>
-<dl class="section return"><dt>Returns</dt><dd>This routine returns the century from the date. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>the century from the valid date. or 0 for a null date. </dd></dl>
</div>
</div>
@@ -962,7 +1005,6 @@ XB_NO_ERROR </dd></dl>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
</div>
</div>
@@ -1046,6 +1088,62 @@ XB_NO_ERROR </dd></dl>
</div>
</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
<a id="a5f8051c31b29244265e8f26ac3547b9b" name="a5f8051c31b29244265e8f26ac3547b9b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f8051c31b29244265e8f26ac3547b9b">&#9670;&nbsp;</a></span>IsLeapYear() <span class="overload">[1/2]</span></h2>
@@ -1095,6 +1193,27 @@ XB_NO_ERROR </dd></dl>
</div>
</div>
+<a id="a611a64b14ff89ad3c20b34081ea1e658" name="a611a64b14ff89ad3c20b34081ea1e658"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a611a64b14ff89ad3c20b34081ea1e658">&#9670;&nbsp;</a></span>IsNull()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> xb::xbDate::IsNull </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determine if date is null date. </p>
+<dl class="section return"><dt>Returns</dt><dd>xbTrue - If null date.<br />
+ xbFalse - Not a null date. </dd></dl>
+
+</div>
+</div>
<a id="a1ee3377d4ead9d31099eee539d9b13a7" name="a1ee3377d4ead9d31099eee539d9b13a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1ee3377d4ead9d31099eee539d9b13a7">&#9670;&nbsp;</a></span>JulianDays()</h2>
@@ -1227,7 +1346,7 @@ xbFalse - Dates match. </dd></dl>
</div><div class="memdoc">
<p>operator + </p>
-<p >This routine adds additional days to a date field. </p><dl class="params"><dt>Parameters</dt><dd>
+<p >This routine adds additional days to a valid date field. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lCount</td><td>- Number of days to add. </td></tr>
</table>
@@ -1254,7 +1373,7 @@ xbFalse - Dates match. </dd></dl>
</div><div class="memdoc">
<p>operator ++ </p>
-<p >This routine adds one day to the date field. </p>
+<p >This routine adds one day to the date field if the date is not null. </p>
</div>
</div>
@@ -1275,7 +1394,7 @@ xbFalse - Dates match. </dd></dl>
</div><div class="memdoc">
<p>operator += </p>
-<p >This routine adds lDays to the date </p><dl class="params"><dt>Parameters</dt><dd>
+<p >This routine adds lDays to the date if the date is not null. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lDays</td><td>- Number of days to add to the date. </td></tr>
</table>
@@ -1303,11 +1422,11 @@ xbFalse - Dates match. </dd></dl>
<p>operator - </p>
<p >This routine subtracts one date from another date returning the difference. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">dt</td><td>- Date to subtract. </td></tr>
+ <tr><td class="paramname">dt</td><td>- Date to subtract </td></tr>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd>Number of days </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>Number of days difference or zero if one of the dates is null. </dd></dl>
</div>
</div>
@@ -1328,7 +1447,7 @@ xbFalse - Dates match. </dd></dl>
</div><div class="memdoc">
<p>operator - </p>
-<p >This routine subtracts days from a date field. </p><dl class="params"><dt>Parameters</dt><dd>
+<p >This routine subtracts days from a valid date field. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lCount</td><td>- Number of days to subtract. </td></tr>
</table>
@@ -1355,7 +1474,7 @@ xbFalse - Dates match. </dd></dl>
</div><div class="memdoc">
<p>operator &ndash; </p>
-<p >This routine subtracts one day from the date field. </p>
+<p >This routine subtracts one day from the date field if the date is not null. </p>
</div>
</div>
@@ -1376,7 +1495,7 @@ xbFalse - Dates match. </dd></dl>
</div><div class="memdoc">
<p>operator -= </p>
-<p >This routine subtracts lDays from the date. </p><dl class="params"><dt>Parameters</dt><dd>
+<p >This routine subtracts lDays from the date if the date is not null. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lDays</td><td>- Number of days to subtract from the date. </td></tr>
</table>
@@ -1574,8 +1693,7 @@ xbFalse - Dates don't match. </dd></dl>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR<br />
-XB_INVALID_DATE </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_NO_ERROR </dd></dl>
</div>
</div>
@@ -1606,7 +1724,7 @@ XB_INVALID_DATE </dd></dl>
<p>Set the data directory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
</table>
</dd>
</dl>
@@ -1738,6 +1856,32 @@ XB_INVALID_DATE </dd></dl>
</div>
</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
@@ -1774,6 +1918,40 @@ XB_INVALID_DATE </dd></dl>
</div>
</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
<a id="ab43a5d8d929767c0ffdd722972bb8cc0" name="ab43a5d8d929767c0ffdd722972bb8cc0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab43a5d8d929767c0ffdd722972bb8cc0">&#9670;&nbsp;</a></span>Str()</h2>
@@ -1902,8 +2080,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.1.0/src/include/<a class="el" href="xbdate_8h_source.html">xbdate.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbdate_8cpp.html">xbdate.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbdate_8h_source.html">xbdate.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbdate_8cpp.html">xbdate.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbDbf.html b/docs/doxygen/html/classxb_1_1xbDbf.html
index 0546182..90318db 100644
--- a/docs/doxygen/html/classxb_1_1xbDbf.html
+++ b/docs/doxygen/html/classxb_1_1xbDbf.html
@@ -132,9 +132,9 @@ 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: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:a47643728f74cf3b6e0ffc55259895bdb"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb">DumpHeader</a> (xbInt16 iOption)</td></tr>
+<tr class="memdesc:a47643728f74cf3b6e0ffc55259895bdb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump dbf file header. <a href="classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb">More...</a><br /></td></tr>
+<tr class="separator:a47643728f74cf3b6e0ffc55259895bdb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba30399f15885a07f87f904c0d0656fa"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">DumpRecord</a> (xbUInt32 ulRecNo, xbInt16 iOutputDest=0, xbInt16 iOutputFmt=0)</td></tr>
<tr class="memdesc:aba30399f15885a07f87f904c0d0656fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dump record. <a href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">More...</a><br /></td></tr>
<tr class="separator:aba30399f15885a07f87f904c0d0656fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -191,9 +191,6 @@ 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>
@@ -234,9 +231,6 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:aacbc7bac3ea0c502ee75b838f4f0fcbf"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf">PutRecord</a> (xbUInt32 ulRecNo)</td></tr>
<tr class="memdesc:aacbc7bac3ea0c502ee75b838f4f0fcbf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write record to disk. <a href="classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf">More...</a><br /></td></tr>
<tr class="separator:aacbc7bac3ea0c502ee75b838f4f0fcbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a060541addb5bb1f0fe12959ed6f66fb9"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">ReadHeader</a> (xbInt16 iFilePositionOption, xbInt16 iReadOption)</td></tr>
-<tr class="memdesc:a060541addb5bb1f0fe12959ed6f66fb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read dbf file header information. <a href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">More...</a><br /></td></tr>
-<tr class="separator:a060541addb5bb1f0fe12959ed6f66fb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a94d7d626ba691fd4b740c034673e6fc6"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6">RecordDeleted</a> (xbInt16 iOpt=0) const</td></tr>
<tr class="memdesc:a94d7d626ba691fd4b740c034673e6fc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return record deletion status. <a href="classxb_1_1xbDbf.html#a94d7d626ba691fd4b740c034673e6fc6">More...</a><br /></td></tr>
<tr class="separator:a94d7d626ba691fd4b740c034673e6fc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -332,9 +326,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a56c8f924284bf88aabf90b7930b4eb47"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47">PutLongField</a> (xbInt16 iFieldNo, xbInt32 lFieldValue)</td></tr>
<tr class="memdesc:a56c8f924284bf88aabf90b7930b4eb47"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put long field for field number. <a href="classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47">More...</a><br /></td></tr>
<tr class="separator:a56c8f924284bf88aabf90b7930b4eb47"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae7aad223119edb3d541e9f65e88c9f2f"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae7aad223119edb3d541e9f65e88c9f2f">PutLongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbInt32 lFieldValue)</td></tr>
-<tr class="memdesc:ae7aad223119edb3d541e9f65e88c9f2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put long field for field name. <a href="classxb_1_1xbDbf.html#ae7aad223119edb3d541e9f65e88c9f2f">More...</a><br /></td></tr>
-<tr class="separator:ae7aad223119edb3d541e9f65e88c9f2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0692d1776a725c2f61d4c14677e9307c"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a0692d1776a725c2f61d4c14677e9307c">PutLongField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt32 lFieldValue)</td></tr>
+<tr class="memdesc:a0692d1776a725c2f61d4c14677e9307c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put long field for field name. <a href="classxb_1_1xbDbf.html#a0692d1776a725c2f61d4c14677e9307c">More...</a><br /></td></tr>
+<tr class="separator:a0692d1776a725c2f61d4c14677e9307c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67e3a050f9090edf69eee75aef7f5d83"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">GetULongField</a> (xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const</td></tr>
<tr class="memdesc:a67e3a050f9090edf69eee75aef7f5d83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get unsigned long field for field number. <a href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">More...</a><br /></td></tr>
<tr class="separator:a67e3a050f9090edf69eee75aef7f5d83"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -386,15 +380,15 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a571b36b3a940b1a16d5e834f329b33b9"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9">PutDateField</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, const <a class="el" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt)</td></tr>
<tr class="memdesc:a571b36b3a940b1a16d5e834f329b33b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Put date field for field name. <a href="classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9">More...</a><br /></td></tr>
<tr class="separator:a571b36b3a940b1a16d5e834f329b33b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a060acbfaa8d528f86cb59301814b414a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">SetHomeFolders</a> ()</td></tr>
-<tr class="memdesc:a060acbfaa8d528f86cb59301814b414a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create Home Folders. <a href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">More...</a><br /></td></tr>
-<tr class="separator:a060acbfaa8d528f86cb59301814b414a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut)</td></tr>
-<tr class="memdesc:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">More...</a><br /></td></tr>
-<tr class="separator:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption)</td></tr>
-<tr class="memdesc:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0">More...</a><br /></td></tr>
-<tr class="separator:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae9a3f726ce5229ed021bfce0515050fc"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#ae9a3f726ce5229ed021bfce0515050fc">GetNullSts</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull) const</td></tr>
+<tr class="memdesc:ae9a3f726ce5229ed021bfce0515050fc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field null status. <a href="classxb_1_1xbDbf.html#ae9a3f726ce5229ed021bfce0515050fc">More...</a><br /></td></tr>
+<tr class="separator:ae9a3f726ce5229ed021bfce0515050fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a909788123ce0694b65dfcf036380d918"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a909788123ce0694b65dfcf036380d918">GetNullSts</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull) const</td></tr>
+<tr class="memdesc:a909788123ce0694b65dfcf036380d918"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field null status. <a href="classxb_1_1xbDbf.html#a909788123ce0694b65dfcf036380d918">More...</a><br /></td></tr>
+<tr class="separator:a909788123ce0694b65dfcf036380d918"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7930fe8b930c6d646b7b0d3df576fe9e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e">GetNullSts</a> (xbInt16 iFieldNo, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull, xbInt16 iRecBufSw) const</td></tr>
+<tr class="memdesc:a7930fe8b930c6d646b7b0d3df576fe9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get field null status. <a href="classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e">More...</a><br /></td></tr>
+<tr class="separator:a7930fe8b930c6d646b7b0d3df576fe9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">GetDirectory</a> () const</td></tr>
<tr class="memdesc:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory name. <a href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">More...</a><br /></td></tr>
<tr class="separator:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -404,27 +398,63 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">GetFqFileName</a> () const</td></tr>
<tr class="memdesc:a31b4e641f93206ba23e2a5a27491dcd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the fully qualified file name. <a href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">More...</a><br /></td></tr>
<tr class="separator:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae78a85255488bc78964c16946dbaead3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">SetDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory)</td></tr>
-<tr class="memdesc:ae78a85255488bc78964c16946dbaead3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the directory. <a href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">More...</a><br /></td></tr>
-<tr class="separator:ae78a85255488bc78964c16946dbaead3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5419eb27e56822f828b2b88a9502a636"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">SetFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
-<tr class="memdesc:a5419eb27e56822f828b2b88a9502a636"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the filename. <a href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">More...</a><br /></td></tr>
-<tr class="separator:a5419eb27e56822f828b2b88a9502a636"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aee832fa11db2077a532f49e1329bd05a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">SetFqFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName)</td></tr>
-<tr class="memdesc:aee832fa11db2077a532f49e1329bd05a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the fully qualifed filename. <a href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">More...</a><br /></td></tr>
-<tr class="separator:aee832fa11db2077a532f49e1329bd05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad39797624a752b9d62533d00fad9feff"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption=0)</td></tr>
+<tr class="memdesc:ad39797624a752b9d62533d00fad9feff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">More...</a><br /></td></tr>
+<tr class="separator:ad39797624a752b9d62533d00fad9feff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">DetermineXbaseTableVersion</a> (unsigned char cFileTypeByte) const</td></tr>
+<tr class="memdesc:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine xbase dbf version. <a href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">More...</a><br /></td></tr>
+<tr class="separator:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">DetermineXbaseMemoVersion</a> (unsigned char cFileTypeByte) const</td></tr>
+<tr class="memdesc:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine which version the memo (dbt) file is. <a href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">More...</a><br /></td></tr>
+<tr class="separator:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">eGetDouble</a> (const char *p) const</td></tr>
+<tr class="memdesc:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable double value. <a href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">More...</a><br /></td></tr>
+<tr class="separator:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60b24a5afc984c586bf384c7e915ba0d"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">eGetInt32</a> (const char *p) const</td></tr>
+<tr class="memdesc:a60b24a5afc984c586bf384c7e915ba0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable long value. <a href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">More...</a><br /></td></tr>
+<tr class="separator:a60b24a5afc984c586bf384c7e915ba0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78f052529d39a18deaface5a0d47d0b0"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">eGetUInt32</a> (const char *p) const</td></tr>
+<tr class="memdesc:a78f052529d39a18deaface5a0d47d0b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned long value. <a href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">More...</a><br /></td></tr>
+<tr class="separator:a78f052529d39a18deaface5a0d47d0b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac40c991110ddc6fb30a72d90f4652762"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">eGetInt16</a> (const char *p) const</td></tr>
+<tr class="memdesc:ac40c991110ddc6fb30a72d90f4652762"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable short value. <a href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">More...</a><br /></td></tr>
+<tr class="separator:ac40c991110ddc6fb30a72d90f4652762"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a936ade458e6d5e6d29f9b5031888d189"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">eGetUInt16</a> (const char *p) const</td></tr>
+<tr class="memdesc:a936ade458e6d5e6d29f9b5031888d189"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned short value. <a href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">More...</a><br /></td></tr>
+<tr class="separator:a936ade458e6d5e6d29f9b5031888d189"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">ePutDouble</a> (char *p, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
+<tr class="memdesc:a98b6ff533ae93f90c977a2ba23eeb105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable double value to memory location. <a href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">More...</a><br /></td></tr>
+<tr class="separator:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">ePutInt32</a> (char *p, xbInt32 l)</td></tr>
+<tr class="memdesc:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable long value to memory location. <a href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">More...</a><br /></td></tr>
+<tr class="separator:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3f6ceae4b96f24875d86848bf13a173"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">ePutUInt32</a> (char *p, xbUInt32 ul)</td></tr>
+<tr class="memdesc:aa3f6ceae4b96f24875d86848bf13a173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned long value to memory location. <a href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">More...</a><br /></td></tr>
+<tr class="separator:aa3f6ceae4b96f24875d86848bf13a173"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29130f12739ac8fa837f4eaedf1338b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">ePutInt16</a> (char *p, xbInt16 s)</td></tr>
+<tr class="memdesc:a29130f12739ac8fa837f4eaedf1338b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable short value to memory location. <a href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">More...</a><br /></td></tr>
+<tr class="separator:a29130f12739ac8fa837f4eaedf1338b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">ePutUInt16</a> (char *p, xbUInt16 s)</td></tr>
+<tr class="memdesc:a65e9839f92b96eac7b0d071fac3bbe40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned short value to memory location. <a href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">More...</a><br /></td></tr>
+<tr class="separator:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78bd8a11dce102647095baf3aff2b006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">FileExists</a> () const</td></tr>
+<tr class="memdesc:a78bd8a11dce102647095baf3aff2b006"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">More...</a><br /></td></tr>
+<tr class="separator:a78bd8a11dce102647095baf3aff2b006"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">FileExists</a> (xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">More...</a><br /></td></tr>
+<tr class="separator:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName) const</td></tr>
+<tr class="memdesc:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">More...</a><br /></td></tr>
+<tr class="separator:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0592168f39a10f2a401a88ef781f6148"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a0592168f39a10f2a401a88ef781f6148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">More...</a><br /></td></tr>
+<tr class="separator:a0592168f39a10f2a401a88ef781f6148"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">FileIsOpen</a> () const</td></tr>
+<tr class="memdesc:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if file is open. <a href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">More...</a><br /></td></tr>
+<tr class="separator:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a638e14262410a1627819f016a16cdce2"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">GetBlockSize</a> () const</td></tr>
<tr class="memdesc:a638e14262410a1627819f016a16cdce2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the block size. <a href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">More...</a><br /></td></tr>
<tr class="separator:a638e14262410a1627819f016a16cdce2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a991c5676a6f38fa752435390989f413e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">SetBlockSize</a> (xbUInt32 ulBlockSize)</td></tr>
-<tr class="memdesc:a991c5676a6f38fa752435390989f413e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the block size. <a href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">More...</a><br /></td></tr>
-<tr class="separator:a991c5676a6f38fa752435390989f413e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">GetOpenMode</a> () const</td></tr>
-<tr class="memdesc:a3c500dc9dac22c49496e4b29386b2dd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the open mode of the file. <a href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">More...</a><br /></td></tr>
-<tr class="separator:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">GetShareMode</a> () const</td></tr>
-<tr class="memdesc:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the share mode of the file. <a href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">More...</a><br /></td></tr>
-<tr class="separator:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">GetFileDirPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
<tr class="memdesc:a60c53998e3d1b694134b20a87bc9bf5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">More...</a><br /></td></tr>
<tr class="separator:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -437,15 +467,27 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:ab289b6ffe955321160c1f90220c22e25"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">GetFileExtPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
<tr class="memdesc:ab289b6ffe955321160c1f90220c22e25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">More...</a><br /></td></tr>
<tr class="separator:ab289b6ffe955321160c1f90220c22e25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02df78f4c90313243f508fc56b95aba8"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">GetFileMtime</a> (time_t &amp;mtime)</td></tr>
+<tr class="memdesc:a02df78f4c90313243f508fc56b95aba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the time of last file modification timestamp as reported by the OS. <a href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">More...</a><br /></td></tr>
+<tr class="separator:a02df78f4c90313243f508fc56b95aba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">GetFileNamePart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
<tr class="memdesc:a81422b3dd52763d2cc6c77237ec9af0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">More...</a><br /></td></tr>
<tr class="separator:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6110763c5ae996b72c7a62c15bdecc73"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">GetFileNamePart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
<tr class="memdesc:a6110763c5ae996b72c7a62c15bdecc73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">More...</a><br /></td></tr>
<tr class="separator:a6110763c5ae996b72c7a62c15bdecc73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50b63c39e49d44e52078038027b24cc5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">GetFileSize</a> (xbUInt64 &amp;ullFileSize)</td></tr>
+<tr class="memdesc:a50b63c39e49d44e52078038027b24cc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of the file as reported by the OS. <a href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">More...</a><br /></td></tr>
+<tr class="separator:a50b63c39e49d44e52078038027b24cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5548236d38d43b89ae29b9a015b1f678"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">GetFileType</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType) const</td></tr>
<tr class="memdesc:a5548236d38d43b89ae29b9a015b1f678"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type aka Capitalized file extension. <a href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">More...</a><br /></td></tr>
<tr class="separator:a5548236d38d43b89ae29b9a015b1f678"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">GetOpenMode</a> () const</td></tr>
+<tr class="memdesc:a3c500dc9dac22c49496e4b29386b2dd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the open mode of the file. <a href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">More...</a><br /></td></tr>
+<tr class="separator:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">GetShareMode</a> () const</td></tr>
+<tr class="memdesc:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the share mode of the file. <a href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">More...</a><br /></td></tr>
+<tr class="separator:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf2e697751a0beff41432a66bb83fb5e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion)</td></tr>
<tr class="memdesc:aaf2e697751a0beff41432a66bb83fb5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">More...</a><br /></td></tr>
<tr class="separator:aaf2e697751a0beff41432a66bb83fb5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -455,72 +497,33 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a78aebdd21d3de46a450d5f835e3027f6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)</td></tr>
<tr class="memdesc:a78aebdd21d3de46a450d5f835e3027f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">More...</a><br /></td></tr>
<tr class="separator:a78aebdd21d3de46a450d5f835e3027f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">DetermineXbaseTableVersion</a> (unsigned char cFileTypeByte) const</td></tr>
-<tr class="memdesc:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine xbase dbf version. <a href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">More...</a><br /></td></tr>
-<tr class="separator:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">DetermineXbaseMemoVersion</a> (unsigned char cFileTypeByte) const</td></tr>
-<tr class="memdesc:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine which version the memo (dbt) file is. <a href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">More...</a><br /></td></tr>
-<tr class="separator:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78bd8a11dce102647095baf3aff2b006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">FileExists</a> () const</td></tr>
-<tr class="memdesc:a78bd8a11dce102647095baf3aff2b006"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">More...</a><br /></td></tr>
-<tr class="separator:a78bd8a11dce102647095baf3aff2b006"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">FileExists</a> (xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">More...</a><br /></td></tr>
-<tr class="separator:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName) const</td></tr>
-<tr class="memdesc:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">More...</a><br /></td></tr>
-<tr class="separator:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0592168f39a10f2a401a88ef781f6148"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a0592168f39a10f2a401a88ef781f6148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">More...</a><br /></td></tr>
-<tr class="separator:a0592168f39a10f2a401a88ef781f6148"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">FileIsOpen</a> () const</td></tr>
-<tr class="memdesc:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if file is open. <a href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">More...</a><br /></td></tr>
-<tr class="separator:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">NameSuffixMissing</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a361e3cc318bbf1c4d10f069e0800a24e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines status of file extension. <a href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">More...</a><br /></td></tr>
+<tr class="separator:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">ReadBlock</a> (xbUInt32 ulBlockNo, size_t readSize, void *buf)</td></tr>
<tr class="memdesc:aa1bb80340abc7a5c22f87f878e9dc825"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">More...</a><br /></td></tr>
<tr class="separator:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef696b1c4c0ef5338e818599f695d485"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">ReadBlock</a> (xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf)</td></tr>
<tr class="memdesc:aef696b1c4c0ef5338e818599f695d485"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">More...</a><br /></td></tr>
<tr class="separator:aef696b1c4c0ef5338e818599f695d485"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a991c5676a6f38fa752435390989f413e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">SetBlockSize</a> (xbUInt32 ulBlockSize)</td></tr>
+<tr class="memdesc:a991c5676a6f38fa752435390989f413e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the block size. <a href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">More...</a><br /></td></tr>
+<tr class="separator:a991c5676a6f38fa752435390989f413e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae78a85255488bc78964c16946dbaead3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">SetDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory)</td></tr>
+<tr class="memdesc:ae78a85255488bc78964c16946dbaead3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the directory. <a href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">More...</a><br /></td></tr>
+<tr class="separator:ae78a85255488bc78964c16946dbaead3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5419eb27e56822f828b2b88a9502a636"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">SetFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
+<tr class="memdesc:a5419eb27e56822f828b2b88a9502a636"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the filename. <a href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">More...</a><br /></td></tr>
+<tr class="separator:a5419eb27e56822f828b2b88a9502a636"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee832fa11db2077a532f49e1329bd05a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">SetFqFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName)</td></tr>
+<tr class="memdesc:aee832fa11db2077a532f49e1329bd05a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the fully qualifed filename. <a href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">More...</a><br /></td></tr>
+<tr class="separator:aee832fa11db2077a532f49e1329bd05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a060acbfaa8d528f86cb59301814b414a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">SetHomeFolders</a> ()</td></tr>
+<tr class="memdesc:a060acbfaa8d528f86cb59301814b414a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set Home Folders. <a href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">More...</a><br /></td></tr>
+<tr class="separator:a060acbfaa8d528f86cb59301814b414a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d871dcfecc2b4338f7a13722aab766c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">WriteBlock</a> (xbUInt32 ulBlockNo, size_t writeSize, void *buf)</td></tr>
<tr class="memdesc:a5d871dcfecc2b4338f7a13722aab766c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a block of data to file. <a href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">More...</a><br /></td></tr>
<tr class="separator:a5d871dcfecc2b4338f7a13722aab766c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a50b63c39e49d44e52078038027b24cc5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">GetFileSize</a> (xbUInt64 &amp;ullFileSize)</td></tr>
-<tr class="memdesc:a50b63c39e49d44e52078038027b24cc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of the file as reported by the OS. <a href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">More...</a><br /></td></tr>
-<tr class="separator:a50b63c39e49d44e52078038027b24cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a02df78f4c90313243f508fc56b95aba8"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">GetFileMtime</a> (time_t &amp;mtime)</td></tr>
-<tr class="memdesc:a02df78f4c90313243f508fc56b95aba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the time of last file modification timestamp as reported by the OS. <a href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">More...</a><br /></td></tr>
-<tr class="separator:a02df78f4c90313243f508fc56b95aba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">eGetDouble</a> (const char *p) const</td></tr>
-<tr class="memdesc:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable double value. <a href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">More...</a><br /></td></tr>
-<tr class="separator:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a60b24a5afc984c586bf384c7e915ba0d"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">eGetInt32</a> (const char *p) const</td></tr>
-<tr class="memdesc:a60b24a5afc984c586bf384c7e915ba0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable long value. <a href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">More...</a><br /></td></tr>
-<tr class="separator:a60b24a5afc984c586bf384c7e915ba0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78f052529d39a18deaface5a0d47d0b0"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">eGetUInt32</a> (const char *p) const</td></tr>
-<tr class="memdesc:a78f052529d39a18deaface5a0d47d0b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned long value. <a href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">More...</a><br /></td></tr>
-<tr class="separator:a78f052529d39a18deaface5a0d47d0b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac40c991110ddc6fb30a72d90f4652762"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">eGetInt16</a> (const char *p) const</td></tr>
-<tr class="memdesc:ac40c991110ddc6fb30a72d90f4652762"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable short value. <a href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">More...</a><br /></td></tr>
-<tr class="separator:ac40c991110ddc6fb30a72d90f4652762"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a936ade458e6d5e6d29f9b5031888d189"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">eGetUInt16</a> (const char *p) const</td></tr>
-<tr class="memdesc:a936ade458e6d5e6d29f9b5031888d189"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned short value. <a href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">More...</a><br /></td></tr>
-<tr class="separator:a936ade458e6d5e6d29f9b5031888d189"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">ePutDouble</a> (char *p, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
-<tr class="memdesc:a98b6ff533ae93f90c977a2ba23eeb105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable double value to memory location. <a href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">More...</a><br /></td></tr>
-<tr class="separator:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">ePutInt32</a> (char *p, xbInt32 l)</td></tr>
-<tr class="memdesc:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable long value to memory location. <a href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">More...</a><br /></td></tr>
-<tr class="separator:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3f6ceae4b96f24875d86848bf13a173"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">ePutUInt32</a> (char *p, xbUInt32 ul)</td></tr>
-<tr class="memdesc:aa3f6ceae4b96f24875d86848bf13a173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned long value to memory location. <a href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">More...</a><br /></td></tr>
-<tr class="separator:aa3f6ceae4b96f24875d86848bf13a173"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a29130f12739ac8fa837f4eaedf1338b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">ePutInt16</a> (char *p, xbInt16 s)</td></tr>
-<tr class="memdesc:a29130f12739ac8fa837f4eaedf1338b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable short value to memory location. <a href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">More...</a><br /></td></tr>
-<tr class="separator:a29130f12739ac8fa837f4eaedf1338b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">ePutUInt16</a> (char *p, xbUInt16 s)</td></tr>
-<tr class="memdesc:a65e9839f92b96eac7b0d071fac3bbe40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned short value to memory location. <a href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">More...</a><br /></td></tr>
-<tr class="separator:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">xbFclose</a> ()</td></tr>
<tr class="memdesc:a18830b5755d74818f60d9c7ce38ddf2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fclose. <a href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">More...</a><br /></td></tr>
<tr class="separator:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -536,6 +539,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a5ee229bda4d7d6695e122200e581e7a6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">xbFgetc</a> (char &amp;c)</td></tr>
<tr class="memdesc:a5ee229bda4d7d6695e122200e581e7a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">More...</a><br /></td></tr>
<tr class="separator:a5ee229bda4d7d6695e122200e581e7a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad245955ace26e5dde85fd4373b30d026"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xbFgets</a> (size_t lSize, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLine)</td></tr>
+<tr class="memdesc:ad245955ace26e5dde85fd4373b30d026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgets. <a href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">More...</a><br /></td></tr>
+<tr class="separator:ad245955ace26e5dde85fd4373b30d026"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> (xbInt16 iOpenMode)</td></tr>
<tr class="separator:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode)</td></tr>
@@ -559,21 +565,15 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">xbFread</a> (void *ptr, size_t size, size_t nmemb)</td></tr>
<tr class="memdesc:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fread. <a href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">More...</a><br /></td></tr>
<tr class="separator:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad245955ace26e5dde85fd4373b30d026"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xbFgets</a> (size_t lSize, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLine)</td></tr>
-<tr class="memdesc:ad245955ace26e5dde85fd4373b30d026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgets. <a href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">More...</a><br /></td></tr>
-<tr class="separator:ad245955ace26e5dde85fd4373b30d026"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xbFtell</a> ()</td></tr>
-<tr class="memdesc:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary ftell. <a href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">More...</a><br /></td></tr>
-<tr class="separator:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5337ab8918df240910c0d19b4f298e3d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">xbFseek</a> (xbInt64 llOffset, xbInt32 whence)</td></tr>
<tr class="memdesc:a5337ab8918df240910c0d19b4f298e3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fseek. <a href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">More...</a><br /></td></tr>
<tr class="separator:a5337ab8918df240910c0d19b4f298e3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xbFtell</a> ()</td></tr>
+<tr class="memdesc:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary ftell. <a href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">More...</a><br /></td></tr>
+<tr class="separator:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9891b792f585a696f38a5cf959e30918"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">xbFTurnOffFileBuffering</a> ()</td></tr>
<tr class="memdesc:a9891b792f585a696f38a5cf959e30918"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off file buffering. <a href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">More...</a><br /></td></tr>
<tr class="separator:a9891b792f585a696f38a5cf959e30918"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6aadd871d1782944703fed773d44b85f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xbFwrite</a> (const void *ptr, size_t lSize, size_t lNmemb)</td></tr>
-<tr class="memdesc:a6aadd871d1782944703fed773d44b85f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fwrite. <a href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">More...</a><br /></td></tr>
-<tr class="separator:a6aadd871d1782944703fed773d44b85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08463f506f425c2385acbe1a561506e9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">xbReadUntil</a> (const char cDelim, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOut)</td></tr>
<tr class="memdesc:a08463f506f425c2385acbe1a561506e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read file until a particular character is encountered on input stream. <a href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">More...</a><br /></td></tr>
<tr class="separator:a08463f506f425c2385acbe1a561506e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -592,12 +592,12 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a7996b6e084665c37c3892faea64b3505"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">xbRewind</a> ()</td></tr>
<tr class="memdesc:a7996b6e084665c37c3892faea64b3505"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for rewind. <a href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">More...</a><br /></td></tr>
<tr class="separator:a7996b6e084665c37c3892faea64b3505"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6aadd871d1782944703fed773d44b85f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xbFwrite</a> (const void *ptr, size_t lSize, size_t lNmemb)</td></tr>
+<tr class="memdesc:a6aadd871d1782944703fed773d44b85f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fwrite. <a href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">More...</a><br /></td></tr>
+<tr class="separator:a6aadd871d1782944703fed773d44b85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a518bfcbfa3699d883cf89affee383296"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">xbTruncate</a> (xbInt64 llSize)</td></tr>
<tr class="memdesc:a518bfcbfa3699d883cf89affee383296"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for ftruncate. <a href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">More...</a><br /></td></tr>
<tr class="separator:a518bfcbfa3699d883cf89affee383296"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">NameSuffixMissing</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a361e3cc318bbf1c4d10f069e0800a24e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines status of file extension. <a href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">More...</a><br /></td></tr>
-<tr class="separator:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -607,18 +607,30 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -632,15 +644,14 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -655,6 +666,9 @@ Static Public Attributes</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
+<tr class="memitem:a060541addb5bb1f0fe12959ed6f66fb9"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">ReadHeader</a> (xbInt16 iFilePositionOption, xbInt16 iReadOption)</td></tr>
+<tr class="memdesc:a060541addb5bb1f0fe12959ed6f66fb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read dbf file header information. <a href="classxb_1_1xbDbf.html#a060541addb5bb1f0fe12959ed6f66fb9">More...</a><br /></td></tr>
+<tr class="separator:a060541addb5bb1f0fe12959ed6f66fb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aabd146c0e1054ab905ec96aedd84b02e"><td class="memItemLeft" align="right" valign="top">virtual xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">GetRawField</a> (xbInt16 iFieldNo, char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw) const</td></tr>
<tr class="memdesc:aabd146c0e1054ab905ec96aedd84b02e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get raw field data for field number. <a href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">More...</a><br /></td></tr>
<tr class="separator:aabd146c0e1054ab905ec96aedd84b02e"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -1176,8 +1190,8 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
-<a id="aae9a2ddb0adb8165b4ac2b6a28a932f7" name="aae9a2ddb0adb8165b4ac2b6a28a932f7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aae9a2ddb0adb8165b4ac2b6a28a932f7">&#9670;&nbsp;</a></span>CreateUniqueFileName() <span class="overload">[1/2]</span></h2>
+<a id="ad39797624a752b9d62533d00fad9feff" name="ad39797624a752b9d62533d00fad9feff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad39797624a752b9d62533d00fad9feff">&#9670;&nbsp;</a></span>CreateUniqueFileName()</h2>
<div class="memitem">
<div class="memproto">
@@ -1201,7 +1215,13 @@ Static Protected Attributes</h2></td></tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqnOut</em>&#160;</td>
+ <td class="paramname"><em>sFqnOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
@@ -1226,57 +1246,8 @@ Static Protected Attributes</h2></td></tr>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ae5ffabde2c88ea58324f27e471f6bfc0" name="ae5ffabde2c88ea58324f27e471f6bfc0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae5ffabde2c88ea58324f27e471f6bfc0">&#9670;&nbsp;</a></span>CreateUniqueFileName() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
- <tr>
- <td class="mlabels-left">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::CreateUniqueFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDirIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExtIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqnOut</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
- </td>
- <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
- </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Create a unique file name. </p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a></dd></dl>
+<p>Create a unique file name.</p>
<p >Given a directory and file extension as inputs, create a unique file name.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
@@ -1545,8 +1516,8 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
-<a id="a309b5b1fb6a5c048c4bfb404d011ac55" name="a309b5b1fb6a5c048c4bfb404d011ac55"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a309b5b1fb6a5c048c4bfb404d011ac55">&#9670;&nbsp;</a></span>DumpHeader()</h2>
+<a id="a47643728f74cf3b6e0ffc55259895bdb" name="a47643728f74cf3b6e0ffc55259895bdb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47643728f74cf3b6e0ffc55259895bdb">&#9670;&nbsp;</a></span>DumpHeader()</h2>
<div class="memitem">
<div class="memproto">
@@ -1559,7 +1530,7 @@ Static Protected Attributes</h2></td></tr>
<td>(</td>
<td class="paramtype">xbInt16&#160;</td>
<td class="paramname"><em>iOption</em></td><td>)</td>
- <td> const</td>
+ <td></td>
</tr>
</table>
</td>
@@ -2856,7 +2827,7 @@ XB_INVALID_DATA </dd></dl>
</div><div class="memdoc">
<p>Return true if dbf file empty or positioned to the last record. </p>
-<dl class="section return"><dt>Returns</dt><dd>Returns true if dbf file is empty or positioned on the last record. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns true if error, dbf file is empty or positioned on the last record. </dd></dl>
</div>
</div>
@@ -4168,7 +4139,6 @@ XB_INVALID_DATA </dd></dl>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
</div>
</div>
@@ -4805,6 +4775,170 @@ XB_INVALID_DATA </dd></dl>
</div>
</div>
+<a id="a909788123ce0694b65dfcf036380d918" name="a909788123ce0694b65dfcf036380d918"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a909788123ce0694b65dfcf036380d918">&#9670;&nbsp;</a></span>GetNullSts() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetNullSts </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
+ <td class="paramname"><em>bIsNull</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field null status. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldName</td><td>Field Name of field to retrieve. </td></tr>
+ <tr><td class="paramname">bIsNull</td><td>Output field value. If field is all spaces on record buffer, returns true. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="ae9a3f726ce5229ed021bfce0515050fc" name="ae9a3f726ce5229ed021bfce0515050fc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae9a3f726ce5229ed021bfce0515050fc">&#9670;&nbsp;</a></span>GetNullSts() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetNullSts </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
+ <td class="paramname"><em>bIsNull</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field null status. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">bIsNull</td><td>Output field value. If field is all spaces on record buffer, returns true. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
+<a id="a7930fe8b930c6d646b7b0d3df576fe9e" name="a7930fe8b930c6d646b7b0d3df576fe9e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7930fe8b930c6d646b7b0d3df576fe9e">&#9670;&nbsp;</a></span>GetNullSts() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbDbf::GetNullSts </td>
+ <td>(</td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iFieldNo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;&#160;</td>
+ <td class="paramname"><em>bIsNull</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iRecBufSw</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get field null status. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">iFieldNo</td><td>Number of field to retrieve. </td></tr>
+ <tr><td class="paramname">bIsNull</td><td>Output field value. If field is all spaces on record buffer, returns true. </td></tr>
+ <tr><td class="paramname">iRecBufSw</td><td>0 - Record buffer with any updates.<br />
+1 - Record buffer with original data. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The field routines return one of:<br />
+ XB_NO_ERROR<br />
+XB_INVALID_DATA<br />
+XB_INVALID_FIELD_NO<br />
+XB_INVALID_FIELD_NAME<br />
+ XB_INVALID_FIELD_TYPE<br />
+XB_INVALID_DATA </dd></dl>
+
+</div>
+</div>
<a id="a3c500dc9dac22c49496e4b29386b2dd3" name="a3c500dc9dac22c49496e4b29386b2dd3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c500dc9dac22c49496e4b29386b2dd3">&#9670;&nbsp;</a></span>GetOpenMode()</h2>
@@ -4836,6 +4970,34 @@ XB_INVALID_DATA </dd></dl>
</div>
</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
<a id="ab3d248e5221b4f0809897cd43af17a1e" name="ab3d248e5221b4f0809897cd43af17a1e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3d248e5221b4f0809897cd43af17a1e">&#9670;&nbsp;</a></span>GetPrevRecord() <span class="overload">[1/2]</span></h2>
@@ -5066,6 +5228,8 @@ XB_INVALID_DATA </dd></dl>
</div><div class="memdoc">
<p>Get the current number of records in the dbf data file. </p>
+<dl class="section return"><dt>Returns</dt><dd>Record count or <a href="xbretcod_8h.html">Return Codes</a></dd></dl>
+<p>Get the current number of records in the dbf data file.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">ulRecCnt</td><td>Output number of records in file. </td></tr>
@@ -5076,8 +5240,8 @@ 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>
+<a id="ab50d76c6e29e81e347a6feb04c2f62bb" name="ab50d76c6e29e81e347a6feb04c2f62bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab50d76c6e29e81e347a6feb04c2f62bb">&#9670;&nbsp;</a></span>GetRecordLen()</h2>
<div class="memitem">
<div class="memproto">
@@ -5086,10 +5250,10 @@ XB_INVALID_DATA </dd></dl>
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">xbUInt32 xb::xbDbf::GetRecordCount </td>
+ <td class="memname">xbUInt16 xb::xbDbf::GetRecordLen </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
- <td></td>
+ <td> const</td>
</tr>
</table>
</td>
@@ -5099,13 +5263,13 @@ XB_INVALID_DATA </dd></dl>
</table>
</div><div class="memdoc">
-<p>Get the current number of records in the dbf data file. </p>
-<dl class="section return"><dt>Returns</dt><dd>Record count or <a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+<p>Get the dbf record length. </p>
+<dl class="section return"><dt>Returns</dt><dd>Record length. </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>
+<a id="a9b63e05b77f477ff6109ff7b9432c1b6" name="a9b63e05b77f477ff6109ff7b9432c1b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b63e05b77f477ff6109ff7b9432c1b6">&#9670;&nbsp;</a></span>GetShareMode()</h2>
<div class="memitem">
<div class="memproto">
@@ -5114,7 +5278,7 @@ XB_INVALID_DATA </dd></dl>
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">xbUInt16 xb::xbDbf::GetRecordLen </td>
+ <td class="memname">xbInt16 xb::xbFile::GetShareMode </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -5122,18 +5286,20 @@ XB_INVALID_DATA </dd></dl>
</table>
</td>
<td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
-<p>Get the dbf record length. </p>
-<dl class="section return"><dt>Returns</dt><dd>Record length. </dd></dl>
+<p>Get the share mode of the file. </p>
+<dl class="section return"><dt>Returns</dt><dd>XB_SINGLE_USER - (file buffering on&gt;<br />
+ XB_MULTI_USER - (file buffering off)<br />
+ </dd></dl>
</div>
</div>
-<a id="a9b63e05b77f477ff6109ff7b9432c1b6" name="a9b63e05b77f477ff6109ff7b9432c1b6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9b63e05b77f477ff6109ff7b9432c1b6">&#9670;&nbsp;</a></span>GetShareMode()</h2>
+<a id="a27758a325c097f204247908b65ba7fbd" name="a27758a325c097f204247908b65ba7fbd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a27758a325c097f204247908b65ba7fbd">&#9670;&nbsp;</a></span>GetTblAlias()</h2>
<div class="memitem">
<div class="memproto">
@@ -5142,7 +5308,7 @@ XB_INVALID_DATA </dd></dl>
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">xbInt16 xb::xbFile::GetShareMode </td>
+ <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbDbf::GetTblAlias </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -5150,20 +5316,18 @@ XB_INVALID_DATA </dd></dl>
</table>
</td>
<td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
-<p>Get the share mode of the file. </p>
-<dl class="section return"><dt>Returns</dt><dd>XB_SINGLE_USER - (file buffering on&gt;<br />
- XB_MULTI_USER - (file buffering off)<br />
- </dd></dl>
+<p>Get the table alias. </p>
+<p >This routine returns the table alias. </p><dl class="section return"><dt>Returns</dt><dd>Table alias </dd></dl>
</div>
</div>
-<a id="a27758a325c097f204247908b65ba7fbd" name="a27758a325c097f204247908b65ba7fbd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a27758a325c097f204247908b65ba7fbd">&#9670;&nbsp;</a></span>GetTblAlias()</h2>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
<div class="memitem">
<div class="memproto">
@@ -5172,7 +5336,7 @@ XB_INVALID_DATA </dd></dl>
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbDbf::GetTblAlias </td>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
@@ -5180,13 +5344,13 @@ XB_INVALID_DATA </dd></dl>
</table>
</td>
<td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
-<p>Get the table alias. </p>
-<p >This routine returns the table alias. </p><dl class="section return"><dt>Returns</dt><dd>Table alias </dd></dl>
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
</div>
</div>
@@ -6420,8 +6584,8 @@ XB_INVALID_DATA </dd></dl>
</div>
</div>
-<a id="ae7aad223119edb3d541e9f65e88c9f2f" name="ae7aad223119edb3d541e9f65e88c9f2f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae7aad223119edb3d541e9f65e88c9f2f">&#9670;&nbsp;</a></span>PutLongField() <span class="overload">[1/2]</span></h2>
+<a id="a0692d1776a725c2f61d4c14677e9307c" name="a0692d1776a725c2f61d4c14677e9307c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0692d1776a725c2f61d4c14677e9307c">&#9670;&nbsp;</a></span>PutLongField() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -6835,7 +6999,7 @@ XB_INVALID_DATA </dd></dl>
</table>
</td>
<td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">virtual</span></span> </td>
+<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -7008,7 +7172,7 @@ xbFalse - Record not deleted. </dd></dl>
<p>Set the data directory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
</table>
</dd>
</dl>
@@ -7243,8 +7407,8 @@ xbFalse - Record not deleted. </dd></dl>
</table>
</div><div class="memdoc">
-<p>Create Home Folders. </p>
-<p >Create xbase64 log and data folders in the home directory for current usre.</p>
+<p>Set Home Folders. </p>
+<p >Create xbase64 log, data and temp folders in the home directory for current usre.</p>
<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
</div>
@@ -7275,6 +7439,32 @@ xbFalse - Record not deleted. </dd></dl>
</div>
</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
@@ -7311,6 +7501,40 @@ xbFalse - Record not deleted. </dd></dl>
</div>
</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
<a id="a7e63e852418f337eb7c44de5dcd50323" name="a7e63e852418f337eb7c44de5dcd50323"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7e63e852418f337eb7c44de5dcd50323">&#9670;&nbsp;</a></span>SetVersion()</h2>
@@ -9109,9 +9333,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.1.0/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbdbf_8cpp.html">xbdbf.cpp</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbfields_8cpp.html">xbfields.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbdbf_8cpp.html">xbdbf.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbfields_8cpp.html">xbfields.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbFile.html b/docs/doxygen/html/classxb_1_1xbFile.html
index 885e969..4dc8b1c 100644
--- a/docs/doxygen/html/classxb_1_1xbFile.html
+++ b/docs/doxygen/html/classxb_1_1xbFile.html
@@ -100,15 +100,6 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a491f6c48076e89da2e791a42b2727a90"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90">~xbFile</a> ()</td></tr>
<tr class="memdesc:a491f6c48076e89da2e791a42b2727a90"><td class="mdescLeft">&#160;</td><td class="mdescRight">Class Destructor. <a href="classxb_1_1xbFile.html#a491f6c48076e89da2e791a42b2727a90">More...</a><br /></td></tr>
<tr class="separator:a491f6c48076e89da2e791a42b2727a90"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a060acbfaa8d528f86cb59301814b414a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">SetHomeFolders</a> ()</td></tr>
-<tr class="memdesc:a060acbfaa8d528f86cb59301814b414a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create Home Folders. <a href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">More...</a><br /></td></tr>
-<tr class="separator:a060acbfaa8d528f86cb59301814b414a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut)</td></tr>
-<tr class="memdesc:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">More...</a><br /></td></tr>
-<tr class="separator:aae9a2ddb0adb8165b4ac2b6a28a932f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption)</td></tr>
-<tr class="memdesc:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0">More...</a><br /></td></tr>
-<tr class="separator:ae5ffabde2c88ea58324f27e471f6bfc0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">GetDirectory</a> () const</td></tr>
<tr class="memdesc:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory name. <a href="classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e">More...</a><br /></td></tr>
<tr class="separator:acd0fb2166b2bff7e8a1cf65a7bc8be1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -118,27 +109,63 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">GetFqFileName</a> () const</td></tr>
<tr class="memdesc:a31b4e641f93206ba23e2a5a27491dcd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the fully qualified file name. <a href="classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4">More...</a><br /></td></tr>
<tr class="separator:a31b4e641f93206ba23e2a5a27491dcd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae78a85255488bc78964c16946dbaead3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">SetDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory)</td></tr>
-<tr class="memdesc:ae78a85255488bc78964c16946dbaead3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the directory. <a href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">More...</a><br /></td></tr>
-<tr class="separator:ae78a85255488bc78964c16946dbaead3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5419eb27e56822f828b2b88a9502a636"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">SetFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
-<tr class="memdesc:a5419eb27e56822f828b2b88a9502a636"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the filename. <a href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">More...</a><br /></td></tr>
-<tr class="separator:a5419eb27e56822f828b2b88a9502a636"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aee832fa11db2077a532f49e1329bd05a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">SetFqFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName)</td></tr>
-<tr class="memdesc:aee832fa11db2077a532f49e1329bd05a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the fully qualifed filename. <a href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">More...</a><br /></td></tr>
-<tr class="separator:aee832fa11db2077a532f49e1329bd05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad39797624a752b9d62533d00fad9feff"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">CreateUniqueFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption=0)</td></tr>
+<tr class="memdesc:ad39797624a752b9d62533d00fad9feff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a unique file name. <a href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">More...</a><br /></td></tr>
+<tr class="separator:ad39797624a752b9d62533d00fad9feff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">DetermineXbaseTableVersion</a> (unsigned char cFileTypeByte) const</td></tr>
+<tr class="memdesc:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine xbase dbf version. <a href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">More...</a><br /></td></tr>
+<tr class="separator:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">DetermineXbaseMemoVersion</a> (unsigned char cFileTypeByte) const</td></tr>
+<tr class="memdesc:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine which version the memo (dbt) file is. <a href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">More...</a><br /></td></tr>
+<tr class="separator:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">eGetDouble</a> (const char *p) const</td></tr>
+<tr class="memdesc:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable double value. <a href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">More...</a><br /></td></tr>
+<tr class="separator:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60b24a5afc984c586bf384c7e915ba0d"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">eGetInt32</a> (const char *p) const</td></tr>
+<tr class="memdesc:a60b24a5afc984c586bf384c7e915ba0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable long value. <a href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">More...</a><br /></td></tr>
+<tr class="separator:a60b24a5afc984c586bf384c7e915ba0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78f052529d39a18deaface5a0d47d0b0"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">eGetUInt32</a> (const char *p) const</td></tr>
+<tr class="memdesc:a78f052529d39a18deaface5a0d47d0b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned long value. <a href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">More...</a><br /></td></tr>
+<tr class="separator:a78f052529d39a18deaface5a0d47d0b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac40c991110ddc6fb30a72d90f4652762"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">eGetInt16</a> (const char *p) const</td></tr>
+<tr class="memdesc:ac40c991110ddc6fb30a72d90f4652762"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable short value. <a href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">More...</a><br /></td></tr>
+<tr class="separator:ac40c991110ddc6fb30a72d90f4652762"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a936ade458e6d5e6d29f9b5031888d189"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">eGetUInt16</a> (const char *p) const</td></tr>
+<tr class="memdesc:a936ade458e6d5e6d29f9b5031888d189"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned short value. <a href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">More...</a><br /></td></tr>
+<tr class="separator:a936ade458e6d5e6d29f9b5031888d189"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">ePutDouble</a> (char *p, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
+<tr class="memdesc:a98b6ff533ae93f90c977a2ba23eeb105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable double value to memory location. <a href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">More...</a><br /></td></tr>
+<tr class="separator:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">ePutInt32</a> (char *p, xbInt32 l)</td></tr>
+<tr class="memdesc:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable long value to memory location. <a href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">More...</a><br /></td></tr>
+<tr class="separator:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3f6ceae4b96f24875d86848bf13a173"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">ePutUInt32</a> (char *p, xbUInt32 ul)</td></tr>
+<tr class="memdesc:aa3f6ceae4b96f24875d86848bf13a173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned long value to memory location. <a href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">More...</a><br /></td></tr>
+<tr class="separator:aa3f6ceae4b96f24875d86848bf13a173"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29130f12739ac8fa837f4eaedf1338b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">ePutInt16</a> (char *p, xbInt16 s)</td></tr>
+<tr class="memdesc:a29130f12739ac8fa837f4eaedf1338b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable short value to memory location. <a href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">More...</a><br /></td></tr>
+<tr class="separator:a29130f12739ac8fa837f4eaedf1338b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">ePutUInt16</a> (char *p, xbUInt16 s)</td></tr>
+<tr class="memdesc:a65e9839f92b96eac7b0d071fac3bbe40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned short value to memory location. <a href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">More...</a><br /></td></tr>
+<tr class="separator:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78bd8a11dce102647095baf3aff2b006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">FileExists</a> () const</td></tr>
+<tr class="memdesc:a78bd8a11dce102647095baf3aff2b006"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">More...</a><br /></td></tr>
+<tr class="separator:a78bd8a11dce102647095baf3aff2b006"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">FileExists</a> (xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">More...</a><br /></td></tr>
+<tr class="separator:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName) const</td></tr>
+<tr class="memdesc:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">More...</a><br /></td></tr>
+<tr class="separator:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0592168f39a10f2a401a88ef781f6148"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a0592168f39a10f2a401a88ef781f6148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">More...</a><br /></td></tr>
+<tr class="separator:a0592168f39a10f2a401a88ef781f6148"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">FileIsOpen</a> () const</td></tr>
+<tr class="memdesc:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if file is open. <a href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">More...</a><br /></td></tr>
+<tr class="separator:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a638e14262410a1627819f016a16cdce2"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">GetBlockSize</a> () const</td></tr>
<tr class="memdesc:a638e14262410a1627819f016a16cdce2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the block size. <a href="classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2">More...</a><br /></td></tr>
<tr class="separator:a638e14262410a1627819f016a16cdce2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a991c5676a6f38fa752435390989f413e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">SetBlockSize</a> (xbUInt32 ulBlockSize)</td></tr>
-<tr class="memdesc:a991c5676a6f38fa752435390989f413e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the block size. <a href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">More...</a><br /></td></tr>
-<tr class="separator:a991c5676a6f38fa752435390989f413e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">GetOpenMode</a> () const</td></tr>
-<tr class="memdesc:a3c500dc9dac22c49496e4b29386b2dd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the open mode of the file. <a href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">More...</a><br /></td></tr>
-<tr class="separator:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">GetShareMode</a> () const</td></tr>
-<tr class="memdesc:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the share mode of the file. <a href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">More...</a><br /></td></tr>
-<tr class="separator:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">GetFileDirPart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut) const</td></tr>
<tr class="memdesc:a60c53998e3d1b694134b20a87bc9bf5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the directory part of the file name. <a href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">More...</a><br /></td></tr>
<tr class="separator:a60c53998e3d1b694134b20a87bc9bf5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -151,15 +178,27 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:ab289b6ffe955321160c1f90220c22e25"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">GetFileExtPart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut) const</td></tr>
<tr class="memdesc:ab289b6ffe955321160c1f90220c22e25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the extension part of the file name. <a href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">More...</a><br /></td></tr>
<tr class="separator:ab289b6ffe955321160c1f90220c22e25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02df78f4c90313243f508fc56b95aba8"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">GetFileMtime</a> (time_t &amp;mtime)</td></tr>
+<tr class="memdesc:a02df78f4c90313243f508fc56b95aba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the time of last file modification timestamp as reported by the OS. <a href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">More...</a><br /></td></tr>
+<tr class="separator:a02df78f4c90313243f508fc56b95aba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">GetFileNamePart</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
<tr class="memdesc:a81422b3dd52763d2cc6c77237ec9af0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">More...</a><br /></td></tr>
<tr class="separator:a81422b3dd52763d2cc6c77237ec9af0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6110763c5ae996b72c7a62c15bdecc73"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">GetFileNamePart</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut) const</td></tr>
<tr class="memdesc:a6110763c5ae996b72c7a62c15bdecc73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the name part of the file name. <a href="classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73">More...</a><br /></td></tr>
<tr class="separator:a6110763c5ae996b72c7a62c15bdecc73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a50b63c39e49d44e52078038027b24cc5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">GetFileSize</a> (xbUInt64 &amp;ullFileSize)</td></tr>
+<tr class="memdesc:a50b63c39e49d44e52078038027b24cc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of the file as reported by the OS. <a href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">More...</a><br /></td></tr>
+<tr class="separator:a50b63c39e49d44e52078038027b24cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5548236d38d43b89ae29b9a015b1f678"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">GetFileType</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType) const</td></tr>
<tr class="memdesc:a5548236d38d43b89ae29b9a015b1f678"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type aka Capitalized file extension. <a href="classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678">More...</a><br /></td></tr>
<tr class="separator:a5548236d38d43b89ae29b9a015b1f678"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">GetOpenMode</a> () const</td></tr>
+<tr class="memdesc:a3c500dc9dac22c49496e4b29386b2dd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the open mode of the file. <a href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">More...</a><br /></td></tr>
+<tr class="separator:a3c500dc9dac22c49496e4b29386b2dd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">GetShareMode</a> () const</td></tr>
+<tr class="memdesc:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the share mode of the file. <a href="classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6">More...</a><br /></td></tr>
+<tr class="separator:a9b63e05b77f477ff6109ff7b9432c1b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf2e697751a0beff41432a66bb83fb5e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion)</td></tr>
<tr class="memdesc:aaf2e697751a0beff41432a66bb83fb5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">More...</a><br /></td></tr>
<tr class="separator:aaf2e697751a0beff41432a66bb83fb5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -169,72 +208,33 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a78aebdd21d3de46a450d5f835e3027f6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">GetXbaseFileTypeByte</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)</td></tr>
<tr class="memdesc:a78aebdd21d3de46a450d5f835e3027f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the file type byte and version of the dbf file. <a href="classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6">More...</a><br /></td></tr>
<tr class="separator:a78aebdd21d3de46a450d5f835e3027f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">DetermineXbaseTableVersion</a> (unsigned char cFileTypeByte) const</td></tr>
-<tr class="memdesc:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine xbase dbf version. <a href="classxb_1_1xbFile.html#ae2b6ac26018dc28f77afbb3f008c3f66">More...</a><br /></td></tr>
-<tr class="separator:ae2b6ac26018dc28f77afbb3f008c3f66"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">DetermineXbaseMemoVersion</a> (unsigned char cFileTypeByte) const</td></tr>
-<tr class="memdesc:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine which version the memo (dbt) file is. <a href="classxb_1_1xbFile.html#a5a740033664c9ad2611c90e2a6d0c2d3">More...</a><br /></td></tr>
-<tr class="separator:a5a740033664c9ad2611c90e2a6d0c2d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78bd8a11dce102647095baf3aff2b006"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">FileExists</a> () const</td></tr>
-<tr class="memdesc:a78bd8a11dce102647095baf3aff2b006"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a78bd8a11dce102647095baf3aff2b006">More...</a><br /></td></tr>
-<tr class="separator:a78bd8a11dce102647095baf3aff2b006"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">FileExists</a> (xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a174d8a6aabc9cfcd32fedbd1e5b13ddd">More...</a><br /></td></tr>
-<tr class="separator:a174d8a6aabc9cfcd32fedbd1e5b13ddd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName) const</td></tr>
-<tr class="memdesc:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a61130b4fbf4cf9d5972dcb4993de2f94">More...</a><br /></td></tr>
-<tr class="separator:a61130b4fbf4cf9d5972dcb4993de2f94"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0592168f39a10f2a401a88ef781f6148"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">FileExists</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a0592168f39a10f2a401a88ef781f6148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if a file exists. <a href="classxb_1_1xbFile.html#a0592168f39a10f2a401a88ef781f6148">More...</a><br /></td></tr>
-<tr class="separator:a0592168f39a10f2a401a88ef781f6148"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">FileIsOpen</a> () const</td></tr>
-<tr class="memdesc:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if file is open. <a href="classxb_1_1xbFile.html#a7fa837938a32dc9ca3fbc81cbaf50f59">More...</a><br /></td></tr>
-<tr class="separator:a7fa837938a32dc9ca3fbc81cbaf50f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">NameSuffixMissing</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
+<tr class="memdesc:a361e3cc318bbf1c4d10f069e0800a24e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines status of file extension. <a href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">More...</a><br /></td></tr>
+<tr class="separator:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">ReadBlock</a> (xbUInt32 ulBlockNo, size_t readSize, void *buf)</td></tr>
<tr class="memdesc:aa1bb80340abc7a5c22f87f878e9dc825"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aa1bb80340abc7a5c22f87f878e9dc825">More...</a><br /></td></tr>
<tr class="separator:aa1bb80340abc7a5c22f87f878e9dc825"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef696b1c4c0ef5338e818599f695d485"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">ReadBlock</a> (xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf)</td></tr>
<tr class="memdesc:aef696b1c4c0ef5338e818599f695d485"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a block of data from file. <a href="classxb_1_1xbFile.html#aef696b1c4c0ef5338e818599f695d485">More...</a><br /></td></tr>
<tr class="separator:aef696b1c4c0ef5338e818599f695d485"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a991c5676a6f38fa752435390989f413e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">SetBlockSize</a> (xbUInt32 ulBlockSize)</td></tr>
+<tr class="memdesc:a991c5676a6f38fa752435390989f413e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the block size. <a href="classxb_1_1xbFile.html#a991c5676a6f38fa752435390989f413e">More...</a><br /></td></tr>
+<tr class="separator:a991c5676a6f38fa752435390989f413e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae78a85255488bc78964c16946dbaead3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">SetDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory)</td></tr>
+<tr class="memdesc:ae78a85255488bc78964c16946dbaead3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the directory. <a href="classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3">More...</a><br /></td></tr>
+<tr class="separator:ae78a85255488bc78964c16946dbaead3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5419eb27e56822f828b2b88a9502a636"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">SetFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName)</td></tr>
+<tr class="memdesc:a5419eb27e56822f828b2b88a9502a636"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the filename. <a href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">More...</a><br /></td></tr>
+<tr class="separator:a5419eb27e56822f828b2b88a9502a636"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee832fa11db2077a532f49e1329bd05a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">SetFqFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName)</td></tr>
+<tr class="memdesc:aee832fa11db2077a532f49e1329bd05a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the fully qualifed filename. <a href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">More...</a><br /></td></tr>
+<tr class="separator:aee832fa11db2077a532f49e1329bd05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a060acbfaa8d528f86cb59301814b414a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">SetHomeFolders</a> ()</td></tr>
+<tr class="memdesc:a060acbfaa8d528f86cb59301814b414a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set Home Folders. <a href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">More...</a><br /></td></tr>
+<tr class="separator:a060acbfaa8d528f86cb59301814b414a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d871dcfecc2b4338f7a13722aab766c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">WriteBlock</a> (xbUInt32 ulBlockNo, size_t writeSize, void *buf)</td></tr>
<tr class="memdesc:a5d871dcfecc2b4338f7a13722aab766c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a block of data to file. <a href="classxb_1_1xbFile.html#a5d871dcfecc2b4338f7a13722aab766c">More...</a><br /></td></tr>
<tr class="separator:a5d871dcfecc2b4338f7a13722aab766c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a50b63c39e49d44e52078038027b24cc5"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">GetFileSize</a> (xbUInt64 &amp;ullFileSize)</td></tr>
-<tr class="memdesc:a50b63c39e49d44e52078038027b24cc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the size of the file as reported by the OS. <a href="classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5">More...</a><br /></td></tr>
-<tr class="separator:a50b63c39e49d44e52078038027b24cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a02df78f4c90313243f508fc56b95aba8"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">GetFileMtime</a> (time_t &amp;mtime)</td></tr>
-<tr class="memdesc:a02df78f4c90313243f508fc56b95aba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the time of last file modification timestamp as reported by the OS. <a href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">More...</a><br /></td></tr>
-<tr class="separator:a02df78f4c90313243f508fc56b95aba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">eGetDouble</a> (const char *p) const</td></tr>
-<tr class="memdesc:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable double value. <a href="classxb_1_1xbFile.html#ab14e4a11427f5efb81cba1dd32bd1aa1">More...</a><br /></td></tr>
-<tr class="separator:ab14e4a11427f5efb81cba1dd32bd1aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a60b24a5afc984c586bf384c7e915ba0d"><td class="memItemLeft" align="right" valign="top">xbInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">eGetInt32</a> (const char *p) const</td></tr>
-<tr class="memdesc:a60b24a5afc984c586bf384c7e915ba0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable long value. <a href="classxb_1_1xbFile.html#a60b24a5afc984c586bf384c7e915ba0d">More...</a><br /></td></tr>
-<tr class="separator:a60b24a5afc984c586bf384c7e915ba0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a78f052529d39a18deaface5a0d47d0b0"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">eGetUInt32</a> (const char *p) const</td></tr>
-<tr class="memdesc:a78f052529d39a18deaface5a0d47d0b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned long value. <a href="classxb_1_1xbFile.html#a78f052529d39a18deaface5a0d47d0b0">More...</a><br /></td></tr>
-<tr class="separator:a78f052529d39a18deaface5a0d47d0b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac40c991110ddc6fb30a72d90f4652762"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">eGetInt16</a> (const char *p) const</td></tr>
-<tr class="memdesc:ac40c991110ddc6fb30a72d90f4652762"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable short value. <a href="classxb_1_1xbFile.html#ac40c991110ddc6fb30a72d90f4652762">More...</a><br /></td></tr>
-<tr class="separator:ac40c991110ddc6fb30a72d90f4652762"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a936ade458e6d5e6d29f9b5031888d189"><td class="memItemLeft" align="right" valign="top">xbUInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">eGetUInt16</a> (const char *p) const</td></tr>
-<tr class="memdesc:a936ade458e6d5e6d29f9b5031888d189"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a portable unsigned short value. <a href="classxb_1_1xbFile.html#a936ade458e6d5e6d29f9b5031888d189">More...</a><br /></td></tr>
-<tr class="separator:a936ade458e6d5e6d29f9b5031888d189"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">ePutDouble</a> (char *p, <a class="el" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d)</td></tr>
-<tr class="memdesc:a98b6ff533ae93f90c977a2ba23eeb105"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable double value to memory location. <a href="classxb_1_1xbFile.html#a98b6ff533ae93f90c977a2ba23eeb105">More...</a><br /></td></tr>
-<tr class="separator:a98b6ff533ae93f90c977a2ba23eeb105"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">ePutInt32</a> (char *p, xbInt32 l)</td></tr>
-<tr class="memdesc:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable long value to memory location. <a href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">More...</a><br /></td></tr>
-<tr class="separator:a19c37f76a2ccbb45019cb0fc373d3f46"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa3f6ceae4b96f24875d86848bf13a173"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">ePutUInt32</a> (char *p, xbUInt32 ul)</td></tr>
-<tr class="memdesc:aa3f6ceae4b96f24875d86848bf13a173"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned long value to memory location. <a href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">More...</a><br /></td></tr>
-<tr class="separator:aa3f6ceae4b96f24875d86848bf13a173"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a29130f12739ac8fa837f4eaedf1338b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">ePutInt16</a> (char *p, xbInt16 s)</td></tr>
-<tr class="memdesc:a29130f12739ac8fa837f4eaedf1338b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable short value to memory location. <a href="classxb_1_1xbFile.html#a29130f12739ac8fa837f4eaedf1338b2">More...</a><br /></td></tr>
-<tr class="separator:a29130f12739ac8fa837f4eaedf1338b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">ePutUInt16</a> (char *p, xbUInt16 s)</td></tr>
-<tr class="memdesc:a65e9839f92b96eac7b0d071fac3bbe40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a portable unsigned short value to memory location. <a href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">More...</a><br /></td></tr>
-<tr class="separator:a65e9839f92b96eac7b0d071fac3bbe40"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">xbFclose</a> ()</td></tr>
<tr class="memdesc:a18830b5755d74818f60d9c7ce38ddf2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fclose. <a href="classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d">More...</a><br /></td></tr>
<tr class="separator:a18830b5755d74818f60d9c7ce38ddf2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -250,6 +250,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a5ee229bda4d7d6695e122200e581e7a6"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">xbFgetc</a> (char &amp;c)</td></tr>
<tr class="memdesc:a5ee229bda4d7d6695e122200e581e7a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgetc. <a href="classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6">More...</a><br /></td></tr>
<tr class="separator:a5ee229bda4d7d6695e122200e581e7a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad245955ace26e5dde85fd4373b30d026"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xbFgets</a> (size_t lSize, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLine)</td></tr>
+<tr class="memdesc:ad245955ace26e5dde85fd4373b30d026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgets. <a href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">More...</a><br /></td></tr>
+<tr class="separator:ad245955ace26e5dde85fd4373b30d026"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> (xbInt16 iOpenMode)</td></tr>
<tr class="separator:a7cdfef5ede9ac98d44a28a6b7a70972c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0548cedf0f26b7d8ac221f75b0cd048c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c">xbFopen</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode)</td></tr>
@@ -273,21 +276,15 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">xbFread</a> (void *ptr, size_t size, size_t nmemb)</td></tr>
<tr class="memdesc:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fread. <a href="classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f">More...</a><br /></td></tr>
<tr class="separator:ab4f6afaa1f77539f27a4f05c26e54e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad245955ace26e5dde85fd4373b30d026"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">xbFgets</a> (size_t lSize, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLine)</td></tr>
-<tr class="memdesc:ad245955ace26e5dde85fd4373b30d026"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fgets. <a href="classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026">More...</a><br /></td></tr>
-<tr class="separator:ad245955ace26e5dde85fd4373b30d026"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xbFtell</a> ()</td></tr>
-<tr class="memdesc:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary ftell. <a href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">More...</a><br /></td></tr>
-<tr class="separator:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5337ab8918df240910c0d19b4f298e3d"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">xbFseek</a> (xbInt64 llOffset, xbInt32 whence)</td></tr>
<tr class="memdesc:a5337ab8918df240910c0d19b4f298e3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fseek. <a href="classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d">More...</a><br /></td></tr>
<tr class="separator:a5337ab8918df240910c0d19b4f298e3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">xbFtell</a> ()</td></tr>
+<tr class="memdesc:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary ftell. <a href="classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b">More...</a><br /></td></tr>
+<tr class="separator:a0e1c06aedfa7fbcb92e117f891edd13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9891b792f585a696f38a5cf959e30918"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">xbFTurnOffFileBuffering</a> ()</td></tr>
<tr class="memdesc:a9891b792f585a696f38a5cf959e30918"><td class="mdescLeft">&#160;</td><td class="mdescRight">Turn off file buffering. <a href="classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918">More...</a><br /></td></tr>
<tr class="separator:a9891b792f585a696f38a5cf959e30918"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6aadd871d1782944703fed773d44b85f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xbFwrite</a> (const void *ptr, size_t lSize, size_t lNmemb)</td></tr>
-<tr class="memdesc:a6aadd871d1782944703fed773d44b85f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fwrite. <a href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">More...</a><br /></td></tr>
-<tr class="separator:a6aadd871d1782944703fed773d44b85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08463f506f425c2385acbe1a561506e9"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">xbReadUntil</a> (const char cDelim, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sOut)</td></tr>
<tr class="memdesc:a08463f506f425c2385acbe1a561506e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read file until a particular character is encountered on input stream. <a href="classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9">More...</a><br /></td></tr>
<tr class="separator:a08463f506f425c2385acbe1a561506e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -306,12 +303,12 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a7996b6e084665c37c3892faea64b3505"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">xbRewind</a> ()</td></tr>
<tr class="memdesc:a7996b6e084665c37c3892faea64b3505"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for rewind. <a href="classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505">More...</a><br /></td></tr>
<tr class="separator:a7996b6e084665c37c3892faea64b3505"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6aadd871d1782944703fed773d44b85f"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">xbFwrite</a> (const void *ptr, size_t lSize, size_t lNmemb)</td></tr>
+<tr class="memdesc:a6aadd871d1782944703fed773d44b85f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for standard libary fwrite. <a href="classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f">More...</a><br /></td></tr>
+<tr class="separator:a6aadd871d1782944703fed773d44b85f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a518bfcbfa3699d883cf89affee383296"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">xbTruncate</a> (xbInt64 llSize)</td></tr>
<tr class="memdesc:a518bfcbfa3699d883cf89affee383296"><td class="mdescLeft">&#160;</td><td class="mdescRight">Xbase wrapper for ftruncate. <a href="classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296">More...</a><br /></td></tr>
<tr class="separator:a518bfcbfa3699d883cf89affee383296"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">NameSuffixMissing</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption) const</td></tr>
-<tr class="memdesc:a361e3cc318bbf1c4d10f069e0800a24e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines status of file extension. <a href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">More...</a><br /></td></tr>
-<tr class="separator:a361e3cc318bbf1c4d10f069e0800a24e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">DisplayError</a> (xbInt16 ErrorCode) const</td></tr>
<tr class="memdesc:a97dfa59ab9a8e9f17454da0faceb023d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Display error message on console for a given error number. <a href="classxb_1_1xbSsv.html#a97dfa59ab9a8e9f17454da0faceb023d">More...</a><br /></td></tr>
<tr class="separator:a97dfa59ab9a8e9f17454da0faceb023d"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -321,18 +318,30 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -346,15 +355,14 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -535,8 +543,8 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
-<a id="aae9a2ddb0adb8165b4ac2b6a28a932f7" name="aae9a2ddb0adb8165b4ac2b6a28a932f7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aae9a2ddb0adb8165b4ac2b6a28a932f7">&#9670;&nbsp;</a></span>CreateUniqueFileName() <span class="overload">[1/2]</span></h2>
+<a id="ad39797624a752b9d62533d00fad9feff" name="ad39797624a752b9d62533d00fad9feff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad39797624a752b9d62533d00fad9feff">&#9670;&nbsp;</a></span>CreateUniqueFileName()</h2>
<div class="memitem">
<div class="memproto">
@@ -557,7 +565,13 @@ Static Protected Attributes</h2></td></tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqnOut</em>&#160;</td>
+ <td class="paramname"><em>sFqnOut</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOption</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
@@ -577,49 +591,8 @@ Static Protected Attributes</h2></td></tr>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
-
-</div>
-</div>
-<a id="ae5ffabde2c88ea58324f27e471f6bfc0" name="ae5ffabde2c88ea58324f27e471f6bfc0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae5ffabde2c88ea58324f27e471f6bfc0">&#9670;&nbsp;</a></span>CreateUniqueFileName() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">xbInt16 xb::xbFile::CreateUniqueFileName </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sDirIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sExtIn</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sFqnOut</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">xbInt16&#160;</td>
- <td class="paramname"><em>iOption</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Create a unique file name. </p>
+<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a></dd></dl>
+<p>Create a unique file name.</p>
<p >Given a directory and file extension as inputs, create a unique file name.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
@@ -1759,7 +1732,6 @@ Static Protected Attributes</h2></td></tr>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
</div>
</div>
@@ -1866,6 +1838,34 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
<a id="a9b63e05b77f477ff6109ff7b9432c1b6" name="a9b63e05b77f477ff6109ff7b9432c1b6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9b63e05b77f477ff6109ff7b9432c1b6">&#9670;&nbsp;</a></span>GetShareMode()</h2>
@@ -1888,6 +1888,34 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
<a id="a7af337808919680b90710ad5e8a99232" name="a7af337808919680b90710ad5e8a99232"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7af337808919680b90710ad5e8a99232">&#9670;&nbsp;</a></span>GetXbaseFileTypeByte() <span class="overload">[1/3]</span></h2>
@@ -2209,7 +2237,7 @@ Static Protected Attributes</h2></td></tr>
<p>Set the data directory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
</table>
</dd>
</dl>
@@ -2412,8 +2440,8 @@ Static Protected Attributes</h2></td></tr>
</table>
</div><div class="memdoc">
-<p>Create Home Folders. </p>
-<p >Create xbase64 log and data folders in the home directory for current usre.</p>
+<p>Set Home Folders. </p>
+<p >Create xbase64 log, data and temp folders in the home directory for current usre.</p>
<dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
</div>
@@ -2444,6 +2472,32 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
@@ -2480,6 +2534,40 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
<a id="a5d871dcfecc2b4338f7a13722aab766c" name="a5d871dcfecc2b4338f7a13722aab766c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5d871dcfecc2b4338f7a13722aab766c">&#9670;&nbsp;</a></span>WriteBlock()</h2>
@@ -3420,8 +3508,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.1.0/src/include/<a class="el" href="xbfile_8h_source.html">xbfile.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbfile_8cpp.html">xbfile.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbfile_8h_source.html">xbfile.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbfile_8cpp.html">xbfile.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbSsv.html b/docs/doxygen/html/classxb_1_1xbSsv.html
index 96a07d8..b04c9b3 100644
--- a/docs/doxygen/html/classxb_1_1xbSsv.html
+++ b/docs/doxygen/html/classxb_1_1xbSsv.html
@@ -108,18 +108,30 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -133,15 +145,14 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -427,7 +438,6 @@ Static Protected Attributes</h2></td></tr>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
</div>
</div>
@@ -487,6 +497,46 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
<a id="a57caaaadfbd089d9a58ecfcb50c88a6c" name="a57caaaadfbd089d9a58ecfcb50c88a6c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57caaaadfbd089d9a58ecfcb50c88a6c">&#9670;&nbsp;</a></span>SetDataDirectory()</h2>
@@ -506,7 +556,7 @@ Static Protected Attributes</h2></td></tr>
<p>Set the data directory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
</table>
</dd>
</dl>
@@ -614,6 +664,24 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
@@ -642,6 +710,32 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
<h2 class="groupheader">Field Documentation</h2>
<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
@@ -710,8 +804,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.1.0/src/include/<a class="el" href="xbssv_8h_source.html">xbssv.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbssv_8cpp.html">xbssv.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbssv_8h_source.html">xbssv.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbssv_8cpp.html">xbssv.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbString.html b/docs/doxygen/html/classxb_1_1xbString.html
index 1cf60fe..f88a2fe 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: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:a430119df844bd80d67c23c48b045af30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a430119df844bd80d67c23c48b045af30">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 ulStartPos, xbUInt32 lCopyLen)</td></tr>
+<tr class="memdesc:a430119df844bd80d67c23c48b045af30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a430119df844bd80d67c23c48b045af30">More...</a><br /></td></tr>
+<tr class="separator:a430119df844bd80d67c23c48b045af30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97df314be5b3b2611be11ff50a19533d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a97df314be5b3b2611be11ff50a19533d">Assign</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 ulStartPos)</td></tr>
+<tr class="memdesc:a97df314be5b3b2611be11ff50a19533d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign portion of string. <a href="classxb_1_1xbString.html#a97df314be5b3b2611be11ff50a19533d">More...</a><br /></td></tr>
+<tr class="separator:a97df314be5b3b2611be11ff50a19533d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac7a8466b03c04df838bd182ef244f792"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">Copy</a> () const</td></tr>
<tr class="memdesc:ac7a8466b03c04df838bd182ef244f792"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy a string. <a href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">More...</a><br /></td></tr>
<tr class="separator:ac7a8466b03c04df838bd182ef244f792"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -219,6 +219,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:ae3ab18365e132323f8ae4c99eb72181c"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">CvtLongLong</a> (xbInt64 &amp;llOut)</td></tr>
<tr class="memdesc:ae3ab18365e132323f8ae4c99eb72181c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert string to xbInt64 number. <a href="classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c">More...</a><br /></td></tr>
<tr class="separator:ae3ab18365e132323f8ae4c99eb72181c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b33a8df49cdcb76033cbce5d8dc59d7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7">ExtractElement</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;s, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)</td></tr>
+<tr class="memdesc:a6b33a8df49cdcb76033cbce5d8dc59d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract an element out of a delimited string. <a href="classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7">More...</a><br /></td></tr>
+<tr class="separator:a6b33a8df49cdcb76033cbce5d8dc59d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a77195fc4957952625cb33bb503517a3e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">ExtractElement</a> (const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)</td></tr>
<tr class="memdesc:a77195fc4957952625cb33bb503517a3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extract an element out of a delimited string. <a href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">More...</a><br /></td></tr>
<tr class="separator:a77195fc4957952625cb33bb503517a3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -659,7 +662,8 @@ Friends</h2></td></tr>
<p>Append data to string. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">s</td><td>String data to append. </td></tr>
+ <tr><td class="paramname">s</td><td>String data to append. <br />
+ </td></tr>
<tr><td class="paramname">ulByteCount</td><td>Maximum number of bytes to append. </td></tr>
</table>
</dd>
@@ -778,8 +782,8 @@ Friends</h2></td></tr>
</div>
</div>
-<a id="a4f1d709d9f6c56959e8549157b4ee68c" name="a4f1d709d9f6c56959e8549157b4ee68c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4f1d709d9f6c56959e8549157b4ee68c">&#9670;&nbsp;</a></span>Assign() <span class="overload">[3/4]</span></h2>
+<a id="a97df314be5b3b2611be11ff50a19533d" name="a97df314be5b3b2611be11ff50a19533d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a97df314be5b3b2611be11ff50a19533d">&#9670;&nbsp;</a></span>Assign() <span class="overload">[3/4]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -816,8 +820,8 @@ Friends</h2></td></tr>
</div>
</div>
-<a id="ac6afd224dfbe439ce083c8dd1ad3246c" name="ac6afd224dfbe439ce083c8dd1ad3246c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac6afd224dfbe439ce083c8dd1ad3246c">&#9670;&nbsp;</a></span>Assign() <span class="overload">[4/4]</span></h2>
+<a id="a430119df844bd80d67c23c48b045af30" name="a430119df844bd80d67c23c48b045af30"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a430119df844bd80d67c23c48b045af30">&#9670;&nbsp;</a></span>Assign() <span class="overload">[4/4]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -1060,7 +1064,7 @@ Friends</h2></td></tr>
</div>
</div>
<a id="a77195fc4957952625cb33bb503517a3e" name="a77195fc4957952625cb33bb503517a3e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a77195fc4957952625cb33bb503517a3e">&#9670;&nbsp;</a></span>ExtractElement()</h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a77195fc4957952625cb33bb503517a3e">&#9670;&nbsp;</a></span>ExtractElement() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -1112,6 +1116,59 @@ Friends</h2></td></tr>
</div>
</div>
+<a id="a6b33a8df49cdcb76033cbce5d8dc59d7" name="a6b33a8df49cdcb76033cbce5d8dc59d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6b33a8df49cdcb76033cbce5d8dc59d7">&#9670;&nbsp;</a></span>ExtractElement() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbString::ExtractElement </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char&#160;</td>
+ <td class="paramname"><em>cDelim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbUInt32&#160;</td>
+ <td class="paramname"><em>lSkipCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xbInt16&#160;</td>
+ <td class="paramname"><em>iOpt</em> = <code>0</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extract an element out of a delimited string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sSrc</td><td>Source string. </td></tr>
+ <tr><td class="paramname">cDelim</td><td>Delimiter. </td></tr>
+ <tr><td class="paramname">lSkipCnt</td><td>Number of delimiters to skip. </td></tr>
+ <tr><td class="paramname">iOpt</td><td>0 - ignore single and double quotes.<br />
+ 1 - ignore delimiters between single or double quotes. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Reference to string extracted from element. </dd></dl>
+
+</div>
+</div>
<a id="a685187a5f8401b322fc61f3fbe56330d" name="a685187a5f8401b322fc61f3fbe56330d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a685187a5f8401b322fc61f3fbe56330d">&#9670;&nbsp;</a></span>GetCharacter()</h2>
@@ -1209,7 +1266,7 @@ Friends</h2></td></tr>
</div><div class="memdoc">
<p>Get the path separator out of the string. </p>
-<dl class="section return"><dt>Returns</dt><dd>Char value containing either / or \ depending on OS. </dd></dl>
+<p >This method assumes the string is a valid path name. If it is, it returns either / or . </p><dl class="section return"><dt>Returns</dt><dd>Char value containing either / or \ depending on OS. </dd></dl>
</div>
</div>
@@ -2876,8 +2933,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.1.0/src/include/<a class="el" href="xbstring_8h_source.html">xbstring.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbstring_8cpp.html">xbstring.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbstring_8h_source.html">xbstring.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbstring_8cpp.html">xbstring.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbTblMgr.html b/docs/doxygen/html/classxb_1_1xbTblMgr.html
index c94fe35..984ddf4 100644
--- a/docs/doxygen/html/classxb_1_1xbTblMgr.html
+++ b/docs/doxygen/html/classxb_1_1xbTblMgr.html
@@ -121,18 +121,30 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -146,15 +158,14 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -646,7 +657,6 @@ Static Protected Attributes</h2></td></tr>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
</div>
</div>
@@ -747,6 +757,34 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
<a id="acbf148ddba4297021cfb980a161ebef9" name="acbf148ddba4297021cfb980a161ebef9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acbf148ddba4297021cfb980a161ebef9">&#9670;&nbsp;</a></span>GetTblListEntry()</h2>
@@ -765,6 +803,34 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
<a id="ac8eaef41acf08911b90f900aac8e70af" name="ac8eaef41acf08911b90f900aac8e70af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8eaef41acf08911b90f900aac8e70af">&#9670;&nbsp;</a></span>RemoveTblFromTblList() <span class="overload">[1/2]</span></h2>
@@ -828,7 +894,7 @@ Static Protected Attributes</h2></td></tr>
<p>Set the data directory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
</table>
</dd>
</dl>
@@ -960,6 +1026,32 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sLogFileName</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
<a id="aba6e59512f7172dd55dcf92059e5928c" name="aba6e59512f7172dd55dcf92059e5928c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba6e59512f7172dd55dcf92059e5928c">&#9670;&nbsp;</a></span>SetMultiUser()</h2>
@@ -996,6 +1088,40 @@ Static Protected Attributes</h2></td></tr>
</div>
</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
<h2 class="groupheader">Field Documentation</h2>
<a id="a6219f1b5e24ea12fe158cd5aea56988e" name="a6219f1b5e24ea12fe158cd5aea56988e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6219f1b5e24ea12fe158cd5aea56988e">&#9670;&nbsp;</a></span>ErrorCodeText</h2>
@@ -1064,8 +1190,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.1.0/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbtblmgr_8cpp.html">xbtblmgr.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbtblmgr_8cpp.html">xbtblmgr.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/classxb_1_1xbXBase.html b/docs/doxygen/html/classxb_1_1xbXBase.html
index 5d4767f..246fcaa 100644
--- a/docs/doxygen/html/classxb_1_1xbXBase.html
+++ b/docs/doxygen/html/classxb_1_1xbXBase.html
@@ -104,16 +104,15 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:afccb552ca0daff779c0500ff20d22c2b"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">CloseAllTables</a> ()</td></tr>
<tr class="memdesc:afccb552ca0daff779c0500ff20d22c2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Close all tables / files. <a href="classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b">More...</a><br /></td></tr>
<tr class="separator:afccb552ca0daff779c0500ff20d22c2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa41240d920b604dcbd91dce7eecb78e1"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1">CreateFqn</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sNameIn, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sFqfnOut)</td></tr>
+<tr class="memdesc:aa41240d920b604dcbd91dce7eecb78e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fully qualified file name from a directory, filename and extension. <a href="classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1">More...</a><br /></td></tr>
+<tr class="separator:aa41240d920b604dcbd91dce7eecb78e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae357fac4fdebdf49e46563cf611caf65"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ae357fac4fdebdf49e46563cf611caf65">DisableMsgLogging</a> ()</td></tr>
<tr class="separator:ae357fac4fdebdf49e46563cf611caf65"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a470e6eb0ed0be60338f9b40976d3ad48"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a470e6eb0ed0be60338f9b40976d3ad48">EnableMsgLogging</a> ()</td></tr>
<tr class="separator:a470e6eb0ed0be60338f9b40976d3ad48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5a5ecaed9777978344902446c9ae3b8e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a5a5ecaed9777978344902446c9ae3b8e">FlushLog</a> ()</td></tr>
<tr class="separator:a5a5ecaed9777978344902446c9ae3b8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a51d49b4d699740194b28c6ec0d0ee07b"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b">GetLogDirectory</a> () const</td></tr>
-<tr class="separator:a51d49b4d699740194b28c6ec0d0ee07b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac0744edf9e4aa959d8cf2daa874376af"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af">GetLogFileName</a> () const</td></tr>
-<tr class="separator:ac0744edf9e4aa959d8cf2daa874376af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5d63cd7d9137eba8a1d4d9c3df522b7"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7">GetLogFqFileName</a> () const</td></tr>
<tr class="separator:ab5d63cd7d9137eba8a1d4d9c3df522b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade34cd72c2a7e70fb55429a8a6f6c028"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028">GetLogStatus</a> () const</td></tr>
@@ -128,12 +127,10 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:ab35cec5ac8f0fa95f10653ca7ac817f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbDbf.html">xbDbf</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#ab35cec5ac8f0fa95f10653ca7ac817f6">Open</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &amp;iRc)</td></tr>
<tr class="memdesc:ab35cec5ac8f0fa95f10653ca7ac817f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Open highest qualified class available for dbf file. <a href="classxb_1_1xbXBase.html#ab35cec5ac8f0fa95f10653ca7ac817f6">More...</a><br /></td></tr>
<tr class="separator:ab35cec5ac8f0fa95f10653ca7ac817f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a48d82dbe298c6f4cf68a63ac82dd8292"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileDirectory)</td></tr>
-<tr class="separator:a48d82dbe298c6f4cf68a63ac82dd8292"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a94010b88a309315ef980715eb581336c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
-<tr class="separator:a94010b88a309315ef980715eb581336c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a666a0cb5b76ec7a9a3677d339e0c6b42"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42">SetLogSize</a> (size_t lSize)</td></tr>
<tr class="separator:a666a0cb5b76ec7a9a3677d339e0c6b42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aedb4c2aa2c90e4529915198a2305b355"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">GetLogSize</a> () const</td></tr>
+<tr class="separator:aedb4c2aa2c90e4529915198a2305b355"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ca5be73abffd0fdd18bdc799877272a"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a9ca5be73abffd0fdd18bdc799877272a">WriteLogMessage</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogMessage, xbInt16 iOutputOpt=0)</td></tr>
<tr class="separator:a9ca5be73abffd0fdd18bdc799877272a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0dff00b9ee3c288841e137ca01168116"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbXBase.html#a0dff00b9ee3c288841e137ca01168116">WriteLogBytes</a> (xbUInt32 lCnt, const char *p)</td></tr>
@@ -174,18 +171,30 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">GetDataDirectory</a> () const</td></tr>
<tr class="memdesc:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current data directory. <a href="classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9">More...</a><br /></td></tr>
<tr class="separator:a1d803a4bfc8ba0561267a0bf9e51f7d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfaeef85935331073d213465bb362a61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">GetTempDirectory</a> () const</td></tr>
+<tr class="memdesc:abfaeef85935331073d213465bb362a61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current temp directory. <a href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">More...</a><br /></td></tr>
+<tr class="separator:abfaeef85935331073d213465bb362a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
+<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
+<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49cd162f066eef2b829ba7c9f6620243"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">GetEndianType</a> () const</td></tr>
<tr class="memdesc:a49cd162f066eef2b829ba7c9f6620243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Endian type. <a href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">More...</a><br /></td></tr>
<tr class="separator:a49cd162f066eef2b829ba7c9f6620243"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56961d2a67b8e7470098626ac4dac7e4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">GetErrorMessage</a> (xbInt16 ErrorCode) const</td></tr>
<tr class="memdesc:a56961d2a67b8e7470098626ac4dac7e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an error message. <a href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">More...</a><br /></td></tr>
<tr class="separator:a56961d2a67b8e7470098626ac4dac7e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63cee13b473ee13970e93b11837b9e35"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">GetPathSeparator</a> () const</td></tr>
+<tr class="memdesc:a63cee13b473ee13970e93b11837b9e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the OS dependent path separator. <a href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">More...</a><br /></td></tr>
+<tr class="separator:a63cee13b473ee13970e93b11837b9e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">SetDataDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory)</td></tr>
<tr class="memdesc:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the data directory. <a href="classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c">More...</a><br /></td></tr>
<tr class="separator:a57caaaadfbd089d9a58ecfcb50c88a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f74db23f8902846d581935c7db73f9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">SetDefaultDateFormat</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat)</td></tr>
<tr class="memdesc:a5f74db23f8902846d581935c7db73f9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default date format. <a href="classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c">More...</a><br /></td></tr>
<tr class="separator:a5f74db23f8902846d581935c7db73f9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">SetTempDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory)</td></tr>
+<tr class="memdesc:a17c229a20ef9ab4034df8f9cd657adb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the temp directory. <a href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">More...</a><br /></td></tr>
+<tr class="separator:a17c229a20ef9ab4034df8f9cd657adb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62e4fd0a5888665c76bbbad962794e72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">BitSet</a> (unsigned char c, xbInt16 iBitNo) const</td></tr>
<tr class="memdesc:a62e4fd0a5888665c76bbbad962794e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check a bit in a one byte field and see if it is set. <a href="classxb_1_1xbSsv.html#a62e4fd0a5888665c76bbbad962794e72">More...</a><br /></td></tr>
<tr class="separator:a62e4fd0a5888665c76bbbad962794e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -199,9 +208,14 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">SetDefaultAutoCommit</a> (<a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit)</td></tr>
<tr class="memdesc:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the default auto commit. <a href="classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd">More...</a><br /></td></tr>
<tr class="separator:a25542afadaaf39b4fb5a1772a29cc0bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">GetHomeDir</a> (<a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut)</td></tr>
-<tr class="memdesc:abc9c06c95d71fbad8294e1ae8862cea9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get home directory. <a href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">More...</a><br /></td></tr>
-<tr class="separator:abc9c06c95d71fbad8294e1ae8862cea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4822315bded3969b59aeeb683c373051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">GetLogDirectory</a> () const</td></tr>
+<tr class="separator:a4822315bded3969b59aeeb683c373051"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afaef09435be73b3111f5edbd7091d861"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">GetLogFileName</a> () const</td></tr>
+<tr class="separator:afaef09435be73b3111f5edbd7091d861"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b992ed97281bf25b5b66f5df686225e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">SetLogDirectory</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory)</td></tr>
+<tr class="separator:a7b992ed97281bf25b5b66f5df686225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f05738e7dfd759e89990242ef503544"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">SetLogFileName</a> (const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName)</td></tr>
+<tr class="separator:a7f05738e7dfd759e89990242ef503544"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">GetMultiUser</a> () const</td></tr>
<tr class="memdesc:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multi user setting. <a href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">More...</a><br /></td></tr>
<tr class="separator:abd58031c5f1c3766c24d47a82e6fd9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -478,7 +492,60 @@ Friends</h2></td></tr>
</div><div class="memdoc">
<p>Close all tables / files. </p>
-<p >This closes everything. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+<p >This closes everything and deletes references to the associated <a class="el" href="classxb_1_1xbDbf.html" title="Base class for handling dbf files/tables.">xbDbf</a> objects. </p><dl class="section return"><dt>Returns</dt><dd><a href="xbretcod_8h.html">Return Codes</a> </dd></dl>
+
+</div>
+</div>
+<a id="aa41240d920b604dcbd91dce7eecb78e1" name="aa41240d920b604dcbd91dce7eecb78e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa41240d920b604dcbd91dce7eecb78e1">&#9670;&nbsp;</a></span>CreateFqn()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 xb::xbXBase::CreateFqn </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sDirIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sNameIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sExtIn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sFqnOut</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Fully qualified file name from a directory, filename and extension. </p>
+<p >Given a directory, file name and file extension as inputs, create a fully qualified file name.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sDirIn</td><td>Directory </td></tr>
+ <tr><td class="paramname">sFileIn</td><td>File Name </td></tr>
+ <tr><td class="paramname">sExtIn</td><td>File Extension </td></tr>
+ <tr><td class="paramname">sFqnOut</td><td>A fully qualifed unique file name as output </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>XB_INVALIED_PARAMETER or XB_NO_ERROR </dd></dl>
</div>
</div>
@@ -980,40 +1047,55 @@ Friends</h2></td></tr>
</table>
</dd>
</dl>
-<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
</div>
</div>
-<a id="a51d49b4d699740194b28c6ec0d0ee07b" name="a51d49b4d699740194b28c6ec0d0ee07b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a51d49b4d699740194b28c6ec0d0ee07b">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
+<a id="a4822315bded3969b59aeeb683c373051" name="a4822315bded3969b59aeeb683c373051"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4822315bded3969b59aeeb683c373051">&#9670;&nbsp;</a></span>GetLogDirectory()</h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbXBase::GetLogDirectory </td>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogDirectory </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
</div>
</div>
-<a id="ac0744edf9e4aa959d8cf2daa874376af" name="ac0744edf9e4aa959d8cf2daa874376af"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac0744edf9e4aa959d8cf2daa874376af">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
+<a id="afaef09435be73b3111f5edbd7091d861" name="afaef09435be73b3111f5edbd7091d861"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afaef09435be73b3111f5edbd7091d861">&#9670;&nbsp;</a></span>GetLogFileName()</h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbXBase::GetLogFileName </td>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetLogFileName </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
</div>
@@ -1035,6 +1117,23 @@ Friends</h2></td></tr>
</div>
</div>
+<a id="aedb4c2aa2c90e4529915198a2305b355" name="aedb4c2aa2c90e4529915198a2305b355"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aedb4c2aa2c90e4529915198a2305b355">&#9670;&nbsp;</a></span>GetLogSize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">size_t xb::xbXBase::GetLogSize </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
<a id="ade34cd72c2a7e70fb55429a8a6f6c028" name="ade34cd72c2a7e70fb55429a8a6f6c028"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ade34cd72c2a7e70fb55429a8a6f6c028">&#9670;&nbsp;</a></span>GetLogStatus()</h2>
@@ -1107,6 +1206,34 @@ Friends</h2></td></tr>
</div>
</div>
+<a id="a63cee13b473ee13970e93b11837b9e35" name="a63cee13b473ee13970e93b11837b9e35"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63cee13b473ee13970e93b11837b9e35">&#9670;&nbsp;</a></span>GetPathSeparator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">char xb::xbSsv::GetPathSeparator </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OS dependent path separator. </p>
+<dl class="section return"><dt>Returns</dt><dd>Returns '\' for windows environment, otherwise returns '/'. </dd></dl>
+
+</div>
+</div>
<a id="acbf148ddba4297021cfb980a161ebef9" name="acbf148ddba4297021cfb980a161ebef9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acbf148ddba4297021cfb980a161ebef9">&#9670;&nbsp;</a></span>GetTblListEntry()</h2>
@@ -1133,6 +1260,34 @@ Friends</h2></td></tr>
</div>
</div>
+<a id="abfaeef85935331073d213465bb362a61" name="abfaeef85935331073d213465bb362a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfaeef85935331073d213465bb362a61">&#9670;&nbsp;</a></span>GetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp; xb::xbSsv::GetTempDirectory </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the current temp directory. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classxb_1_1xbString.html" title="Class for handling string data.">xbString</a> containing the current data directory where the database files are stored. </dd></dl>
+
+</div>
+</div>
<a id="ab35cec5ac8f0fa95f10653ca7ac817f6" name="ab35cec5ac8f0fa95f10653ca7ac817f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab35cec5ac8f0fa95f10653ca7ac817f6">&#9670;&nbsp;</a></span>Open() <span class="overload">[1/2]</span></h2>
@@ -1384,7 +1539,7 @@ Friends</h2></td></tr>
<p>Set the data directory. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramname">sDataDirectory</td><td>Set the data direcroty. </td></tr>
+ <tr><td class="paramname">sDataDirectory</td><td>Set the data directory. </td></tr>
</table>
</dd>
</dl>
@@ -1490,38 +1645,54 @@ Friends</h2></td></tr>
</div>
</div>
-<a id="a48d82dbe298c6f4cf68a63ac82dd8292" name="a48d82dbe298c6f4cf68a63ac82dd8292"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a48d82dbe298c6f4cf68a63ac82dd8292">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
+<a id="a7b992ed97281bf25b5b66f5df686225e" name="a7b992ed97281bf25b5b66f5df686225e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b992ed97281bf25b5b66f5df686225e">&#9670;&nbsp;</a></span>SetLogDirectory()</h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">void xb::xbXBase::SetLogDirectory </td>
+ <td class="memname">void xb::xbSsv::SetLogDirectory </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sLogFileDirectory</em></td><td>)</td>
+ <td class="paramname"><em>sLogDirectory</em></td><td>)</td>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
</div>
</div>
-<a id="a94010b88a309315ef980715eb581336c" name="a94010b88a309315ef980715eb581336c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a94010b88a309315ef980715eb581336c">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
+<a id="a7f05738e7dfd759e89990242ef503544" name="a7f05738e7dfd759e89990242ef503544"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f05738e7dfd759e89990242ef503544">&#9670;&nbsp;</a></span>SetLogFileName()</h2>
<div class="memitem">
<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">void xb::xbXBase::SetLogFileName </td>
+ <td class="memname">void xb::xbSsv::SetLogFileName </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
<td class="paramname"><em>sLogFileName</em></td><td>)</td>
<td></td>
</tr>
</table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
</div><div class="memdoc">
</div>
@@ -1580,6 +1751,40 @@ Friends</h2></td></tr>
</div>
</div>
+<a id="a17c229a20ef9ab4034df8f9cd657adb2" name="a17c229a20ef9ab4034df8f9cd657adb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a17c229a20ef9ab4034df8f9cd657adb2">&#9670;&nbsp;</a></span>SetTempDirectory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void xb::xbSsv::SetTempDirectory </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
+ <td class="paramname"><em>sTempDirectory</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Set the temp directory. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">sTempDirectory</td><td>Set the data direcroty. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
<a id="a0dff00b9ee3c288841e137ca01168116" name="a0dff00b9ee3c288841e137ca01168116"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0dff00b9ee3c288841e137ca01168116">&#9670;&nbsp;</a></span>WriteLogBytes()</h2>
@@ -1830,8 +2035,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.1.0/src/include/<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a></li>
-<li>/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/<a class="el" href="xbxbase_8cpp.html">xbxbase.cpp</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbxbase_8h_source.html">xbxbase.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/core/<a class="el" href="xbxbase_8cpp.html">xbxbase.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html b/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
index 48adaeb..3539ada 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.1.0/src/sql Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -75,12 +75,10 @@ $(function() {
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="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sql_2xbcrix_8cpp.html">xbcrix.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbcrtbl_8cpp.html">xbcrtbl.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbcrtbl_8save_8cpp.html">xbcrtbl.save.cpp</a></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdelete_8cpp.html">xbdelete.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdrpix_8cpp.html">xbdrpix.cpp</a></td></tr>
diff --git a/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html b/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
index 0a07b74..be0a5a7 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.1.0/src/utils Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -87,6 +87,8 @@ 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__execsql_8cpp.html">xb_execsql.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__import_8cpp.html">xb_import.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__pack_8cpp.html">xb_pack.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__tblinfo_8cpp.html">xb_tblinfo.cpp</a></td></tr>
diff --git a/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
index 82d0f44..c1c03c6 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.1.0/src Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html b/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
index f8b8ebe..614739c 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.1.0/src/core Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -103,6 +103,8 @@ 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="xbixndx_8cpp.html">xbixndx.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbixtdx_8cpp.html">xbixtdx.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xblog_8cpp.html">xblog.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbmemo_8cpp.html">xbmemo.cpp</a></td></tr>
diff --git a/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html b/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
index 7e0bf9d..99b5a75 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.1.0/src/include Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -79,6 +79,8 @@ 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="xbblkread_8h.html">xbblkread.h</a> <a href="xbblkread_8h_source.html">[code]</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="include_2xbcrix_8cpp.html">xbcrix.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdate_8h.html">xbdate.h</a> <a href="xbdate_8h_source.html">[code]</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbdbf_8h.html">xbdbf.h</a> <a href="xbdbf_8h_source.html">[code]</a></td></tr>
diff --git a/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html b/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
index 3345e9b..dacdae5 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.1.0/src/tests Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -117,6 +117,8 @@ 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__tblmgr_8cpp.html">xb_test_tblmgr.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__tdx_8cpp.html">xb_test_tdx.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__uda_8cpp.html">xb_test_uda.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__xbase_8cpp.html">xb_test_xbase.cpp</a></td></tr>
diff --git a/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html b/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
index b4eef2e..f9469b1 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.1.0/src/examples Directory Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -77,6 +77,8 @@ 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__ex__expression_8cpp.html">xb_ex_expression.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__log_8cpp.html">xb_ex_log.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__sql_8cpp.html">xb_ex_sql.cpp</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__ssv_8cpp.html">xb_ex_ssv.cpp</a></td></tr>
diff --git a/docs/doxygen/html/files.html b/docs/doxygen/html/files.html
index cbd1de4..d35fce2 100644
--- a/docs/doxygen/html/files.html
+++ b/docs/doxygen/html/files.html
@@ -85,64 +85,66 @@ $(function() {
<tr id="row_0_0_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixbase_8cpp.html" target="_self">xbixbase.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_0_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixmdx_8cpp.html" target="_self">xbixmdx.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_0_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixndx_8cpp.html" target="_self">xbixndx.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xblog_8cpp.html" target="_self">xblog.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo_8cpp.html" target="_self">xbmemo.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo3_8cpp.html" target="_self">xbmemo3.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo4_8cpp.html" target="_self">xbmemo4.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbssv_8cpp.html" target="_self">xbssv.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbstring_8cpp.html" target="_self">xbstring.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbtag_8cpp.html" target="_self">xbtag.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbtblmgr_8cpp.html" target="_self">xbtblmgr.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbuda_8cpp.html" target="_self">xbuda.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_0_24_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbxbase_8cpp.html" target="_self">xbxbase.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbixtdx_8cpp.html" target="_self">xbixtdx.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xblog_8cpp.html" target="_self">xblog.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo_8cpp.html" target="_self">xbmemo.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo3_8cpp.html" target="_self">xbmemo3.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbmemo4_8cpp.html" target="_self">xbmemo4.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbssv_8cpp.html" target="_self">xbssv.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbstring_8cpp.html" target="_self">xbstring.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbtag_8cpp.html" target="_self">xbtag.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbtblmgr_8cpp.html" target="_self">xbtblmgr.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_24_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbuda_8cpp.html" target="_self">xbuda.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_25_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbxbase_8cpp.html" target="_self">xbxbase.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9658;</span><span id="img_0_1_" class="iconfclosed" onclick="toggleFolder('0_1_')">&#160;</span><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html" target="_self">examples</a></td><td class="desc"></td></tr>
<tr id="row_0_1_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__date_8cpp.html" target="_self">xb_ex_date.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_1_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__expression_8cpp.html" target="_self">xb_ex_expression.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__sql_8cpp.html" target="_self">xb_ex_sql.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__ssv_8cpp.html" target="_self">xb_ex_ssv.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__string_8cpp.html" target="_self">xb_ex_string.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v3__create__dbf_8cpp.html" target="_self">xb_ex_v3_create_dbf.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v3__upd__dbf_8cpp.html" target="_self">xb_ex_v3_upd_dbf.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v4__create__dbf_8cpp.html" target="_self">xb_ex_v4_create_dbf.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v4__upd__dbf_8cpp.html" target="_self">xb_ex_v4_upd_dbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__log_8cpp.html" target="_self">xb_ex_log.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__sql_8cpp.html" target="_self">xb_ex_sql.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__ssv_8cpp.html" target="_self">xb_ex_ssv.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__string_8cpp.html" target="_self">xb_ex_string.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v3__create__dbf_8cpp.html" target="_self">xb_ex_v3_create_dbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v3__upd__dbf_8cpp.html" target="_self">xb_ex_v3_upd_dbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v4__create__dbf_8cpp.html" target="_self">xb_ex_v4_create_dbf.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__ex__v4__upd__dbf_8cpp.html" target="_self">xb_ex_v4_upd_dbf.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9658;</span><span id="img_0_2_" class="iconfclosed" onclick="toggleFolder('0_2_')">&#160;</span><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html" target="_self">include</a></td><td class="desc"></td></tr>
<tr id="row_0_2_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbase_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbase_8h.html" target="_self">xbase.h</a></td><td class="desc"></td></tr>
<tr id="row_0_2_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbbcd_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbbcd_8h.html" target="_self">xbbcd.h</a></td><td class="desc"></td></tr>
<tr id="row_0_2_2_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbblkread_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbblkread_8h.html" target="_self">xbblkread.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbdate_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbdate_8h.html" target="_self">xbdate.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_4_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbdbf_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbdbf_8h.html" target="_self">xbdbf.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_5_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbexp_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbexp_8h.html" target="_self">xbexp.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbexpnode_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbexpnode_8h.html" target="_self">xbexpnode.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_7_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbfile_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbfile_8h.html" target="_self">xbfile.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_8_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbfilter_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbfilter_8h.html" target="_self">xbfilter.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbindex_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbindex_8h.html" target="_self">xbindex.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnklst_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnklst_8h.html" target="_self">xblnklst.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnklstord_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnklstord_8h.html" target="_self">xblnklstord.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnknod_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnknod_8h.html" target="_self">xblnknod.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblog_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblog_8h.html" target="_self">xblog.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbmemo_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbmemo_8h.html" target="_self">xbmemo.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbretcod_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbretcod_8h.html" target="_self">xbretcod.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbsql_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbsql_8h.html" target="_self">xbsql.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbssv_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbssv_8h.html" target="_self">xbssv.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbstring_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbstring_8h.html" target="_self">xbstring.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtag_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtag_8h.html" target="_self">xbtag.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtblmgr_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtblmgr_8h.html" target="_self">xbtblmgr.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtypes_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtypes_8h.html" target="_self">xbtypes.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbuda_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbuda_8h.html" target="_self">xbuda.h</a></td><td class="desc"></td></tr>
-<tr id="row_0_2_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbxbase_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbxbase_8h.html" target="_self">xbxbase.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="include_2xbcrix_8cpp.html" target="_self">xbcrix.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_4_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbdate_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbdate_8h.html" target="_self">xbdate.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_5_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbdbf_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbdbf_8h.html" target="_self">xbdbf.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbexp_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbexp_8h.html" target="_self">xbexp.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_7_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbexpnode_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbexpnode_8h.html" target="_self">xbexpnode.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_8_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbfile_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbfile_8h.html" target="_self">xbfile.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbfilter_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbfilter_8h.html" target="_self">xbfilter.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbindex_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbindex_8h.html" target="_self">xbindex.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnklst_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnklst_8h.html" target="_self">xblnklst.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnklstord_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnklstord_8h.html" target="_self">xblnklstord.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblnknod_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblnknod_8h.html" target="_self">xblnknod.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xblog_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xblog_8h.html" target="_self">xblog.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbmemo_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbmemo_8h.html" target="_self">xbmemo.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbretcod_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbretcod_8h.html" target="_self">xbretcod.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_17_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbsql_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbsql_8h.html" target="_self">xbsql.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_18_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbssv_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbssv_8h.html" target="_self">xbssv.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_19_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbstring_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbstring_8h.html" target="_self">xbstring.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_20_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtag_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtag_8h.html" target="_self">xbtag.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtblmgr_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtblmgr_8h.html" target="_self">xbtblmgr.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbtypes_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbtypes_8h.html" target="_self">xbtypes.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbuda_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbuda_8h.html" target="_self">xbuda.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_24_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="xbxbase_8h_source.html"><span class="icondoc"></span></a><a class="el" href="xbxbase_8h.html" target="_self">xbxbase.h</a></td><td class="desc"></td></tr>
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_3_" class="arrow" onclick="toggleFolder('0_3_')">&#9658;</span><span id="img_0_3_" class="iconfclosed" onclick="toggleFolder('0_3_')">&#160;</span><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html" target="_self">sql</a></td><td class="desc"></td></tr>
<tr id="row_0_3_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbalttbl_8cpp.html" target="_self">xbalttbl.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="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="sql_2xbcrix_8cpp.html" target="_self">xbcrix.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_3_2_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbcrtbl_8cpp.html" target="_self">xbcrtbl.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbcrtbl_8save_8cpp.html" target="_self">xbcrtbl.save.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdelete_8cpp.html" target="_self">xbdelete.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdrpix_8cpp.html" target="_self">xbdrpix.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdrptbl_8cpp.html" target="_self">xbdrptbl.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbinsert_8cpp.html" target="_self">xbinsert.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbselect_8cpp.html" target="_self">xbselect.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbset_8cpp.html" target="_self">xbset.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_10_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbsql_8cpp.html" target="_self">xbsql.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_3_11_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbstmt_8cpp.html" target="_self">xbstmt.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_3_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdelete_8cpp.html" target="_self">xbdelete.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdrpix_8cpp.html" target="_self">xbdrpix.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbdrptbl_8cpp.html" target="_self">xbdrptbl.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbinsert_8cpp.html" target="_self">xbinsert.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbselect_8cpp.html" target="_self">xbselect.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbset_8cpp.html" target="_self">xbset.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbsql_8cpp.html" target="_self">xbsql.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_10_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xbstmt_8cpp.html" target="_self">xbstmt.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_4_" class="arrow" onclick="toggleFolder('0_4_')">&#9658;</span><span id="img_0_4_" class="iconfclosed" onclick="toggleFolder('0_4_')">&#160;</span><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html" target="_self">tests</a></td><td class="desc"></td></tr>
<tr id="row_0_4_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="tstfuncs_8cpp.html" target="_self">tstfuncs.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_4_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__bcd_8cpp.html" target="_self">xb_test_bcd.cpp</a></td><td class="desc"></td></tr>
@@ -166,8 +168,9 @@ $(function() {
<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_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__tdx_8cpp.html" target="_self">xb_test_tdx.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_23_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__uda_8cpp.html" target="_self">xb_test_uda.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_4_24_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__test__xbase_8cpp.html" target="_self">xb_test_xbase.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_5_" class="arrow" onclick="toggleFolder('0_5_')">&#9658;</span><span id="img_0_5_" class="iconfclosed" onclick="toggleFolder('0_5_')">&#160;</span><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html" target="_self">utils</a></td><td class="desc"></td></tr>
<tr id="row_0_5_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__cfg__check_8cpp.html" target="_self">xb_cfg_check.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_5_1_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__copydbf_8cpp.html" target="_self">xb_copydbf.cpp</a></td><td class="desc"></td></tr>
@@ -176,9 +179,10 @@ $(function() {
<tr id="row_0_5_4_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__dumpdbt_8cpp.html" target="_self">xb_dumpdbt.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_5_5_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__dumprecs_8cpp.html" target="_self">xb_dumprecs.cpp</a></td><td class="desc"></td></tr>
<tr id="row_0_5_6_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__execsql_8cpp.html" target="_self">xb_execsql.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__pack_8cpp.html" target="_self">xb_pack.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__tblinfo_8cpp.html" target="_self">xb_tblinfo.cpp</a></td><td class="desc"></td></tr>
-<tr id="row_0_5_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__undelall_8cpp.html" target="_self">xb_undelall.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_7_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__import_8cpp.html" target="_self">xb_import.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_8_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__pack_8cpp.html" target="_self">xb_pack.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_9_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__tblinfo_8cpp.html" target="_self">xb_tblinfo.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_5_10_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="xb__undelall_8cpp.html" target="_self">xb_undelall.cpp</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/docs/doxygen/html/functions_c.html b/docs/doxygen/html/functions_c.html
index efdafde..8016da5 100644
--- a/docs/doxygen/html/functions_c.html
+++ b/docs/doxygen/html/functions_c.html
@@ -70,6 +70,7 @@ $(function() {
<li>cEncryptionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4">xb::xbDbf</a></li>
<li>CenturyOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0">xb::xbDate</a></li>
<li>cFieldName&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e">xb::xbSchema</a></li>
+<li>cFldType&#160;:&#160;<a class="el" href="structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3">sFldMap</a></li>
<li>CharDayOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c">xb::xbDate</a></li>
<li>CharMonthOf()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac">xb::xbDate</a></li>
<li>cIndexFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b">xb::xbDbf</a></li>
@@ -80,8 +81,9 @@ $(function() {
<li>Copy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">xb::xbString</a></li>
<li>CopyDbfStructure()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">xb::xbDbf</a></li>
<li>CountChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72">xb::xbString</a></li>
+<li>CreateFqn()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1">xb::xbXBase</a></li>
<li>CreateTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">xb::xbDbf</a></li>
-<li>CreateUniqueFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">xb::xbFile</a></li>
+<li>CreateUniqueFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">xb::xbFile</a></li>
<li>CTOD()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">xb::xbDate</a></li>
<li>cTransactionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970">xb::xbDbf</a></li>
<li>cType&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25">xb::xbSchema</a></li>
diff --git a/docs/doxygen/html/functions_d.html b/docs/doxygen/html/functions_d.html
index 21f0ffb..09be1b7 100644
--- a/docs/doxygen/html/functions_d.html
+++ b/docs/doxygen/html/functions_d.html
@@ -77,7 +77,7 @@ $(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#a309b5b1fb6a5c048c4bfb404d011ac55">xb::xbDbf</a></li>
+<li>DumpHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb">xb::xbDbf</a></li>
<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">xb::xbDbf</a></li>
</ul>
</div><!-- contents -->
diff --git a/docs/doxygen/html/functions_e.html b/docs/doxygen/html/functions_e.html
index 74be731..f5c1f56 100644
--- a/docs/doxygen/html/functions_e.html
+++ b/docs/doxygen/html/functions_e.html
@@ -78,7 +78,7 @@ $(function() {
<li>ePutUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">xb::xbFile</a></li>
<li>ePutUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">xb::xbFile</a></li>
<li>ErrorCodeText&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e">xb::xbSsv</a></li>
-<li>ExtractElement()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">xb::xbString</a></li>
+<li>ExtractElement()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7">xb::xbString</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/functions_func_c.html b/docs/doxygen/html/functions_func_c.html
index c1c8ba2..a83cc00 100644
--- a/docs/doxygen/html/functions_func_c.html
+++ b/docs/doxygen/html/functions_func_c.html
@@ -76,8 +76,9 @@ $(function() {
<li>Copy()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792">xb::xbString</a></li>
<li>CopyDbfStructure()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264">xb::xbDbf</a></li>
<li>CountChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f">xb::xbString</a></li>
+<li>CreateFqn()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1">xb::xbXBase</a></li>
<li>CreateTable()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1">xb::xbDbf</a></li>
-<li>CreateUniqueFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7">xb::xbFile</a></li>
+<li>CreateUniqueFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff">xb::xbFile</a></li>
<li>CTOD()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5">xb::xbDate</a></li>
<li>CvtHexChar()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de">xb::xbString</a></li>
<li>CvtHexString()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0">xb::xbString</a></li>
diff --git a/docs/doxygen/html/functions_func_d.html b/docs/doxygen/html/functions_func_d.html
index 4f361cd..fef3ac9 100644
--- a/docs/doxygen/html/functions_func_d.html
+++ b/docs/doxygen/html/functions_func_d.html
@@ -77,7 +77,7 @@ $(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#a309b5b1fb6a5c048c4bfb404d011ac55">xb::xbDbf</a></li>
+<li>DumpHeader()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb">xb::xbDbf</a></li>
<li>DumpRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa">xb::xbDbf</a></li>
</ul>
</div><!-- contents -->
diff --git a/docs/doxygen/html/functions_func_e.html b/docs/doxygen/html/functions_func_e.html
index 430c0ac..650358a 100644
--- a/docs/doxygen/html/functions_func_e.html
+++ b/docs/doxygen/html/functions_func_e.html
@@ -77,7 +77,7 @@ $(function() {
<li>ePutInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46">xb::xbFile</a></li>
<li>ePutUInt16()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40">xb::xbFile</a></li>
<li>ePutUInt32()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173">xb::xbFile</a></li>
-<li>ExtractElement()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e">xb::xbString</a></li>
+<li>ExtractElement()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7">xb::xbString</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 18ab1bc..63c14bb 100644
--- a/docs/doxygen/html/functions_func_g.html
+++ b/docs/doxygen/html/functions_func_g.html
@@ -83,15 +83,15 @@ $(function() {
<li>GetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">xb::xbSsv</a></li>
<li>GetEof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">xb::xbDbf</a></li>
<li>GetErrorMessage()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">xb::xbSsv</a></li>
-<li>GetField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26">xb::xbDbf</a></li>
+<li>GetField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513">xb::xbDbf</a></li>
<li>GetFieldCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">xb::xbDbf</a></li>
-<li>GetFieldDecimal()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840">xb::xbDbf</a></li>
+<li>GetFieldDecimal()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2">xb::xbDbf</a></li>
<li>GetFieldLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">xb::xbDbf</a></li>
<li>GetFieldName()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">xb::xbDbf</a></li>
<li>GetFieldNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">xb::xbDbf</a></li>
<li>GetFieldType()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">xb::xbDbf</a></li>
<li>GetFileDirPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">xb::xbFile</a></li>
-<li>GetFileExtPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">xb::xbFile</a></li>
+<li>GetFileExtPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">xb::xbFile</a></li>
<li>GetFileMtime()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">xb::xbFile</a></li>
<li>GetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">xb::xbFile</a></li>
<li>GetFileNamePart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">xb::xbFile</a></li>
@@ -105,28 +105,30 @@ $(function() {
<li>GetHomeDir()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">xb::xbSsv</a></li>
<li>GetLastPos()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">xb::xbString</a></li>
<li>GetLastRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">xb::xbDbf</a></li>
-<li>GetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b">xb::xbXBase</a></li>
-<li>GetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af">xb::xbXBase</a></li>
+<li>GetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">xb::xbSsv</a></li>
+<li>GetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">xb::xbSsv</a></li>
<li>GetLogFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7">xb::xbXBase</a></li>
-<li>GetLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6">xb::xbDbf</a></li>
+<li>GetLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0">xb::xbDbf</a></li>
+<li>GetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">xb::xbXBase</a></li>
<li>GetLogStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028">xb::xbXBase</a></li>
<li>GetLongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">xb::xbDbf</a></li>
<li>GetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">xb::xbSsv</a></li>
-<li>GetNextRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a">xb::xbDbf</a></li>
+<li>GetNextRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2">xb::xbDbf</a></li>
+<li>GetNullSts()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e">xb::xbDbf</a></li>
<li>GetOpenMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">xb::xbFile</a></li>
<li>GetOpenTableCount()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">xb::xbTblMgr</a></li>
-<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
+<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
<li>GetPrevRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">xb::xbDbf</a></li>
<li>GetRawField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">xb::xbDbf</a></li>
<li>GetRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">xb::xbDbf</a></li>
<li>GetRecordBuf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">xb::xbDbf</a></li>
<li>GetRecordCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">xb::xbDbf</a></li>
-<li>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>GetTempDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">xb::xbSsv</a></li>
<li>GetULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">xb::xbDbf</a></li>
<li>GetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf</a></li>
<li>GetXbaseFileTypeByte()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">xb::xbFile</a></li>
diff --git a/docs/doxygen/html/functions_func_i.html b/docs/doxygen/html/functions_func_i.html
index 91a9531..d389a63 100644
--- a/docs/doxygen/html/functions_func_i.html
+++ b/docs/doxygen/html/functions_func_i.html
@@ -69,7 +69,7 @@ $(function() {
<li>InitVars()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829">xb::xbDbf</a></li>
<li>IsEmpty()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">xb::xbString</a></li>
<li>IsLeapYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">xb::xbDate</a></li>
-<li>IsNull()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">xb::xbString</a></li>
+<li>IsNull()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">xb::xbString</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/functions_func_s.html b/docs/doxygen/html/functions_func_s.html
index 99e6b3c..ae5806a 100644
--- a/docs/doxygen/html/functions_func_s.html
+++ b/docs/doxygen/html/functions_func_s.html
@@ -77,11 +77,12 @@ $(function() {
<li>SetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">xb::xbFile</a></li>
<li>SetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">xb::xbFile</a></li>
<li>SetHomeFolders()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">xb::xbFile</a></li>
-<li>SetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292">xb::xbXBase</a></li>
-<li>SetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c">xb::xbXBase</a></li>
+<li>SetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">xb::xbSsv</a></li>
+<li>SetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">xb::xbSsv</a></li>
<li>SetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42">xb::xbXBase</a></li>
<li>SetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">xb::xbSsv</a></li>
<li>SetNum()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">xb::xbString</a></li>
+<li>SetTempDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">xb::xbSsv</a></li>
<li>SetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323">xb::xbDbf</a></li>
<li>Sprintf()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">xb::xbString</a></li>
<li>Str()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3">xb::xbString</a></li>
diff --git a/docs/doxygen/html/functions_g.html b/docs/doxygen/html/functions_g.html
index d67e26c..b816f89 100644
--- a/docs/doxygen/html/functions_g.html
+++ b/docs/doxygen/html/functions_g.html
@@ -83,15 +83,15 @@ $(function() {
<li>GetEndianType()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243">xb::xbSsv</a></li>
<li>GetEof()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d">xb::xbDbf</a></li>
<li>GetErrorMessage()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4">xb::xbSsv</a></li>
-<li>GetField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26">xb::xbDbf</a></li>
+<li>GetField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513">xb::xbDbf</a></li>
<li>GetFieldCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e">xb::xbDbf</a></li>
-<li>GetFieldDecimal()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840">xb::xbDbf</a></li>
+<li>GetFieldDecimal()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2">xb::xbDbf</a></li>
<li>GetFieldLen()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4">xb::xbDbf</a></li>
<li>GetFieldName()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c">xb::xbDbf</a></li>
<li>GetFieldNo()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b">xb::xbDbf</a></li>
<li>GetFieldType()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84">xb::xbDbf</a></li>
<li>GetFileDirPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a">xb::xbFile</a></li>
-<li>GetFileExtPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2">xb::xbFile</a></li>
+<li>GetFileExtPart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25">xb::xbFile</a></li>
<li>GetFileMtime()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8">xb::xbFile</a></li>
<li>GetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a">xb::xbFile</a></li>
<li>GetFileNamePart()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a">xb::xbFile</a></li>
@@ -105,28 +105,30 @@ $(function() {
<li>GetHomeDir()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9">xb::xbSsv</a></li>
<li>GetLastPos()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df">xb::xbString</a></li>
<li>GetLastRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964">xb::xbDbf</a></li>
-<li>GetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b">xb::xbXBase</a></li>
-<li>GetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af">xb::xbXBase</a></li>
+<li>GetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051">xb::xbSsv</a></li>
+<li>GetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861">xb::xbSsv</a></li>
<li>GetLogFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7">xb::xbXBase</a></li>
-<li>GetLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6">xb::xbDbf</a></li>
+<li>GetLogicalField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0">xb::xbDbf</a></li>
+<li>GetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">xb::xbXBase</a></li>
<li>GetLogStatus()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028">xb::xbXBase</a></li>
<li>GetLongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1">xb::xbDbf</a></li>
<li>GetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5">xb::xbSsv</a></li>
-<li>GetNextRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a">xb::xbDbf</a></li>
+<li>GetNextRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2">xb::xbDbf</a></li>
+<li>GetNullSts()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e">xb::xbDbf</a></li>
<li>GetOpenMode()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3">xb::xbFile</a></li>
<li>GetOpenTableCount()&#160;:&#160;<a class="el" href="classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069">xb::xbTblMgr</a></li>
-<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
+<li>GetPathSeparator()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db">xb::xbString</a></li>
<li>GetPrevRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e">xb::xbDbf</a></li>
<li>GetRawField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e">xb::xbDbf</a></li>
<li>GetRecord()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161">xb::xbDbf</a></li>
<li>GetRecordBuf()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124">xb::xbDbf</a></li>
<li>GetRecordCnt()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89">xb::xbDbf</a></li>
-<li>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>GetTempDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61">xb::xbSsv</a></li>
<li>GetULongField()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83">xb::xbDbf</a></li>
<li>GetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf</a></li>
<li>GetXbaseFileTypeByte()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e">xb::xbFile</a></li>
diff --git a/docs/doxygen/html/functions_i.html b/docs/doxygen/html/functions_i.html
index 3f935d6..94fd6dc 100644
--- a/docs/doxygen/html/functions_i.html
+++ b/docs/doxygen/html/functions_i.html
@@ -71,12 +71,14 @@ $(function() {
<li>iEndianType&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv</a></li>
<li>iFieldLen&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">xb::xbSchema</a></li>
<li>iFileVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388">xb::xbDbf</a></li>
+<li>iFldNo&#160;:&#160;<a class="el" href="structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723">sFldMap</a></li>
<li>InitVars()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829">xb::xbDbf</a></li>
<li>iNoOfDecs&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">xb::xbSchema</a></li>
<li>iNoOfFields&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a">xb::xbDbf</a></li>
+<li>iRecPos&#160;:&#160;<a class="el" href="structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f">sFldMap</a></li>
<li>IsEmpty()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3">xb::xbString</a></li>
<li>IsLeapYear()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95">xb::xbDate</a></li>
-<li>IsNull()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">xb::xbString</a></li>
+<li>IsNull()&#160;:&#160;<a class="el" href="classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658">xb::xbDate</a>, <a class="el" href="classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500">xb::xbString</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/functions_n.html b/docs/doxygen/html/functions_n.html
index 5cb8df5..f0a4c72 100644
--- a/docs/doxygen/html/functions_n.html
+++ b/docs/doxygen/html/functions_n.html
@@ -67,6 +67,7 @@ $(function() {
<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
<li>NameSuffixMissing()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e">xb::xbFile</a></li>
+<li>next&#160;:&#160;<a class="el" href="structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa">sFldMap</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/functions_s.html b/docs/doxygen/html/functions_s.html
index c0cb82b..16d70ea 100644
--- a/docs/doxygen/html/functions_s.html
+++ b/docs/doxygen/html/functions_s.html
@@ -79,11 +79,12 @@ $(function() {
<li>SetFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636">xb::xbFile</a></li>
<li>SetFqFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a">xb::xbFile</a></li>
<li>SetHomeFolders()&#160;:&#160;<a class="el" href="classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a">xb::xbFile</a></li>
-<li>SetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">xb::xbSsv</a>, <a class="el" href="classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292">xb::xbXBase</a></li>
-<li>SetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c">xb::xbXBase</a></li>
+<li>SetLogDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e">xb::xbSsv</a></li>
+<li>SetLogFileName()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544">xb::xbSsv</a></li>
<li>SetLogSize()&#160;:&#160;<a class="el" href="classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42">xb::xbXBase</a></li>
<li>SetMultiUser()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c">xb::xbSsv</a></li>
<li>SetNum()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd">xb::xbString</a></li>
+<li>SetTempDirectory()&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2">xb::xbSsv</a></li>
<li>SetVersion()&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323">xb::xbDbf</a></li>
<li>sNullString&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">xb::xbSsv</a></li>
<li>Sprintf()&#160;:&#160;<a class="el" href="classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195">xb::xbString</a></li>
diff --git a/docs/doxygen/html/functions_vars.html b/docs/doxygen/html/functions_vars.html
index 557c2b3..f193350 100644
--- a/docs/doxygen/html/functions_vars.html
+++ b/docs/doxygen/html/functions_vars.html
@@ -68,6 +68,7 @@ $(function() {
<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
<li>cEncryptionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4">xb::xbDbf</a></li>
<li>cFieldName&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e">xb::xbSchema</a></li>
+<li>cFldType&#160;:&#160;<a class="el" href="structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3">sFldMap</a></li>
<li>cIndexFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b">xb::xbDbf</a></li>
<li>cLangDriver&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1">xb::xbDbf</a></li>
<li>cTransactionFlag&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970">xb::xbDbf</a></li>
@@ -90,8 +91,15 @@ $(function() {
<li>iEndianType&#160;:&#160;<a class="el" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv</a></li>
<li>iFieldLen&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac">xb::xbSchema</a></li>
<li>iFileVersion&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388">xb::xbDbf</a></li>
+<li>iFldNo&#160;:&#160;<a class="el" href="structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723">sFldMap</a></li>
<li>iNoOfDecs&#160;:&#160;<a class="el" href="structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9">xb::xbSchema</a></li>
<li>iNoOfFields&#160;:&#160;<a class="el" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a">xb::xbDbf</a></li>
+<li>iRecPos&#160;:&#160;<a class="el" href="structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f">sFldMap</a></li>
+</ul>
+
+
+<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
+<li>next&#160;:&#160;<a class="el" href="structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa">sFldMap</a></li>
</ul>
diff --git a/docs/doxygen/html/globals.html b/docs/doxygen/html/globals.html
index b12ae53..892c182 100644
--- a/docs/doxygen/html/globals.html
+++ b/docs/doxygen/html/globals.html
@@ -79,7 +79,7 @@ $(function() {
<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>
+<li>GetNextSqlCmd()&#160;:&#160;<a class="el" href="xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945">xb_execsql.cpp</a></li>
</ul>
@@ -102,16 +102,16 @@ $(function() {
<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
-<li>main()&#160;:&#160;<a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock.cpp</a>, <a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock2.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_expression.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_execsql.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_undelall.cpp</a>, <a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_funcs.cpp</a>, <a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.cpp</a>, <a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.cpp</a>, <a class="el" href="xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_ex_ssv.cpp</a>, <a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_string.cpp</a>, <a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_create_dbf.cpp</a>, <a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_upd_dbf.cpp</a>, <a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_create_dbf.cpp</a>, <a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_upd_dbf.cpp</a>, <a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_bcd.cpp</a>, <a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_blockread.cpp</a>, <a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_date.cpp</a>, <a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_memos.cpp</a>, <a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_nomemos.cpp</a>, <a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_memos.cpp</a>, <a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_nomemos.cpp</a>, <a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expnode.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expression.cpp</a>, <a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_file.cpp</a>, <a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_filter.cpp</a>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.cpp</a></li>
+<li>main()&#160;:&#160;<a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock.cpp</a>, <a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock2.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tdx.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_expression.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_undelall.cpp</a>, <a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_funcs.cpp</a>, <a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.cpp</a>, <a class="el" href="xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_log.cpp</a>, <a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.cpp</a>, <a class="el" href="xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689">xb_ex_ssv.cpp</a>, <a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_string.cpp</a>, <a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_create_dbf.cpp</a>, <a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_upd_dbf.cpp</a>, <a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_create_dbf.cpp</a>, <a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_upd_dbf.cpp</a>, <a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_bcd.cpp</a>, <a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_blockread.cpp</a>, <a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_date.cpp</a>, <a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_memos.cpp</a>, <a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_nomemos.cpp</a>, <a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_memos.cpp</a>, <a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_nomemos.cpp</a>, <a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expnode.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expression.cpp</a>, <a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_file.cpp</a>, <a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_filter.cpp</a>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.cpp</a></li>
<li>MyDbfRec&#160;:&#160;<a class="el" href="xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e">xb_test_blockread.cpp</a></li>
<li>MyV4Record&#160;:&#160;<a class="el" href="xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99">xb_ex_expression.cpp</a></li>
</ul>
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
-<li>PrintHelp()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumprecs.cpp</a>, <a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_undelall.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_copydbf.cpp</a></li>
+<li>PrintHelp()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_undelall.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_copydbf.cpp</a></li>
<li>PrintResult()&#160;:&#160;<a class="el" href="xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda">xb_ex_expression.cpp</a></li>
-<li>PrintVersion()&#160;:&#160;<a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumprecs.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_undelall.cpp</a></li>
+<li>PrintVersion()&#160;:&#160;<a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_undelall.cpp</a></li>
</ul>
@@ -176,6 +176,7 @@ $(function() {
<li>XB_INVALID_OBJECT&#160;:&#160;<a class="el" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885">xbretcod.h</a></li>
<li>XB_INVALID_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a">xbretcod.h</a></li>
<li>XB_INVALID_PAGE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0">xbretcod.h</a></li>
+<li>XB_INVALID_PARAMETER&#160;:&#160;<a class="el" href="xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02">xbretcod.h</a></li>
<li>XB_INVALID_PARM&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d">xbretcod.h</a></li>
<li>XB_INVALID_RECORD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1">xbretcod.h</a></li>
<li>XB_INVALID_TABLE_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92">xbretcod.h</a></li>
@@ -193,6 +194,7 @@ $(function() {
<li>XB_NO_MEMORY&#160;:&#160;<a class="el" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">xbretcod.h</a></li>
<li>XB_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">xbretcod.h</a></li>
<li>XB_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1">xbretcod.h</a></li>
+<li>XB_NULL_DATE&#160;:&#160;<a class="el" href="xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2">xbexp.h</a></li>
<li>XB_NUMERIC_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">xbdbf.h</a></li>
<li>XB_OPEN&#160;:&#160;<a class="el" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409">xbdbf.h</a></li>
<li>XB_OPEN_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8">xbretcod.h</a></li>
diff --git a/docs/doxygen/html/globals_defs.html b/docs/doxygen/html/globals_defs.html
index 7857849..b9b6729 100644
--- a/docs/doxygen/html/globals_defs.html
+++ b/docs/doxygen/html/globals_defs.html
@@ -131,6 +131,7 @@ $(function() {
<li>XB_INVALID_OBJECT&#160;:&#160;<a class="el" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885">xbretcod.h</a></li>
<li>XB_INVALID_OPTION&#160;:&#160;<a class="el" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a">xbretcod.h</a></li>
<li>XB_INVALID_PAGE&#160;:&#160;<a class="el" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0">xbretcod.h</a></li>
+<li>XB_INVALID_PARAMETER&#160;:&#160;<a class="el" href="xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02">xbretcod.h</a></li>
<li>XB_INVALID_PARM&#160;:&#160;<a class="el" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d">xbretcod.h</a></li>
<li>XB_INVALID_RECORD&#160;:&#160;<a class="el" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1">xbretcod.h</a></li>
<li>XB_INVALID_TABLE_NAME&#160;:&#160;<a class="el" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92">xbretcod.h</a></li>
@@ -148,6 +149,7 @@ $(function() {
<li>XB_NO_MEMORY&#160;:&#160;<a class="el" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">xbretcod.h</a></li>
<li>XB_NOT_FOUND&#160;:&#160;<a class="el" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">xbretcod.h</a></li>
<li>XB_NOT_OPEN&#160;:&#160;<a class="el" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1">xbretcod.h</a></li>
+<li>XB_NULL_DATE&#160;:&#160;<a class="el" href="xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2">xbexp.h</a></li>
<li>XB_NUMERIC_FLD&#160;:&#160;<a class="el" href="xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6">xbdbf.h</a></li>
<li>XB_OPEN&#160;:&#160;<a class="el" href="xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409">xbdbf.h</a></li>
<li>XB_OPEN_ERROR&#160;:&#160;<a class="el" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8">xbretcod.h</a></li>
diff --git a/docs/doxygen/html/globals_func.html b/docs/doxygen/html/globals_func.html
index 601295d..65f44a8 100644
--- a/docs/doxygen/html/globals_func.html
+++ b/docs/doxygen/html/globals_func.html
@@ -79,7 +79,7 @@ $(function() {
<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>
+<li>GetNextSqlCmd()&#160;:&#160;<a class="el" href="xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945">xb_execsql.cpp</a></li>
</ul>
@@ -89,14 +89,14 @@ $(function() {
<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
-<li>main()&#160;:&#160;<a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock.cpp</a>, <a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock2.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_execsql.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_undelall.cpp</a>, <a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_date.cpp</a>, <a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_expression.cpp</a>, <a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.cpp</a>, <a class="el" href="xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">xb_ex_ssv.cpp</a>, <a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_string.cpp</a>, <a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_create_dbf.cpp</a>, <a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_upd_dbf.cpp</a>, <a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_create_dbf.cpp</a>, <a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_upd_dbf.cpp</a>, <a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_bcd.cpp</a>, <a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_blockread.cpp</a>, <a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.cpp</a>, <a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_memos.cpp</a>, <a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_nomemos.cpp</a>, <a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_memos.cpp</a>, <a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_nomemos.cpp</a>, <a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expnode.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expression.cpp</a>, <a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_file.cpp</a>, <a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_filter.cpp</a>, <a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_funcs.cpp</a></li>
+<li>main()&#160;:&#160;<a class="el" href="xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_cfg_check.cpp</a>, <a class="el" href="xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock.cpp</a>, <a class="el" href="xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_lock2.cpp</a>, <a class="el" href="xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_log.cpp</a>, <a class="el" href="xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_mdx.cpp</a>, <a class="el" href="xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_ndx.cpp</a>, <a class="el" href="xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_sql.cpp</a>, <a class="el" href="xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f">xb_test_string.cpp</a>, <a class="el" href="xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tblmgr.cpp</a>, <a class="el" href="xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_tdx.cpp</a>, <a class="el" href="xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_uda.cpp</a>, <a class="el" href="xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_xbase.cpp</a>, <a class="el" href="xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_linklist.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">xb_undelall.cpp</a>, <a class="el" href="xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_blockread.cpp</a>, <a class="el" href="xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_expression.cpp</a>, <a class="el" href="xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_log.cpp</a>, <a class="el" href="xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_ex_sql.cpp</a>, <a class="el" href="xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689">xb_ex_ssv.cpp</a>, <a class="el" href="xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_string.cpp</a>, <a class="el" href="xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_create_dbf.cpp</a>, <a class="el" href="xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v3_upd_dbf.cpp</a>, <a class="el" href="xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_create_dbf.cpp</a>, <a class="el" href="xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_v4_upd_dbf.cpp</a>, <a class="el" href="xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_bcd.cpp</a>, <a class="el" href="xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">xb_ex_date.cpp</a>, <a class="el" href="xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_date.cpp</a>, <a class="el" href="xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_memos.cpp</a>, <a class="el" href="xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v3_nomemos.cpp</a>, <a class="el" href="xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_memos.cpp</a>, <a class="el" href="xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_dbf_v4_nomemos.cpp</a>, <a class="el" href="xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expnode.cpp</a>, <a class="el" href="xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_expression.cpp</a>, <a class="el" href="xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_file.cpp</a>, <a class="el" href="xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_filter.cpp</a>, <a class="el" href="xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a">xb_test_funcs.cpp</a></li>
</ul>
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
-<li>PrintHelp()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumprecs.cpp</a>, <a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_undelall.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_copydbf.cpp</a></li>
+<li>PrintHelp()&#160;:&#160;<a class="el" href="xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_undelall.cpp</a>, <a class="el" href="xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">xb_copydbf.cpp</a></li>
<li>PrintResult()&#160;:&#160;<a class="el" href="xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda">xb_ex_expression.cpp</a></li>
-<li>PrintVersion()&#160;:&#160;<a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumprecs.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_undelall.cpp</a></li>
+<li>PrintVersion()&#160;:&#160;<a class="el" href="xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_copydbf.cpp</a>, <a class="el" href="xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dbfutil.cpp</a>, <a class="el" href="xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_deletall.cpp</a>, <a class="el" href="xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumpdbt.cpp</a>, <a class="el" href="xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_dumprecs.cpp</a>, <a class="el" href="xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_execsql.cpp</a>, <a class="el" href="xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_import.cpp</a>, <a class="el" href="xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_pack.cpp</a>, <a class="el" href="xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_tblinfo.cpp</a>, <a class="el" href="xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">xb_undelall.cpp</a></li>
</ul>
diff --git a/docs/doxygen/html/hierarchy.html b/docs/doxygen/html/hierarchy.html
index 0644499..556162d 100644
--- a/docs/doxygen/html/hierarchy.html
+++ b/docs/doxygen/html/hierarchy.html
@@ -68,15 +68,16 @@ $(function() {
<div class="contents">
<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbSchema.html" target="_self">xb::xbSchema</a></td><td class="desc">Schema used for defining tables with CreateTable methods </td></tr>
-<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbSsv.html" target="_self">xb::xbSsv</a></td><td class="desc">Class for handling shared system variables </td></tr>
-<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDate.html" target="_self">xb::xbDate</a></td><td class="desc">XbDate class </td></tr>
-<tr id="row_1_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_1_" class="arrow" onclick="toggleFolder('1_1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbFile.html" target="_self">xb::xbFile</a></td><td class="desc">Class for handling low level file I/O </td></tr>
-<tr id="row_1_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDbf.html" target="_self">xb::xbDbf</a></td><td class="desc">Base class for handling dbf files/tables </td></tr>
-<tr id="row_1_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_2_" class="arrow" onclick="toggleFolder('1_2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbTblMgr.html" target="_self">xb::xbTblMgr</a></td><td class="desc"></td></tr>
-<tr id="row_1_2_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbXBase.html" target="_self">xb::xbXBase</a></td><td class="desc">XbXbase class </td></tr>
-<tr id="row_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbString.html" target="_self">xb::xbString</a></td><td class="desc">Class for handling string data </td></tr>
-<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbTblList.html" target="_self">xb::xbTblList</a></td><td class="desc"></td></tr>
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsFldMap.html" target="_self">sFldMap</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbSchema.html" target="_self">xb::xbSchema</a></td><td class="desc">Schema used for defining tables with CreateTable methods </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbSsv.html" target="_self">xb::xbSsv</a></td><td class="desc">Class for handling shared system variables </td></tr>
+<tr id="row_2_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDate.html" target="_self">xb::xbDate</a></td><td class="desc">XbDate class </td></tr>
+<tr id="row_2_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_1_" class="arrow" onclick="toggleFolder('2_1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbFile.html" target="_self">xb::xbFile</a></td><td class="desc">Class for handling low level file I/O </td></tr>
+<tr id="row_2_1_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbDbf.html" target="_self">xb::xbDbf</a></td><td class="desc">Base class for handling dbf files/tables </td></tr>
+<tr id="row_2_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_2_" class="arrow" onclick="toggleFolder('2_2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbTblMgr.html" target="_self">xb::xbTblMgr</a></td><td class="desc"></td></tr>
+<tr id="row_2_2_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbXBase.html" target="_self">xb::xbXBase</a></td><td class="desc">XbXbase class </td></tr>
+<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classxb_1_1xbString.html" target="_self">xb::xbString</a></td><td class="desc">Class for handling string data </td></tr>
+<tr id="row_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structxb_1_1xbTblList.html" target="_self">xb::xbTblList</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/docs/doxygen/html/include_2xbcrix_8cpp.html b/docs/doxygen/html/include_2xbcrix_8cpp.html
new file mode 100644
index 0000000..4687a16
--- /dev/null
+++ b/docs/doxygen/html/include_2xbcrix_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbcrix.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b0856f6b0d80ccb263b2f415c91f9e17.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbcrix.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/menudata.js b/docs/doxygen/html/menudata.js
index 2959441..1eaf8cd 100644
--- a/docs/doxygen/html/menudata.js
+++ b/docs/doxygen/html/menudata.js
@@ -92,6 +92,7 @@ var menudata={children:[
{text:"c",url:"functions_vars.html#index_c"},
{text:"e",url:"functions_vars.html#index_e"},
{text:"i",url:"functions_vars.html#index_i"},
+{text:"n",url:"functions_vars.html#index_n"},
{text:"p",url:"functions_vars.html#index_p"},
{text:"r",url:"functions_vars.html#index_r"},
{text:"s",url:"functions_vars.html#index_s"},
diff --git a/docs/doxygen/html/search/all_0.js b/docs/doxygen/html/search/all_0.js
index 1e4e72c..0f4d535 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#af16832ff2bfaee09265652e0fc03709a',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName)'],['../classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName, const xbString &amp;sTblAlias)']]],
['append_3',['Append',['../classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815',1,'xb::xbString::Append(const xbString &amp;s)'],['../classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240',1,'xb::xbString::Append(const char *s)'],['../classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb',1,'xb::xbString::Append(const char *s, xbUInt32 iByteCount)'],['../classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7',1,'xb::xbString::Append(char c)']]],
['appendrecord_4',['AppendRecord',['../classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b',1,'xb::xbDbf']]],
- ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 pos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 lCopyLen)']]]
+ ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#a430119df844bd80d67c23c48b045af30',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 ulStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a97df314be5b3b2611be11ff50a19533d',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 ulStartPos)']]]
];
diff --git a/docs/doxygen/html/search/all_10.js b/docs/doxygen/html/search/all_10.js
index 8645b5c..34303fe 100644
--- a/docs/doxygen/html/search/all_10.js
+++ b/docs/doxygen/html/search/all_10.js
@@ -13,16 +13,18 @@ var searchData=
['setfilename_10',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
['setfqfilename_11',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
['sethomefolders_12',['SetHomeFolders',['../classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a',1,'xb::xbFile']]],
- ['setlogdirectory_13',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv::SetLogDirectory()'],['../classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292',1,'xb::xbXBase::SetLogDirectory(const xbString &amp;sLogFileDirectory)']]],
- ['setlogfilename_14',['SetLogFileName',['../classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c',1,'xb::xbXBase']]],
+ ['setlogdirectory_13',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv']]],
+ ['setlogfilename_14',['SetLogFileName',['../classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544',1,'xb::xbSsv']]],
['setlogsize_15',['SetLogSize',['../classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42',1,'xb::xbXBase']]],
['setmultiuser_16',['SetMultiUser',['../classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c',1,'xb::xbSsv']]],
['setnum_17',['SetNum',['../classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd',1,'xb::xbString']]],
- ['setversion_18',['SetVersion',['../classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323',1,'xb::xbDbf']]],
- ['snullstring_19',['sNullString',['../classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da',1,'xb::xbSsv']]],
- ['sprintf_20',['Sprintf',['../classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195',1,'xb::xbString']]],
- ['str_21',['Str',['../classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0',1,'xb::xbDate::Str()'],['../classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3',1,'xb::xbString::Str() const']]],
- ['strncpy_22',['strncpy',['../classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b',1,'xb::xbString']]],
- ['swapchars_23',['SwapChars',['../classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe',1,'xb::xbString']]],
- ['sysdate_24',['Sysdate',['../classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192',1,'xb::xbDate']]]
+ ['settempdirectory_18',['SetTempDirectory',['../classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2',1,'xb::xbSsv']]],
+ ['setversion_19',['SetVersion',['../classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323',1,'xb::xbDbf']]],
+ ['sfldmap_20',['sFldMap',['../structsFldMap.html',1,'']]],
+ ['snullstring_21',['sNullString',['../classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da',1,'xb::xbSsv']]],
+ ['sprintf_22',['Sprintf',['../classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195',1,'xb::xbString']]],
+ ['str_23',['Str',['../classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0',1,'xb::xbDate::Str()'],['../classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3',1,'xb::xbString::Str() const']]],
+ ['strncpy_24',['strncpy',['../classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b',1,'xb::xbString']]],
+ ['swapchars_25',['SwapChars',['../classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe',1,'xb::xbString']]],
+ ['sysdate_26',['Sysdate',['../classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192',1,'xb::xbDate']]]
];
diff --git a/docs/doxygen/html/search/all_15.js b/docs/doxygen/html/search/all_15.js
index d8f30c5..57abaef 100644
--- a/docs/doxygen/html/search/all_15.js
+++ b/docs/doxygen/html/search/all_15.js
@@ -28,204 +28,209 @@ var searchData=
['xb_5feof_25',['XB_EOF',['../xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7',1,'xbretcod.h']]],
['xb_5fex_5fdate_2ecpp_26',['xb_ex_date.cpp',['../xb__ex__date_8cpp.html',1,'']]],
['xb_5fex_5fexpression_2ecpp_27',['xb_ex_expression.cpp',['../xb__ex__expression_8cpp.html',1,'']]],
- ['xb_5fex_5fsql_2ecpp_28',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
- ['xb_5fex_5fssv_2ecpp_29',['xb_ex_ssv.cpp',['../xb__ex__ssv_8cpp.html',1,'']]],
- ['xb_5fex_5fstring_2ecpp_30',['xb_ex_string.cpp',['../xb__ex__string_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fcreate_5fdbf_2ecpp_31',['xb_ex_v3_create_dbf.cpp',['../xb__ex__v3__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fupd_5fdbf_2ecpp_32',['xb_ex_v3_upd_dbf.cpp',['../xb__ex__v3__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fcreate_5fdbf_2ecpp_33',['xb_ex_v4_create_dbf.cpp',['../xb__ex__v4__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fupd_5fdbf_2ecpp_34',['xb_ex_v4_upd_dbf.cpp',['../xb__ex__v4__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fexecsql_2ecpp_35',['xb_execsql.cpp',['../xb__execsql_8cpp.html',1,'']]],
- ['xb_5ffile_5fexists_36',['XB_FILE_EXISTS',['../xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0',1,'xbretcod.h']]],
- ['xb_5ffile_5fnot_5ffound_37',['XB_FILE_NOT_FOUND',['../xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc',1,'xbretcod.h']]],
- ['xb_5ffile_5ftype_5fnot_5fsupported_38',['XB_FILE_TYPE_NOT_SUPPORTED',['../xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596',1,'xbretcod.h']]],
- ['xb_5ffloat_5ffld_39',['XB_FLOAT_FLD',['../xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd',1,'xbdbf.h']]],
- ['xb_5ffmt_5fmonth_40',['XB_FMT_MONTH',['../xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d',1,'xbdate.h']]],
- ['xb_5ffmt_5fweek_41',['XB_FMT_WEEK',['../xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178',1,'xbdate.h']]],
- ['xb_5ffmt_5fyear_42',['XB_FMT_YEAR',['../xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4',1,'xbdate.h']]],
- ['xb_5fincompatible_5foperands_43',['XB_INCOMPATIBLE_OPERANDS',['../xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74',1,'xbretcod.h']]],
- ['xb_5finconsistent_5fparm_5flens_44',['XB_INCONSISTENT_PARM_LENS',['../xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fno_45',['XB_INVALID_BLOCK_NO',['../xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fsize_46',['XB_INVALID_BLOCK_SIZE',['../xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdata_47',['XB_INVALID_DATA',['../xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdate_48',['XB_INVALID_DATE',['../xbretcod_8h.html#a702475500357a27b8a34463be3e11925',1,'xbretcod.h']]],
- ['xb_5finvalid_5fexpression_49',['XB_INVALID_EXPRESSION',['../xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_50',['XB_INVALID_FIELD',['../xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5flen_51',['XB_INVALID_FIELD_LEN',['../xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fname_52',['XB_INVALID_FIELD_NAME',['../xbretcod_8h.html#a59403978784130834cf39434cb73f96e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fno_53',['XB_INVALID_FIELD_NO',['../xbretcod_8h.html#a09d6c08a44316f551108a74003efd381',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5ftype_54',['XB_INVALID_FIELD_TYPE',['../xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffunction_55',['XB_INVALID_FUNCTION',['../xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742',1,'xbretcod.h']]],
- ['xb_5finvalid_5findex_56',['XB_INVALID_INDEX',['../xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4',1,'xbretcod.h']]],
- ['xb_5finvalid_5fkeyno_57',['XB_INVALID_KEYNO',['../xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8',1,'xbretcod.h']]],
- ['xb_5finvalid_5flock_5foption_58',['XB_INVALID_LOCK_OPTION',['../xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec',1,'xbretcod.h']]],
- ['xb_5finvalid_5fmemo_5ffield_59',['XB_INVALID_MEMO_FIELD',['../xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f',1,'xbretcod.h']]],
- ['xb_5finvalid_5fnodelink_60',['XB_INVALID_NODELINK',['../xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb',1,'xbretcod.h']]],
- ['xb_5finvalid_5fobject_61',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
- ['xb_5finvalid_5foption_62',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fpage_63',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
- ['xb_5finvalid_5fparm_64',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
- ['xb_5finvalid_5frecord_65',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftable_5fname_66',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftag_67',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
- ['xb_5fkey_5fnot_5funique_68',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
- ['xb_5flimit_5freached_69',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
- ['xb_5flock_70',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
- ['xb_5flock_5ffailed_71',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
- ['xb_5flogical_5ffld_72',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
- ['xb_5fmax_5ferror_5fno_73',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
- ['xb_5fmemcpy_5ferror_74',['XB_MEMCPY_ERROR',['../xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d',1,'xbretcod.h']]],
- ['xb_5fmemo_5ffld_75',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
- ['xb_5fmulti_5fuser_76',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
- ['xb_5fno_5ferror_77',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
- ['xb_5fno_5fmemory_78',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
- ['xb_5fnot_5ffound_79',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
- ['xb_5fnot_5fopen_80',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
- ['xb_5fnumeric_5ffld_81',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
- ['xb_5fopen_82',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
- ['xb_5fopen_5ferror_83',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
- ['xb_5foverlay_84',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
- ['xb_5fpack_2ecpp_85',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
- ['xb_5fparse_5ferror_86',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
- ['xb_5fread_87',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
- ['xb_5fread_5ferror_88',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
- ['xb_5fread_5fwrite_89',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
- ['xb_5frename_5ferror_90',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
- ['xb_5fseek_5ferror_91',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
- ['xb_5fsingle_5fuser_92',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
- ['xb_5fsyntax_5ferror_93',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
- ['xb_5ftable_5fnot_5flocked_94',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
- ['xb_5ftblinfo_2ecpp_95',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
- ['xb_5ftest_5fbcd_2ecpp_96',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
- ['xb_5ftest_5fblockread_2ecpp_97',['xb_test_blockread.cpp',['../xb__test__blockread_8cpp.html',1,'']]],
- ['xb_5ftest_5fdate_2ecpp_98',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_99',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_100',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_101',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_102',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpnode_2ecpp_103',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpression_2ecpp_104',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
- ['xb_5ftest_5ffile_2ecpp_105',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
- ['xb_5ftest_5ffilter_2ecpp_106',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
- ['xb_5ftest_5ffuncs_2ecpp_107',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
- ['xb_5ftest_5flinklist_2ecpp_108',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
- ['xb_5ftest_5flock_2ecpp_109',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
- ['xb_5ftest_5flock2_2ecpp_110',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
- ['xb_5ftest_5flog_2ecpp_111',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
- ['xb_5ftest_5fmdx_2ecpp_112',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
- ['xb_5ftest_5fndx_2ecpp_113',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
- ['xb_5ftest_5fsql_2ecpp_114',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
- ['xb_5ftest_5fstring_2ecpp_115',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
- ['xb_5ftest_5ftblmgr_2ecpp_116',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
- ['xb_5ftest_5fuda_2ecpp_117',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
- ['xb_5ftest_5fxbase_2ecpp_118',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
- ['xb_5funbalanced_5fparens_119',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fquotes_120',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
- ['xb_5fundelall_2ecpp_121',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
- ['xb_5funlock_122',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
- ['xb_5fupdated_123',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
- ['xb_5fwrite_124',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
- ['xb_5fwrite_5ferror_125',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
- ['xbalttbl_2ecpp_126',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
- ['xbase_127',['xbase',['../classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004',1,'xb::xbFile']]],
- ['xbase_2eh_128',['xbase.h',['../xbase_8h.html',1,'']]],
- ['xbbcd_129',['xbBcd',['../classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add',1,'xb::xbXBase']]],
- ['xbbcd_2ecpp_130',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
- ['xbbcd_2eh_131',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
- ['xbblkread_2eh_132',['xbblkread.h',['../xbblkread_8h.html',1,'']]],
- ['xbblockread_2ecpp_133',['xbblockread.cpp',['../xbblockread_8cpp.html',1,'']]],
- ['xbbool_134',['xbBool',['../namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f',1,'xb']]],
- ['xbcrix_2ecpp_135',['xbcrix.cpp',['../xbcrix_8cpp.html',1,'']]],
- ['xbcrtbl_2ecpp_136',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
- ['xbcrtbl_2esave_2ecpp_137',['xbcrtbl.save.cpp',['../xbcrtbl_8save_8cpp.html',1,'']]],
- ['xbdate_138',['xbDate',['../classxb_1_1xbDate.html',1,'xb::xbDate'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)'],['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()']]],
- ['xbdate_2ecpp_139',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
- ['xbdate_2eh_140',['xbdate.h',['../xbdate_8h.html',1,'']]],
- ['xbdbf_141',['xbDbf',['../classxb_1_1xbDbf.html',1,'xb::xbDbf'],['../classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204',1,'xb::xbDbf::xbDbf()'],['../namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b',1,'xb::xbDbf()']]],
- ['xbdbf_2ecpp_142',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
- ['xbdbf_2eh_143',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
- ['xbdbf3_2ecpp_144',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
- ['xbdbf4_2ecpp_145',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
- ['xbdelete_2ecpp_146',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
- ['xbdouble_147',['xbDouble',['../namespacexb.html#a25f47b226ce924a5c78f97989b0744a2',1,'xb']]],
- ['xbdrpix_2ecpp_148',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
- ['xbdrptbl_2ecpp_149',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
- ['xberrormessages_150',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
- ['xbexp_151',['xbExp',['../classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc',1,'xb::xbXBase']]],
- ['xbexp_2ecpp_152',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
- ['xbexp_2eh_153',['xbexp.h',['../xbexp_8h.html',1,'']]],
- ['xbexpnode_2ecpp_154',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
- ['xbexpnode_2eh_155',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
- ['xbfalse_156',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
- ['xbfclose_157',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
- ['xbfeof_158',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
- ['xbfflush_159',['xbFflush',['../classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009',1,'xb::xbFile']]],
- ['xbfgetc_160',['xbFgetc',['../classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4',1,'xb::xbFile::xbFgetc(xbInt32 &amp;c)'],['../classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6',1,'xb::xbFile::xbFgetc(char &amp;c)']]],
- ['xbfgets_161',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
- ['xbfields_2ecpp_162',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
- ['xbfile_163',['xbFile',['../classxb_1_1xbFile.html',1,'xb::xbFile'],['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile::xbFile()']]],
- ['xbfile_2ecpp_164',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
- ['xbfile_2eh_165',['xbfile.h',['../xbfile_8h.html',1,'']]],
- ['xbfileno_166',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
- ['xbfilter_2ecpp_167',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
- ['xbfilter_2eh_168',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
- ['xbfloat_169',['xbFloat',['../namespacexb.html#a83aa6a550398db55973aa9fb4257e66e',1,'xb']]],
- ['xbfopen_170',['xbFopen',['../classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135',1,'xb::xbFile::xbFopen(const xbString &amp;sMode, const xbString &amp;sFileName, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode)'],['../classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c',1,'xb::xbFile::xbFopen(const xbString &amp;sOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode, xbInt16 iShareMode)']]],
- ['xbfputc_171',['xbFputc',['../classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896',1,'xb::xbFile::xbFputc(xbInt32 c)'],['../classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a',1,'xb::xbFile::xbFputc(xbInt32 c, xbInt32 iNoTimes)']]],
- ['xbfputs_172',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
- ['xbfread_173',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
- ['xbfseek_174',['xbFseek',['../classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d',1,'xb::xbFile']]],
- ['xbftell_175',['xbFtell',['../classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b',1,'xb::xbFile']]],
- ['xbfturnofffilebuffering_176',['xbFTurnOffFileBuffering',['../classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918',1,'xb::xbFile']]],
- ['xbfuncs_2ecpp_177',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
- ['xbfwrite_178',['xbFwrite',['../classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f',1,'xb::xbFile']]],
- ['xbindex_2eh_179',['xbindex.h',['../xbindex_8h.html',1,'']]],
- ['xbinsert_2ecpp_180',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
- ['xbixbase_2ecpp_181',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
- ['xbixmdx_2ecpp_182',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
- ['xbixndx_2ecpp_183',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
- ['xblnklst_2eh_184',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
- ['xblnklstord_2eh_185',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
- ['xblnknod_2eh_186',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
- ['xblog_187',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
- ['xblog_2ecpp_188',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
- ['xblog_2eh_189',['xblog.h',['../xblog_8h.html',1,'']]],
- ['xbmemcmp_190',['xbMemcmp',['../classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66',1,'xb::xbXBase']]],
- ['xbmemo_2ecpp_191',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
- ['xbmemo_2eh_192',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
- ['xbmemo3_2ecpp_193',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
- ['xbmemo4_2ecpp_194',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
- ['xbofft_195',['xbOffT',['../namespacexb.html#ac963d9fde6debb416303cfbed35fb793',1,'xb']]],
- ['xbreaduntil_196',['xbReadUntil',['../classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9',1,'xb::xbFile']]],
- ['xbremove_197',['xbRemove',['../classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48',1,'xb::xbFile::xbRemove()'],['../classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName, xbInt16 iOption)'],['../classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName)']]],
- ['xbrename_198',['xbRename',['../classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012',1,'xb::xbFile']]],
- ['xbretcod_2eh_199',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
- ['xbrewind_200',['xbRewind',['../classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505',1,'xb::xbFile']]],
- ['xbschema_201',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
- ['xbselect_2ecpp_202',['xbselect.cpp',['../xbselect_8cpp.html',1,'']]],
- ['xbset_2ecpp_203',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
- ['xbsleep_204',['xbSleep',['../classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf',1,'xb::xbXBase']]],
- ['xbsql_2ecpp_205',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
- ['xbsql_2eh_206',['xbsql.h',['../xbsql_8h.html',1,'']]],
- ['xbssv_207',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb::xbSsv'],['../classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b',1,'xb::xbSsv::xbSsv()']]],
- ['xbssv_2ecpp_208',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
- ['xbssv_2eh_209',['xbssv.h',['../xbssv_8h.html',1,'']]],
- ['xbstmt_2ecpp_210',['xbstmt.cpp',['../xbstmt_8cpp.html',1,'']]],
- ['xbstring_211',['xbString',['../classxb_1_1xbString.html',1,'xb::xbString'],['../classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe',1,'xb::xbString::xbString(xbDouble d)'],['../classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7',1,'xb::xbString::xbString(const char *=&quot;&quot;)'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &amp;s)'],['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)']]],
- ['xbstring_2ecpp_212',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
- ['xbstring_2eh_213',['xbstring.h',['../xbstring_8h.html',1,'']]],
- ['xbtag_2ecpp_214',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
- ['xbtag_2eh_215',['xbtag.h',['../xbtag_8h.html',1,'']]],
- ['xbtbllist_216',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
- ['xbtblmgr_217',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb::xbTblMgr'],['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr::xbTblMgr()']]],
- ['xbtblmgr_2ecpp_218',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
- ['xbtblmgr_2eh_219',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
- ['xbtrue_220',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]],
- ['xbtruncate_221',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
- ['xbtypes_2eh_222',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
- ['xbuda_2ecpp_223',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
- ['xbuda_2eh_224',['xbuda.h',['../xbuda_8h.html',1,'']]],
- ['xbxbase_225',['xbXBase',['../classxb_1_1xbXBase.html',1,'xb::xbXBase'],['../classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224',1,'xb::xbXBase::xbXBase()'],['../namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0',1,'xb::xbXBase()']]],
- ['xbxbase_2ecpp_226',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
- ['xbxbase_2eh_227',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
+ ['xb_5fex_5flog_2ecpp_28',['xb_ex_log.cpp',['../xb__ex__log_8cpp.html',1,'']]],
+ ['xb_5fex_5fsql_2ecpp_29',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
+ ['xb_5fex_5fssv_2ecpp_30',['xb_ex_ssv.cpp',['../xb__ex__ssv_8cpp.html',1,'']]],
+ ['xb_5fex_5fstring_2ecpp_31',['xb_ex_string.cpp',['../xb__ex__string_8cpp.html',1,'']]],
+ ['xb_5fex_5fv3_5fcreate_5fdbf_2ecpp_32',['xb_ex_v3_create_dbf.cpp',['../xb__ex__v3__create__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv3_5fupd_5fdbf_2ecpp_33',['xb_ex_v3_upd_dbf.cpp',['../xb__ex__v3__upd__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv4_5fcreate_5fdbf_2ecpp_34',['xb_ex_v4_create_dbf.cpp',['../xb__ex__v4__create__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv4_5fupd_5fdbf_2ecpp_35',['xb_ex_v4_upd_dbf.cpp',['../xb__ex__v4__upd__dbf_8cpp.html',1,'']]],
+ ['xb_5fexecsql_2ecpp_36',['xb_execsql.cpp',['../xb__execsql_8cpp.html',1,'']]],
+ ['xb_5ffile_5fexists_37',['XB_FILE_EXISTS',['../xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0',1,'xbretcod.h']]],
+ ['xb_5ffile_5fnot_5ffound_38',['XB_FILE_NOT_FOUND',['../xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc',1,'xbretcod.h']]],
+ ['xb_5ffile_5ftype_5fnot_5fsupported_39',['XB_FILE_TYPE_NOT_SUPPORTED',['../xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596',1,'xbretcod.h']]],
+ ['xb_5ffloat_5ffld_40',['XB_FLOAT_FLD',['../xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd',1,'xbdbf.h']]],
+ ['xb_5ffmt_5fmonth_41',['XB_FMT_MONTH',['../xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d',1,'xbdate.h']]],
+ ['xb_5ffmt_5fweek_42',['XB_FMT_WEEK',['../xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178',1,'xbdate.h']]],
+ ['xb_5ffmt_5fyear_43',['XB_FMT_YEAR',['../xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4',1,'xbdate.h']]],
+ ['xb_5fimport_2ecpp_44',['xb_import.cpp',['../xb__import_8cpp.html',1,'']]],
+ ['xb_5fincompatible_5foperands_45',['XB_INCOMPATIBLE_OPERANDS',['../xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74',1,'xbretcod.h']]],
+ ['xb_5finconsistent_5fparm_5flens_46',['XB_INCONSISTENT_PARM_LENS',['../xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fblock_5fno_47',['XB_INVALID_BLOCK_NO',['../xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fblock_5fsize_48',['XB_INVALID_BLOCK_SIZE',['../xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fdata_49',['XB_INVALID_DATA',['../xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fdate_50',['XB_INVALID_DATE',['../xbretcod_8h.html#a702475500357a27b8a34463be3e11925',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fexpression_51',['XB_INVALID_EXPRESSION',['../xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_52',['XB_INVALID_FIELD',['../xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5flen_53',['XB_INVALID_FIELD_LEN',['../xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5fname_54',['XB_INVALID_FIELD_NAME',['../xbretcod_8h.html#a59403978784130834cf39434cb73f96e',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5fno_55',['XB_INVALID_FIELD_NO',['../xbretcod_8h.html#a09d6c08a44316f551108a74003efd381',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5ftype_56',['XB_INVALID_FIELD_TYPE',['../xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffunction_57',['XB_INVALID_FUNCTION',['../xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742',1,'xbretcod.h']]],
+ ['xb_5finvalid_5findex_58',['XB_INVALID_INDEX',['../xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fkeyno_59',['XB_INVALID_KEYNO',['../xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8',1,'xbretcod.h']]],
+ ['xb_5finvalid_5flock_5foption_60',['XB_INVALID_LOCK_OPTION',['../xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fmemo_5ffield_61',['XB_INVALID_MEMO_FIELD',['../xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fnodelink_62',['XB_INVALID_NODELINK',['../xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fobject_63',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
+ ['xb_5finvalid_5foption_64',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fpage_65',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fparameter_66',['XB_INVALID_PARAMETER',['../xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fparm_67',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
+ ['xb_5finvalid_5frecord_68',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftable_5fname_69',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftag_70',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
+ ['xb_5fkey_5fnot_5funique_71',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
+ ['xb_5flimit_5freached_72',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
+ ['xb_5flock_73',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
+ ['xb_5flock_5ffailed_74',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
+ ['xb_5flogical_5ffld_75',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
+ ['xb_5fmax_5ferror_5fno_76',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
+ ['xb_5fmemcpy_5ferror_77',['XB_MEMCPY_ERROR',['../xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d',1,'xbretcod.h']]],
+ ['xb_5fmemo_5ffld_78',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
+ ['xb_5fmulti_5fuser_79',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
+ ['xb_5fno_5ferror_80',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
+ ['xb_5fno_5fmemory_81',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
+ ['xb_5fnot_5ffound_82',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
+ ['xb_5fnot_5fopen_83',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
+ ['xb_5fnull_5fdate_84',['XB_NULL_DATE',['../xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2',1,'xbexp.h']]],
+ ['xb_5fnumeric_5ffld_85',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
+ ['xb_5fopen_86',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
+ ['xb_5fopen_5ferror_87',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
+ ['xb_5foverlay_88',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
+ ['xb_5fpack_2ecpp_89',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
+ ['xb_5fparse_5ferror_90',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
+ ['xb_5fread_91',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
+ ['xb_5fread_5ferror_92',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
+ ['xb_5fread_5fwrite_93',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
+ ['xb_5frename_5ferror_94',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
+ ['xb_5fseek_5ferror_95',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
+ ['xb_5fsingle_5fuser_96',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
+ ['xb_5fsyntax_5ferror_97',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
+ ['xb_5ftable_5fnot_5flocked_98',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
+ ['xb_5ftblinfo_2ecpp_99',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
+ ['xb_5ftest_5fbcd_2ecpp_100',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
+ ['xb_5ftest_5fblockread_2ecpp_101',['xb_test_blockread.cpp',['../xb__test__blockread_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdate_2ecpp_102',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_103',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_104',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_105',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_106',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpnode_2ecpp_107',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpression_2ecpp_108',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffile_2ecpp_109',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffilter_2ecpp_110',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffuncs_2ecpp_111',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
+ ['xb_5ftest_5flinklist_2ecpp_112',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock_2ecpp_113',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock2_2ecpp_114',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
+ ['xb_5ftest_5flog_2ecpp_115',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
+ ['xb_5ftest_5fmdx_2ecpp_116',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fndx_2ecpp_117',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fsql_2ecpp_118',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
+ ['xb_5ftest_5fstring_2ecpp_119',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftblmgr_2ecpp_120',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftdx_2ecpp_121',['xb_test_tdx.cpp',['../xb__test__tdx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fuda_2ecpp_122',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
+ ['xb_5ftest_5fxbase_2ecpp_123',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
+ ['xb_5funbalanced_5fparens_124',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
+ ['xb_5funbalanced_5fquotes_125',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
+ ['xb_5fundelall_2ecpp_126',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
+ ['xb_5funlock_127',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
+ ['xb_5fupdated_128',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
+ ['xb_5fwrite_129',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
+ ['xb_5fwrite_5ferror_130',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
+ ['xbalttbl_2ecpp_131',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
+ ['xbase_132',['xbase',['../classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004',1,'xb::xbFile']]],
+ ['xbase_2eh_133',['xbase.h',['../xbase_8h.html',1,'']]],
+ ['xbbcd_134',['xbBcd',['../classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add',1,'xb::xbXBase']]],
+ ['xbbcd_2ecpp_135',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
+ ['xbbcd_2eh_136',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
+ ['xbblkread_2eh_137',['xbblkread.h',['../xbblkread_8h.html',1,'']]],
+ ['xbblockread_2ecpp_138',['xbblockread.cpp',['../xbblockread_8cpp.html',1,'']]],
+ ['xbbool_139',['xbBool',['../namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f',1,'xb']]],
+ ['xbcrix_2ecpp_140',['xbcrix.cpp',['../sql_2xbcrix_8cpp.html',1,'(Global Namespace)'],['../include_2xbcrix_8cpp.html',1,'(Global Namespace)']]],
+ ['xbcrtbl_2ecpp_141',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
+ ['xbdate_142',['xbDate',['../classxb_1_1xbDate.html',1,'xb::xbDate'],['../classxb_1_1xbDate.html#a8dfc827b466be3c5e3def599277dfa43',1,'xb::xbDate::xbDate(xbUInt16 iInit)'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)'],['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()']]],
+ ['xbdate_2ecpp_143',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
+ ['xbdate_2eh_144',['xbdate.h',['../xbdate_8h.html',1,'']]],
+ ['xbdbf_145',['xbDbf',['../classxb_1_1xbDbf.html',1,'xb::xbDbf'],['../classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204',1,'xb::xbDbf::xbDbf()'],['../namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b',1,'xb::xbDbf()']]],
+ ['xbdbf_2ecpp_146',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
+ ['xbdbf_2eh_147',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
+ ['xbdbf3_2ecpp_148',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
+ ['xbdbf4_2ecpp_149',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
+ ['xbdelete_2ecpp_150',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
+ ['xbdouble_151',['xbDouble',['../namespacexb.html#a25f47b226ce924a5c78f97989b0744a2',1,'xb']]],
+ ['xbdrpix_2ecpp_152',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
+ ['xbdrptbl_2ecpp_153',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
+ ['xberrormessages_154',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
+ ['xbexp_155',['xbExp',['../classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc',1,'xb::xbXBase']]],
+ ['xbexp_2ecpp_156',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
+ ['xbexp_2eh_157',['xbexp.h',['../xbexp_8h.html',1,'']]],
+ ['xbexpnode_2ecpp_158',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
+ ['xbexpnode_2eh_159',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
+ ['xbfalse_160',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
+ ['xbfclose_161',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
+ ['xbfeof_162',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
+ ['xbfflush_163',['xbFflush',['../classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009',1,'xb::xbFile']]],
+ ['xbfgetc_164',['xbFgetc',['../classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4',1,'xb::xbFile::xbFgetc(xbInt32 &amp;c)'],['../classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6',1,'xb::xbFile::xbFgetc(char &amp;c)']]],
+ ['xbfgets_165',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
+ ['xbfields_2ecpp_166',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
+ ['xbfile_167',['xbFile',['../classxb_1_1xbFile.html',1,'xb::xbFile'],['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile::xbFile()']]],
+ ['xbfile_2ecpp_168',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
+ ['xbfile_2eh_169',['xbfile.h',['../xbfile_8h.html',1,'']]],
+ ['xbfileno_170',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
+ ['xbfilter_2ecpp_171',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
+ ['xbfilter_2eh_172',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
+ ['xbfloat_173',['xbFloat',['../namespacexb.html#a83aa6a550398db55973aa9fb4257e66e',1,'xb']]],
+ ['xbfopen_174',['xbFopen',['../classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c',1,'xb::xbFile::xbFopen(const xbString &amp;sOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode)'],['../classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135',1,'xb::xbFile::xbFopen(const xbString &amp;sMode, const xbString &amp;sFileName, xbInt16 iShareMode)']]],
+ ['xbfputc_175',['xbFputc',['../classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a',1,'xb::xbFile::xbFputc(xbInt32 c, xbInt32 iNoTimes)'],['../classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896',1,'xb::xbFile::xbFputc(xbInt32 c)']]],
+ ['xbfputs_176',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
+ ['xbfread_177',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
+ ['xbfseek_178',['xbFseek',['../classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d',1,'xb::xbFile']]],
+ ['xbftell_179',['xbFtell',['../classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b',1,'xb::xbFile']]],
+ ['xbfturnofffilebuffering_180',['xbFTurnOffFileBuffering',['../classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918',1,'xb::xbFile']]],
+ ['xbfuncs_2ecpp_181',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
+ ['xbfwrite_182',['xbFwrite',['../classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f',1,'xb::xbFile']]],
+ ['xbindex_2eh_183',['xbindex.h',['../xbindex_8h.html',1,'']]],
+ ['xbinsert_2ecpp_184',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
+ ['xbixbase_2ecpp_185',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
+ ['xbixmdx_2ecpp_186',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
+ ['xbixndx_2ecpp_187',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
+ ['xbixtdx_2ecpp_188',['xbixtdx.cpp',['../xbixtdx_8cpp.html',1,'']]],
+ ['xblnklst_2eh_189',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
+ ['xblnklstord_2eh_190',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
+ ['xblnknod_2eh_191',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
+ ['xblog_192',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
+ ['xblog_2ecpp_193',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
+ ['xblog_2eh_194',['xblog.h',['../xblog_8h.html',1,'']]],
+ ['xbmemcmp_195',['xbMemcmp',['../classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66',1,'xb::xbXBase']]],
+ ['xbmemo_2ecpp_196',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
+ ['xbmemo_2eh_197',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
+ ['xbmemo3_2ecpp_198',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
+ ['xbmemo4_2ecpp_199',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
+ ['xbofft_200',['xbOffT',['../namespacexb.html#ac963d9fde6debb416303cfbed35fb793',1,'xb']]],
+ ['xbreaduntil_201',['xbReadUntil',['../classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9',1,'xb::xbFile']]],
+ ['xbremove_202',['xbRemove',['../classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName, xbInt16 iOption)'],['../classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48',1,'xb::xbFile::xbRemove()'],['../classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5',1,'xb::xbFile::xbRemove(const xbString &amp;sFileName)']]],
+ ['xbrename_203',['xbRename',['../classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012',1,'xb::xbFile']]],
+ ['xbretcod_2eh_204',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
+ ['xbrewind_205',['xbRewind',['../classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505',1,'xb::xbFile']]],
+ ['xbschema_206',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
+ ['xbselect_2ecpp_207',['xbselect.cpp',['../xbselect_8cpp.html',1,'']]],
+ ['xbset_2ecpp_208',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
+ ['xbsleep_209',['xbSleep',['../classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf',1,'xb::xbXBase']]],
+ ['xbsql_2ecpp_210',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
+ ['xbsql_2eh_211',['xbsql.h',['../xbsql_8h.html',1,'']]],
+ ['xbssv_212',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb::xbSsv'],['../classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b',1,'xb::xbSsv::xbSsv()']]],
+ ['xbssv_2ecpp_213',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
+ ['xbssv_2eh_214',['xbssv.h',['../xbssv_8h.html',1,'']]],
+ ['xbstmt_2ecpp_215',['xbstmt.cpp',['../xbstmt_8cpp.html',1,'']]],
+ ['xbstring_216',['xbString',['../classxb_1_1xbString.html',1,'xb::xbString'],['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &amp;s)'],['../classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7',1,'xb::xbString::xbString(const char *=&quot;&quot;)'],['../classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe',1,'xb::xbString::xbString(xbDouble d)']]],
+ ['xbstring_2ecpp_217',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
+ ['xbstring_2eh_218',['xbstring.h',['../xbstring_8h.html',1,'']]],
+ ['xbtag_2ecpp_219',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
+ ['xbtag_2eh_220',['xbtag.h',['../xbtag_8h.html',1,'']]],
+ ['xbtbllist_221',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
+ ['xbtblmgr_222',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb::xbTblMgr'],['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr::xbTblMgr()']]],
+ ['xbtblmgr_2ecpp_223',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
+ ['xbtblmgr_2eh_224',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
+ ['xbtrue_225',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]],
+ ['xbtruncate_226',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
+ ['xbtypes_2eh_227',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
+ ['xbuda_2ecpp_228',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
+ ['xbuda_2eh_229',['xbuda.h',['../xbuda_8h.html',1,'']]],
+ ['xbxbase_230',['xbXBase',['../classxb_1_1xbXBase.html',1,'xb::xbXBase'],['../classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224',1,'xb::xbXBase::xbXBase()'],['../namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0',1,'xb::xbXBase()']]],
+ ['xbxbase_2ecpp_231',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
+ ['xbxbase_2eh_232',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
];
diff --git a/docs/doxygen/html/search/all_2.js b/docs/doxygen/html/search/all_2.js
index 83b0227..fc2ebc9 100644
--- a/docs/doxygen/html/search/all_2.js
+++ b/docs/doxygen/html/search/all_2.js
@@ -4,28 +4,30 @@ var searchData=
['cencryptionflag_1',['cEncryptionFlag',['../classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4',1,'xb::xbDbf']]],
['centuryof_2',['CenturyOf',['../classxb_1_1xbDate.html#a38b2c5285c69ed65e94ece6c22dafde0',1,'xb::xbDate']]],
['cfieldname_3',['cFieldName',['../structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e',1,'xb::xbSchema']]],
- ['chardayof_4',['CharDayOf',['../classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c',1,'xb::xbDate']]],
- ['charmonthof_5',['CharMonthOf',['../classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac',1,'xb::xbDate']]],
- ['chrontime_6',['ChronTime',['../tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7',1,'tstfuncs.cpp']]],
- ['cindexflag_7',['cIndexFlag',['../classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b',1,'xb::xbDbf']]],
- ['clangdriver_8',['cLangDriver',['../classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1',1,'xb::xbDbf']]],
- ['close_9',['Close',['../classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d',1,'xb::xbDbf']]],
- ['closealltables_10',['CloseAllTables',['../classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b',1,'xb::xbXBase']]],
- ['commit_11',['Commit',['../classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f',1,'xb::xbDbf']]],
- ['copy_12',['Copy',['../classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792',1,'xb::xbString']]],
- ['copydbfstructure_13',['CopyDbfStructure',['../classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264',1,'xb::xbDbf']]],
- ['countchar_14',['CountChar',['../classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72',1,'xb::xbString::CountChar(char c, xbInt16 iOpt) const'],['../classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f',1,'xb::xbString::CountChar(char c) const']]],
- ['createtable_15',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
- ['createuniquefilename_16',['CreateUniqueFileName',['../classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut)'],['../classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut, xbInt16 iOption)']]],
- ['ctod_17',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
- ['ctransactionflag_18',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
- ['ctype_19',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
- ['cupdatedd_20',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
- ['cupdatemm_21',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
- ['cupdateyy_22',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
- ['cversion_23',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]],
- ['cvthexchar_24',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
- ['cvthexstring_25',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
- ['cvtlonglong_26',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
- ['cvtulonglong_27',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
+ ['cfldtype_4',['cFldType',['../structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3',1,'sFldMap']]],
+ ['chardayof_5',['CharDayOf',['../classxb_1_1xbDate.html#a9fc29730b66cddfbb58c69992a99cc7c',1,'xb::xbDate']]],
+ ['charmonthof_6',['CharMonthOf',['../classxb_1_1xbDate.html#afffc84f02bd421335ff8ebe9fb3db0ac',1,'xb::xbDate']]],
+ ['chrontime_7',['ChronTime',['../tstfuncs_8cpp.html#af990eed1e43605771a5810196b4043f7',1,'tstfuncs.cpp']]],
+ ['cindexflag_8',['cIndexFlag',['../classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b',1,'xb::xbDbf']]],
+ ['clangdriver_9',['cLangDriver',['../classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1',1,'xb::xbDbf']]],
+ ['close_10',['Close',['../classxb_1_1xbDbf.html#ad68d73113e54e1b5f326e90f45e9989d',1,'xb::xbDbf']]],
+ ['closealltables_11',['CloseAllTables',['../classxb_1_1xbXBase.html#afccb552ca0daff779c0500ff20d22c2b',1,'xb::xbXBase']]],
+ ['commit_12',['Commit',['../classxb_1_1xbDbf.html#abd69532c885ab72bcf3fb5066b318f4f',1,'xb::xbDbf']]],
+ ['copy_13',['Copy',['../classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792',1,'xb::xbString']]],
+ ['copydbfstructure_14',['CopyDbfStructure',['../classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264',1,'xb::xbDbf']]],
+ ['countchar_15',['CountChar',['../classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72',1,'xb::xbString::CountChar(char c, xbInt16 iOpt) const'],['../classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f',1,'xb::xbString::CountChar(char c) const']]],
+ ['createfqn_16',['CreateFqn',['../classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1',1,'xb::xbXBase']]],
+ ['createtable_17',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
+ ['createuniquefilename_18',['CreateUniqueFileName',['../classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff',1,'xb::xbFile']]],
+ ['ctod_19',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
+ ['ctransactionflag_20',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
+ ['ctype_21',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
+ ['cupdatedd_22',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
+ ['cupdatemm_23',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
+ ['cupdateyy_24',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
+ ['cversion_25',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]],
+ ['cvthexchar_26',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
+ ['cvthexstring_27',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
+ ['cvtlonglong_28',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
+ ['cvtulonglong_29',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
];
diff --git a/docs/doxygen/html/search/all_3.js b/docs/doxygen/html/search/all_3.js
index e2fc7b3..9a4d44a 100644
--- a/docs/doxygen/html/search/all_3.js
+++ b/docs/doxygen/html/search/all_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#a309b5b1fb6a5c048c4bfb404d011ac55',1,'xb::xbDbf']]],
+ ['dumpheader_15',['DumpHeader',['../classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb',1,'xb::xbDbf']]],
['dumprecord_16',['DumpRecord',['../classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/all_4.js b/docs/doxygen/html/search/all_4.js
index 30781e1..686c08e 100644
--- a/docs/doxygen/html/search/all_4.js
+++ b/docs/doxygen/html/search/all_4.js
@@ -12,5 +12,5 @@ var searchData=
['eputuint16_9',['ePutUInt16',['../classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40',1,'xb::xbFile']]],
['eputuint32_10',['ePutUInt32',['../classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173',1,'xb::xbFile']]],
['errorcodetext_11',['ErrorCodeText',['../classxb_1_1xbSsv.html#a6219f1b5e24ea12fe158cd5aea56988e',1,'xb::xbSsv']]],
- ['extractelement_12',['ExtractElement',['../classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e',1,'xb::xbString']]]
+ ['extractelement_12',['ExtractElement',['../classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7',1,'xb::xbString::ExtractElement(xbString &amp;s, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)'],['../classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e',1,'xb::xbString::ExtractElement(const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)']]]
];
diff --git a/docs/doxygen/html/search/all_6.js b/docs/doxygen/html/search/all_6.js
index 1cedf85..cee5729 100644
--- a/docs/doxygen/html/search/all_6.js
+++ b/docs/doxygen/html/search/all_6.js
@@ -17,53 +17,55 @@ var searchData=
['getendiantype_14',['GetEndianType',['../classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243',1,'xb::xbSsv']]],
['geteof_15',['GetEof',['../classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d',1,'xb::xbDbf']]],
['geterrormessage_16',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
- ['getfield_17',['GetField',['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const']]],
+ ['getfield_17',['GetField',['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const']]],
['getfieldcnt_18',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
- ['getfielddecimal_19',['GetFieldDecimal',['../classxb_1_1xbDbf.html#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_19',['GetFieldDecimal',['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const'],['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const']]],
['getfieldlen_20',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &amp;iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &amp;sFieldName, xbInt16 &amp;iFieldLen) const']]],
['getfieldname_21',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
['getfieldno_22',['GetFieldNo',['../classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName, xbInt16 &amp;iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName) const']]],
['getfieldtype_23',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &amp;cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &amp;sFieldName, char &amp;cFieldType) const']]],
['getfiledirpart_24',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &amp;sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileDirPartOut) const']]],
- ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#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']]],
+ ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileExtPartOut) const'],['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &amp;sFileExtPartOut) const']]],
['getfilemtime_26',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
['getfilename_27',['GetFileName',['../classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a',1,'xb::xbFile']]],
['getfilenamepart_28',['GetFileNamePart',['../classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a',1,'xb::xbFile::GetFileNamePart(xbString &amp;sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileNamePartOut) const']]],
['getfilesize_29',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
['getfiletype_30',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
['getfirstrecord_31',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
- ['getfloatfield_32',['GetFloatField',['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &amp;sFieldName, xbFloat &amp;fFieldValue) const'],['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &amp;fFieldValue) const']]],
+ ['getfloatfield_32',['GetFloatField',['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &amp;fFieldValue) const'],['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &amp;sFieldName, xbFloat &amp;fFieldValue) const']]],
['getfqfilename_33',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
['getfunctioninfo_34',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
['getheaderlen_35',['GetHeaderLen',['../classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb',1,'xb::xbDbf']]],
['gethomedir_36',['GetHomeDir',['../classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9',1,'xb::xbSsv']]],
['getlastpos_37',['GetLastPos',['../classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df',1,'xb::xbString::GetLastPos(char c) const'],['../classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646',1,'xb::xbString::GetLastPos(const char *s) const']]],
['getlastrecord_38',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
- ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv::GetLogDirectory()'],['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase::GetLogDirectory()']]],
- ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv::GetLogFileName()'],['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase::GetLogFileName() const']]],
+ ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv']]],
+ ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv']]],
['getlogfqfilename_41',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
- ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const']]],
- ['getlogstatus_43',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
- ['getlongfield_44',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &amp;sFieldName, xbInt32 &amp;lFieldValue) const']]],
- ['getmultiuser_45',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
- ['getnextrecord_46',['GetNextRecord',['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()']]],
- ['getnextsqlcmd_47',['GetNextSqlCmd',['../xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e',1,'xb_execsql.cpp']]],
- ['getopenmode_48',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
- ['getopentablecount_49',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
- ['getpathseparator_50',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString']]],
- ['getprevrecord_51',['GetPrevRecord',['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()'],['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)']]],
- ['getrawfield_52',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
- ['getrecord_53',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
- ['getrecordbuf_54',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
- ['getrecordcnt_55',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
- ['getrecordcount_56',['GetRecordCount',['../classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce',1,'xb::xbDbf']]],
- ['getrecordlen_57',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
- ['getsharemode_58',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
- ['getsize_59',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
- ['gettblalias_60',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
- ['gettbllistentry_61',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
- ['getulongfield_62',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &amp;sFieldName, xbUInt32 &amp;lFieldValue) const']]],
- ['getversion_63',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
- ['getxbasefiletypebyte_64',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, xbInt16 &amp;iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)']]],
- ['getxbaseptr_65',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
+ ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const']]],
+ ['getlogsize_43',['GetLogSize',['../classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355',1,'xb::xbXBase']]],
+ ['getlogstatus_44',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
+ ['getlongfield_45',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &amp;sFieldName, xbInt32 &amp;lFieldValue) const']]],
+ ['getmultiuser_46',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
+ ['getnextrecord_47',['GetNextRecord',['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)']]],
+ ['getnextsqlcmd_48',['GetNextSqlCmd',['../xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945',1,'xb_execsql.cpp']]],
+ ['getnullsts_49',['GetNullSts',['../classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e',1,'xb::xbDbf::GetNullSts(xbInt16 iFieldNo, xbBool &amp;bIsNull, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ae9a3f726ce5229ed021bfce0515050fc',1,'xb::xbDbf::GetNullSts(xbInt16 iFieldNo, xbBool &amp;bIsNull) const'],['../classxb_1_1xbDbf.html#a909788123ce0694b65dfcf036380d918',1,'xb::xbDbf::GetNullSts(const xbString &amp;sFieldName, xbBool &amp;bIsNull) const']]],
+ ['getopenmode_50',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
+ ['getopentablecount_51',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
+ ['getpathseparator_52',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString::GetPathSeparator()'],['../classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35',1,'xb::xbSsv::GetPathSeparator()']]],
+ ['getprevrecord_53',['GetPrevRecord',['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()'],['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)']]],
+ ['getrawfield_54',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
+ ['getrecord_55',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
+ ['getrecordbuf_56',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
+ ['getrecordcnt_57',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
+ ['getrecordlen_58',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
+ ['getsharemode_59',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
+ ['getsize_60',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
+ ['gettblalias_61',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
+ ['gettbllistentry_62',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
+ ['gettempdirectory_63',['GetTempDirectory',['../classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61',1,'xb::xbSsv']]],
+ ['getulongfield_64',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &amp;sFieldName, xbUInt32 &amp;lFieldValue) const']]],
+ ['getversion_65',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
+ ['getxbasefiletypebyte_66',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, xbInt16 &amp;iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)']]],
+ ['getxbaseptr_67',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/all_8.js b/docs/doxygen/html/search/all_8.js
index b9794d9..d288171 100644
--- a/docs/doxygen/html/search/all_8.js
+++ b/docs/doxygen/html/search/all_8.js
@@ -5,11 +5,13 @@ var searchData=
['iendiantype_2',['iEndianType',['../classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3',1,'xb::xbSsv']]],
['ifieldlen_3',['iFieldLen',['../structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac',1,'xb::xbSchema']]],
['ifileversion_4',['iFileVersion',['../classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388',1,'xb::xbDbf']]],
- ['inittime_5',['InitTime',['../tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e',1,'tstfuncs.cpp']]],
- ['initvars_6',['InitVars',['../classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829',1,'xb::xbDbf']]],
- ['inoofdecs_7',['iNoOfDecs',['../structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9',1,'xb::xbSchema']]],
- ['inooffields_8',['iNoOfFields',['../classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a',1,'xb::xbDbf']]],
- ['isempty_9',['IsEmpty',['../classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3',1,'xb::xbString']]],
- ['isleapyear_10',['IsLeapYear',['../classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95',1,'xb::xbDate::IsLeapYear(xbInt16 iYear) const'],['../classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b',1,'xb::xbDate::IsLeapYear() const']]],
- ['isnull_11',['IsNull',['../classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500',1,'xb::xbString']]]
+ ['ifldno_5',['iFldNo',['../structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723',1,'sFldMap']]],
+ ['inittime_6',['InitTime',['../tstfuncs_8cpp.html#ab1f17da15e67a8b2460d5a88b7a3db6e',1,'tstfuncs.cpp']]],
+ ['initvars_7',['InitVars',['../classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829',1,'xb::xbDbf']]],
+ ['inoofdecs_8',['iNoOfDecs',['../structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9',1,'xb::xbSchema']]],
+ ['inooffields_9',['iNoOfFields',['../classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a',1,'xb::xbDbf']]],
+ ['irecpos_10',['iRecPos',['../structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f',1,'sFldMap']]],
+ ['isempty_11',['IsEmpty',['../classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3',1,'xb::xbString']]],
+ ['isleapyear_12',['IsLeapYear',['../classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95',1,'xb::xbDate::IsLeapYear(xbInt16 iYear) const'],['../classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b',1,'xb::xbDate::IsLeapYear() const']]],
+ ['isnull_13',['IsNull',['../classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658',1,'xb::xbDate::IsNull()'],['../classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500',1,'xb::xbString::IsNull()']]]
];
diff --git a/docs/doxygen/html/search/all_b.js b/docs/doxygen/html/search/all_b.js
index b877785..9c2aae0 100644
--- a/docs/doxygen/html/search/all_b.js
+++ b/docs/doxygen/html/search/all_b.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['main_0',['main',['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_execsql.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_tblinfo.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_file.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_undelall.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_expression.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expression.cpp']]],
+ ['main_0',['main',['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tdx.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_execsql.cpp'],['../xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_import.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_tblinfo.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_file.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_undelall.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_expression.cpp'],['../xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_log.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689',1,'main(int, char **av):&#160;xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expression.cpp']]],
['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950',1,'xb::xbDbf']]],
['mid_2',['Mid',['../classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7',1,'xb::xbString']]],
['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]],
diff --git a/docs/doxygen/html/search/all_c.js b/docs/doxygen/html/search/all_c.js
index 973aa37..4a79f03 100644
--- a/docs/doxygen/html/search/all_c.js
+++ b/docs/doxygen/html/search/all_c.js
@@ -1,4 +1,5 @@
var searchData=
[
- ['namesuffixmissing_0',['NameSuffixMissing',['../classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e',1,'xb::xbFile']]]
+ ['namesuffixmissing_0',['NameSuffixMissing',['../classxb_1_1xbFile.html#a361e3cc318bbf1c4d10f069e0800a24e',1,'xb::xbFile']]],
+ ['next_1',['next',['../structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa',1,'sFldMap']]]
];
diff --git a/docs/doxygen/html/search/all_e.js b/docs/doxygen/html/search/all_e.js
index 6ef5a5b..ad8f3ae 100644
--- a/docs/doxygen/html/search/all_e.js
+++ b/docs/doxygen/html/search/all_e.js
@@ -5,10 +5,10 @@ var searchData=
['padright_2',['PadRight',['../classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284',1,'xb::xbString']]],
['pdbf_3',['pDbf',['../structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6',1,'xb::xbTblList']]],
['pnext_4',['pNext',['../structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c',1,'xb::xbTblList']]],
- ['pos_5',['Pos',['../classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da',1,'xb::xbString::Pos(const char *s) const'],['../classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b',1,'xb::xbString::Pos(char c) const'],['../classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581',1,'xb::xbString::Pos(char c, xbUInt32 ulStartPos) const']]],
- ['printhelp_6',['PrintHelp',['../xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumprecs.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_undelall.cpp']]],
+ ['pos_5',['Pos',['../classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581',1,'xb::xbString::Pos(char c, xbUInt32 ulStartPos) const'],['../classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b',1,'xb::xbString::Pos(char c) const'],['../classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da',1,'xb::xbString::Pos(const char *s) const']]],
+ ['printhelp_6',['PrintHelp',['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_undelall.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_tblinfo.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_pack.cpp'],['../xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_import.cpp'],['../xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_execsql.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumprecs.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumpdbt.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_deletall.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp():&#160;xb_dbfutil.cpp'],['../xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_copydbf.cpp']]],
['printresult_7',['PrintResult',['../xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda',1,'xb_ex_expression.cpp']]],
- ['printversion_8',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumprecs.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_undelall.cpp']]],
+ ['printversion_8',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_execsql.cpp'],['../xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_import.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_undelall.cpp']]],
['psfqtblname_9',['psFqTblName',['../structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d',1,'xb::xbTblList']]],
['pstblalias_10',['psTblAlias',['../structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05',1,'xb::xbTblList']]],
['pstblname_11',['psTblName',['../structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f',1,'xb::xbTblList']]],
@@ -18,7 +18,7 @@ var searchData=
['putfield_15',['PutField',['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &amp;sFieldData)']]],
['putfloatfield_16',['PutFloatField',['../classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8',1,'xb::xbDbf::PutFloatField(xbInt16 iFieldNo, xbFloat fFieldValue)'],['../classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad',1,'xb::xbDbf::PutFloatField(const xbString &amp;sFieldName, xbFloat fFieldValue)']]],
['putlogicalfield_17',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, xbBool bFieldData)'],['../classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, xbBool bFieldData)']]],
- ['putlongfield_18',['PutLongField',['../classxb_1_1xbDbf.html#ae7aad223119edb3d541e9f65e88c9f2f',1,'xb::xbDbf::PutLongField(const xbString &amp;sFieldNo, xbInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47',1,'xb::xbDbf::PutLongField(xbInt16 iFieldNo, xbInt32 lFieldValue)']]],
- ['putrecord_19',['PutRecord',['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)'],['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()']]],
+ ['putlongfield_18',['PutLongField',['../classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47',1,'xb::xbDbf::PutLongField(xbInt16 iFieldNo, xbInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#a0692d1776a725c2f61d4c14677e9307c',1,'xb::xbDbf::PutLongField(const xbString &amp;sFieldName, xbInt32 lFieldValue)']]],
+ ['putrecord_19',['PutRecord',['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()'],['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)']]],
['putulongfield_20',['PutULongField',['../classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381',1,'xb::xbDbf::PutULongField(const xbString &amp;sFieldNo, xbUInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2',1,'xb::xbDbf::PutULongField(xbInt16 iFieldNo, xbUInt32 lFieldValue)']]]
];
diff --git a/docs/doxygen/html/search/classes_0.js b/docs/doxygen/html/search/classes_0.js
index b0f0a44..cbb027a 100644
--- a/docs/doxygen/html/search/classes_0.js
+++ b/docs/doxygen/html/search/classes_0.js
@@ -1,12 +1,4 @@
var searchData=
[
- ['xbdate_0',['xbDate',['../classxb_1_1xbDate.html',1,'xb']]],
- ['xbdbf_1',['xbDbf',['../classxb_1_1xbDbf.html',1,'xb']]],
- ['xbfile_2',['xbFile',['../classxb_1_1xbFile.html',1,'xb']]],
- ['xbschema_3',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
- ['xbssv_4',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb']]],
- ['xbstring_5',['xbString',['../classxb_1_1xbString.html',1,'xb']]],
- ['xbtbllist_6',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
- ['xbtblmgr_7',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb']]],
- ['xbxbase_8',['xbXBase',['../classxb_1_1xbXBase.html',1,'xb']]]
+ ['sfldmap_0',['sFldMap',['../structsFldMap.html',1,'']]]
];
diff --git a/docs/doxygen/html/search/classes_1.html b/docs/doxygen/html/search/classes_1.html
new file mode 100644
index 0000000..3c668de
--- /dev/null
+++ b/docs/doxygen/html/search/classes_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/docs/doxygen/html/search/classes_1.js b/docs/doxygen/html/search/classes_1.js
new file mode 100644
index 0000000..b0f0a44
--- /dev/null
+++ b/docs/doxygen/html/search/classes_1.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+ ['xbdate_0',['xbDate',['../classxb_1_1xbDate.html',1,'xb']]],
+ ['xbdbf_1',['xbDbf',['../classxb_1_1xbDbf.html',1,'xb']]],
+ ['xbfile_2',['xbFile',['../classxb_1_1xbFile.html',1,'xb']]],
+ ['xbschema_3',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
+ ['xbssv_4',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb']]],
+ ['xbstring_5',['xbString',['../classxb_1_1xbString.html',1,'xb']]],
+ ['xbtbllist_6',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
+ ['xbtblmgr_7',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb']]],
+ ['xbxbase_8',['xbXBase',['../classxb_1_1xbXBase.html',1,'xb']]]
+];
diff --git a/docs/doxygen/html/search/defines_3.js b/docs/doxygen/html/search/defines_3.js
index da8097a..fe97605 100644
--- a/docs/doxygen/html/search/defines_3.js
+++ b/docs/doxygen/html/search/defines_3.js
@@ -47,43 +47,45 @@ var searchData=
['xb_5finvalid_5fobject_44',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
['xb_5finvalid_5foption_45',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
['xb_5finvalid_5fpage_46',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
- ['xb_5finvalid_5fparm_47',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
- ['xb_5finvalid_5frecord_48',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftable_5fname_49',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftag_50',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
- ['xb_5fkey_5fnot_5funique_51',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
- ['xb_5flimit_5freached_52',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
- ['xb_5flock_53',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
- ['xb_5flock_5ffailed_54',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
- ['xb_5flogical_5ffld_55',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
- ['xb_5fmax_5ferror_5fno_56',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
- ['xb_5fmemcpy_5ferror_57',['XB_MEMCPY_ERROR',['../xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d',1,'xbretcod.h']]],
- ['xb_5fmemo_5ffld_58',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
- ['xb_5fmulti_5fuser_59',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
- ['xb_5fno_5ferror_60',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
- ['xb_5fno_5fmemory_61',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
- ['xb_5fnot_5ffound_62',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
- ['xb_5fnot_5fopen_63',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
- ['xb_5fnumeric_5ffld_64',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
- ['xb_5fopen_65',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
- ['xb_5fopen_5ferror_66',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
- ['xb_5foverlay_67',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
- ['xb_5fparse_5ferror_68',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
- ['xb_5fread_69',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
- ['xb_5fread_5ferror_70',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
- ['xb_5fread_5fwrite_71',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
- ['xb_5frename_5ferror_72',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
- ['xb_5fseek_5ferror_73',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
- ['xb_5fsingle_5fuser_74',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
- ['xb_5fsyntax_5ferror_75',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
- ['xb_5ftable_5fnot_5flocked_76',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fparens_77',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fquotes_78',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
- ['xb_5funlock_79',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
- ['xb_5fupdated_80',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
- ['xb_5fwrite_81',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
- ['xb_5fwrite_5ferror_82',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
- ['xbfalse_83',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
- ['xbfileno_84',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
- ['xbtrue_85',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]]
+ ['xb_5finvalid_5fparameter_47',['XB_INVALID_PARAMETER',['../xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fparm_48',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
+ ['xb_5finvalid_5frecord_49',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftable_5fname_50',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftag_51',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
+ ['xb_5fkey_5fnot_5funique_52',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
+ ['xb_5flimit_5freached_53',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
+ ['xb_5flock_54',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
+ ['xb_5flock_5ffailed_55',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
+ ['xb_5flogical_5ffld_56',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
+ ['xb_5fmax_5ferror_5fno_57',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
+ ['xb_5fmemcpy_5ferror_58',['XB_MEMCPY_ERROR',['../xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d',1,'xbretcod.h']]],
+ ['xb_5fmemo_5ffld_59',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
+ ['xb_5fmulti_5fuser_60',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
+ ['xb_5fno_5ferror_61',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
+ ['xb_5fno_5fmemory_62',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
+ ['xb_5fnot_5ffound_63',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
+ ['xb_5fnot_5fopen_64',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
+ ['xb_5fnull_5fdate_65',['XB_NULL_DATE',['../xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2',1,'xbexp.h']]],
+ ['xb_5fnumeric_5ffld_66',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
+ ['xb_5fopen_67',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
+ ['xb_5fopen_5ferror_68',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
+ ['xb_5foverlay_69',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
+ ['xb_5fparse_5ferror_70',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
+ ['xb_5fread_71',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
+ ['xb_5fread_5ferror_72',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
+ ['xb_5fread_5fwrite_73',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
+ ['xb_5frename_5ferror_74',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
+ ['xb_5fseek_5ferror_75',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
+ ['xb_5fsingle_5fuser_76',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
+ ['xb_5fsyntax_5ferror_77',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
+ ['xb_5ftable_5fnot_5flocked_78',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
+ ['xb_5funbalanced_5fparens_79',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
+ ['xb_5funbalanced_5fquotes_80',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
+ ['xb_5funlock_81',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
+ ['xb_5fupdated_82',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
+ ['xb_5fwrite_83',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
+ ['xb_5fwrite_5ferror_84',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
+ ['xbfalse_85',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
+ ['xbfileno_86',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
+ ['xbtrue_87',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]]
];
diff --git a/docs/doxygen/html/search/files_1.js b/docs/doxygen/html/search/files_1.js
index 3628f1d..bca7084 100644
--- a/docs/doxygen/html/search/files_1.js
+++ b/docs/doxygen/html/search/files_1.js
@@ -8,99 +8,102 @@ var searchData=
['xb_5fdumprecs_2ecpp_5',['xb_dumprecs.cpp',['../xb__dumprecs_8cpp.html',1,'']]],
['xb_5fex_5fdate_2ecpp_6',['xb_ex_date.cpp',['../xb__ex__date_8cpp.html',1,'']]],
['xb_5fex_5fexpression_2ecpp_7',['xb_ex_expression.cpp',['../xb__ex__expression_8cpp.html',1,'']]],
- ['xb_5fex_5fsql_2ecpp_8',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
- ['xb_5fex_5fssv_2ecpp_9',['xb_ex_ssv.cpp',['../xb__ex__ssv_8cpp.html',1,'']]],
- ['xb_5fex_5fstring_2ecpp_10',['xb_ex_string.cpp',['../xb__ex__string_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fcreate_5fdbf_2ecpp_11',['xb_ex_v3_create_dbf.cpp',['../xb__ex__v3__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fupd_5fdbf_2ecpp_12',['xb_ex_v3_upd_dbf.cpp',['../xb__ex__v3__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fcreate_5fdbf_2ecpp_13',['xb_ex_v4_create_dbf.cpp',['../xb__ex__v4__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fupd_5fdbf_2ecpp_14',['xb_ex_v4_upd_dbf.cpp',['../xb__ex__v4__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fexecsql_2ecpp_15',['xb_execsql.cpp',['../xb__execsql_8cpp.html',1,'']]],
- ['xb_5fpack_2ecpp_16',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
- ['xb_5ftblinfo_2ecpp_17',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
- ['xb_5ftest_5fbcd_2ecpp_18',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
- ['xb_5ftest_5fblockread_2ecpp_19',['xb_test_blockread.cpp',['../xb__test__blockread_8cpp.html',1,'']]],
- ['xb_5ftest_5fdate_2ecpp_20',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_21',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_22',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_23',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_24',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpnode_2ecpp_25',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpression_2ecpp_26',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
- ['xb_5ftest_5ffile_2ecpp_27',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
- ['xb_5ftest_5ffilter_2ecpp_28',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
- ['xb_5ftest_5ffuncs_2ecpp_29',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
- ['xb_5ftest_5flinklist_2ecpp_30',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
- ['xb_5ftest_5flock_2ecpp_31',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
- ['xb_5ftest_5flock2_2ecpp_32',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
- ['xb_5ftest_5flog_2ecpp_33',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
- ['xb_5ftest_5fmdx_2ecpp_34',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
- ['xb_5ftest_5fndx_2ecpp_35',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
- ['xb_5ftest_5fsql_2ecpp_36',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
- ['xb_5ftest_5fstring_2ecpp_37',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
- ['xb_5ftest_5ftblmgr_2ecpp_38',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
- ['xb_5ftest_5fuda_2ecpp_39',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
- ['xb_5ftest_5fxbase_2ecpp_40',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
- ['xb_5fundelall_2ecpp_41',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
- ['xbalttbl_2ecpp_42',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
- ['xbase_2eh_43',['xbase.h',['../xbase_8h.html',1,'']]],
- ['xbbcd_2ecpp_44',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
- ['xbbcd_2eh_45',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
- ['xbblkread_2eh_46',['xbblkread.h',['../xbblkread_8h.html',1,'']]],
- ['xbblockread_2ecpp_47',['xbblockread.cpp',['../xbblockread_8cpp.html',1,'']]],
- ['xbcrix_2ecpp_48',['xbcrix.cpp',['../xbcrix_8cpp.html',1,'']]],
- ['xbcrtbl_2ecpp_49',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
- ['xbcrtbl_2esave_2ecpp_50',['xbcrtbl.save.cpp',['../xbcrtbl_8save_8cpp.html',1,'']]],
- ['xbdate_2ecpp_51',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
- ['xbdate_2eh_52',['xbdate.h',['../xbdate_8h.html',1,'']]],
- ['xbdbf_2ecpp_53',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
- ['xbdbf_2eh_54',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
- ['xbdbf3_2ecpp_55',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
- ['xbdbf4_2ecpp_56',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
- ['xbdelete_2ecpp_57',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
- ['xbdrpix_2ecpp_58',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
- ['xbdrptbl_2ecpp_59',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
- ['xbexp_2ecpp_60',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
- ['xbexp_2eh_61',['xbexp.h',['../xbexp_8h.html',1,'']]],
- ['xbexpnode_2ecpp_62',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
- ['xbexpnode_2eh_63',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
- ['xbfields_2ecpp_64',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
- ['xbfile_2ecpp_65',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
- ['xbfile_2eh_66',['xbfile.h',['../xbfile_8h.html',1,'']]],
- ['xbfilter_2ecpp_67',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
- ['xbfilter_2eh_68',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
- ['xbfuncs_2ecpp_69',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
- ['xbindex_2eh_70',['xbindex.h',['../xbindex_8h.html',1,'']]],
- ['xbinsert_2ecpp_71',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
- ['xbixbase_2ecpp_72',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
- ['xbixmdx_2ecpp_73',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
- ['xbixndx_2ecpp_74',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
- ['xblnklst_2eh_75',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
- ['xblnklstord_2eh_76',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
- ['xblnknod_2eh_77',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
- ['xblog_2ecpp_78',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
- ['xblog_2eh_79',['xblog.h',['../xblog_8h.html',1,'']]],
- ['xbmemo_2ecpp_80',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
- ['xbmemo_2eh_81',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
- ['xbmemo3_2ecpp_82',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
- ['xbmemo4_2ecpp_83',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
- ['xbretcod_2eh_84',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
- ['xbselect_2ecpp_85',['xbselect.cpp',['../xbselect_8cpp.html',1,'']]],
- ['xbset_2ecpp_86',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
- ['xbsql_2ecpp_87',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
- ['xbsql_2eh_88',['xbsql.h',['../xbsql_8h.html',1,'']]],
- ['xbssv_2ecpp_89',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
- ['xbssv_2eh_90',['xbssv.h',['../xbssv_8h.html',1,'']]],
- ['xbstmt_2ecpp_91',['xbstmt.cpp',['../xbstmt_8cpp.html',1,'']]],
- ['xbstring_2ecpp_92',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
- ['xbstring_2eh_93',['xbstring.h',['../xbstring_8h.html',1,'']]],
- ['xbtag_2ecpp_94',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
- ['xbtag_2eh_95',['xbtag.h',['../xbtag_8h.html',1,'']]],
- ['xbtblmgr_2ecpp_96',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
- ['xbtblmgr_2eh_97',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
- ['xbtypes_2eh_98',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
- ['xbuda_2ecpp_99',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
- ['xbuda_2eh_100',['xbuda.h',['../xbuda_8h.html',1,'']]],
- ['xbxbase_2ecpp_101',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
- ['xbxbase_2eh_102',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
+ ['xb_5fex_5flog_2ecpp_8',['xb_ex_log.cpp',['../xb__ex__log_8cpp.html',1,'']]],
+ ['xb_5fex_5fsql_2ecpp_9',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
+ ['xb_5fex_5fssv_2ecpp_10',['xb_ex_ssv.cpp',['../xb__ex__ssv_8cpp.html',1,'']]],
+ ['xb_5fex_5fstring_2ecpp_11',['xb_ex_string.cpp',['../xb__ex__string_8cpp.html',1,'']]],
+ ['xb_5fex_5fv3_5fcreate_5fdbf_2ecpp_12',['xb_ex_v3_create_dbf.cpp',['../xb__ex__v3__create__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv3_5fupd_5fdbf_2ecpp_13',['xb_ex_v3_upd_dbf.cpp',['../xb__ex__v3__upd__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv4_5fcreate_5fdbf_2ecpp_14',['xb_ex_v4_create_dbf.cpp',['../xb__ex__v4__create__dbf_8cpp.html',1,'']]],
+ ['xb_5fex_5fv4_5fupd_5fdbf_2ecpp_15',['xb_ex_v4_upd_dbf.cpp',['../xb__ex__v4__upd__dbf_8cpp.html',1,'']]],
+ ['xb_5fexecsql_2ecpp_16',['xb_execsql.cpp',['../xb__execsql_8cpp.html',1,'']]],
+ ['xb_5fimport_2ecpp_17',['xb_import.cpp',['../xb__import_8cpp.html',1,'']]],
+ ['xb_5fpack_2ecpp_18',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
+ ['xb_5ftblinfo_2ecpp_19',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
+ ['xb_5ftest_5fbcd_2ecpp_20',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
+ ['xb_5ftest_5fblockread_2ecpp_21',['xb_test_blockread.cpp',['../xb__test__blockread_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdate_2ecpp_22',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_23',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_24',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_25',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_26',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpnode_2ecpp_27',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
+ ['xb_5ftest_5fexpression_2ecpp_28',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffile_2ecpp_29',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffilter_2ecpp_30',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
+ ['xb_5ftest_5ffuncs_2ecpp_31',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
+ ['xb_5ftest_5flinklist_2ecpp_32',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock_2ecpp_33',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
+ ['xb_5ftest_5flock2_2ecpp_34',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
+ ['xb_5ftest_5flog_2ecpp_35',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
+ ['xb_5ftest_5fmdx_2ecpp_36',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fndx_2ecpp_37',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fsql_2ecpp_38',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
+ ['xb_5ftest_5fstring_2ecpp_39',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftblmgr_2ecpp_40',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
+ ['xb_5ftest_5ftdx_2ecpp_41',['xb_test_tdx.cpp',['../xb__test__tdx_8cpp.html',1,'']]],
+ ['xb_5ftest_5fuda_2ecpp_42',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
+ ['xb_5ftest_5fxbase_2ecpp_43',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
+ ['xb_5fundelall_2ecpp_44',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
+ ['xbalttbl_2ecpp_45',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
+ ['xbase_2eh_46',['xbase.h',['../xbase_8h.html',1,'']]],
+ ['xbbcd_2ecpp_47',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
+ ['xbbcd_2eh_48',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
+ ['xbblkread_2eh_49',['xbblkread.h',['../xbblkread_8h.html',1,'']]],
+ ['xbblockread_2ecpp_50',['xbblockread.cpp',['../xbblockread_8cpp.html',1,'']]],
+ ['xbcrix_2ecpp_51',['xbcrix.cpp',['../include_2xbcrix_8cpp.html',1,'(Global Namespace)'],['../sql_2xbcrix_8cpp.html',1,'(Global Namespace)']]],
+ ['xbcrtbl_2ecpp_52',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
+ ['xbdate_2ecpp_53',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
+ ['xbdate_2eh_54',['xbdate.h',['../xbdate_8h.html',1,'']]],
+ ['xbdbf_2ecpp_55',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
+ ['xbdbf_2eh_56',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
+ ['xbdbf3_2ecpp_57',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
+ ['xbdbf4_2ecpp_58',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
+ ['xbdelete_2ecpp_59',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
+ ['xbdrpix_2ecpp_60',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
+ ['xbdrptbl_2ecpp_61',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
+ ['xbexp_2ecpp_62',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
+ ['xbexp_2eh_63',['xbexp.h',['../xbexp_8h.html',1,'']]],
+ ['xbexpnode_2ecpp_64',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
+ ['xbexpnode_2eh_65',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
+ ['xbfields_2ecpp_66',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
+ ['xbfile_2ecpp_67',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
+ ['xbfile_2eh_68',['xbfile.h',['../xbfile_8h.html',1,'']]],
+ ['xbfilter_2ecpp_69',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
+ ['xbfilter_2eh_70',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
+ ['xbfuncs_2ecpp_71',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
+ ['xbindex_2eh_72',['xbindex.h',['../xbindex_8h.html',1,'']]],
+ ['xbinsert_2ecpp_73',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
+ ['xbixbase_2ecpp_74',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
+ ['xbixmdx_2ecpp_75',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
+ ['xbixndx_2ecpp_76',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
+ ['xbixtdx_2ecpp_77',['xbixtdx.cpp',['../xbixtdx_8cpp.html',1,'']]],
+ ['xblnklst_2eh_78',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
+ ['xblnklstord_2eh_79',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
+ ['xblnknod_2eh_80',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
+ ['xblog_2ecpp_81',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
+ ['xblog_2eh_82',['xblog.h',['../xblog_8h.html',1,'']]],
+ ['xbmemo_2ecpp_83',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
+ ['xbmemo_2eh_84',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
+ ['xbmemo3_2ecpp_85',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
+ ['xbmemo4_2ecpp_86',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
+ ['xbretcod_2eh_87',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
+ ['xbselect_2ecpp_88',['xbselect.cpp',['../xbselect_8cpp.html',1,'']]],
+ ['xbset_2ecpp_89',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
+ ['xbsql_2ecpp_90',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
+ ['xbsql_2eh_91',['xbsql.h',['../xbsql_8h.html',1,'']]],
+ ['xbssv_2ecpp_92',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
+ ['xbssv_2eh_93',['xbssv.h',['../xbssv_8h.html',1,'']]],
+ ['xbstmt_2ecpp_94',['xbstmt.cpp',['../xbstmt_8cpp.html',1,'']]],
+ ['xbstring_2ecpp_95',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
+ ['xbstring_2eh_96',['xbstring.h',['../xbstring_8h.html',1,'']]],
+ ['xbtag_2ecpp_97',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
+ ['xbtag_2eh_98',['xbtag.h',['../xbtag_8h.html',1,'']]],
+ ['xbtblmgr_2ecpp_99',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
+ ['xbtblmgr_2eh_100',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
+ ['xbtypes_2eh_101',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
+ ['xbuda_2ecpp_102',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
+ ['xbuda_2eh_103',['xbuda.h',['../xbuda_8h.html',1,'']]],
+ ['xbxbase_2ecpp_104',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
+ ['xbxbase_2eh_105',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
];
diff --git a/docs/doxygen/html/search/functions_0.js b/docs/doxygen/html/search/functions_0.js
index 1e4e72c..0f4d535 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#af16832ff2bfaee09265652e0fc03709a',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName)'],['../classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &amp;sFqTblName, const xbString &amp;sTblAlias)']]],
['append_3',['Append',['../classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815',1,'xb::xbString::Append(const xbString &amp;s)'],['../classxb_1_1xbString.html#a1922319303feb6da1f40b5994c5e8240',1,'xb::xbString::Append(const char *s)'],['../classxb_1_1xbString.html#a097453cb71fbf0b5511cf1259ddce4fb',1,'xb::xbString::Append(const char *s, xbUInt32 iByteCount)'],['../classxb_1_1xbString.html#a093c6ab5df375a2589755bb8f48fa5c7',1,'xb::xbString::Append(char c)']]],
['appendrecord_4',['AppendRecord',['../classxb_1_1xbDbf.html#a5b412dd796241673eb1aa2c93513d69b',1,'xb::xbDbf']]],
- ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#ac6afd224dfbe439ce083c8dd1ad3246c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 pos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 lCopyLen)']]]
+ ['assign_5',['Assign',['../classxb_1_1xbString.html#a85bef82dfa22122a1ab8dfe58a107d96',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a08eb7ca6740423acab4e8bd7a6c8043d',1,'xb::xbString::Assign(const char *srcStr, xbUInt32 lStartPos)'],['../classxb_1_1xbString.html#a430119df844bd80d67c23c48b045af30',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 ulStartPos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a97df314be5b3b2611be11ff50a19533d',1,'xb::xbString::Assign(const xbString &amp;s, xbUInt32 ulStartPos)']]]
];
diff --git a/docs/doxygen/html/search/functions_10.js b/docs/doxygen/html/search/functions_10.js
index 475233e..1923fd7 100644
--- a/docs/doxygen/html/search/functions_10.js
+++ b/docs/doxygen/html/search/functions_10.js
@@ -11,15 +11,16 @@ var searchData=
['setfilename_8',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
['setfqfilename_9',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
['sethomefolders_10',['SetHomeFolders',['../classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a',1,'xb::xbFile']]],
- ['setlogdirectory_11',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv::SetLogDirectory()'],['../classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292',1,'xb::xbXBase::SetLogDirectory(const xbString &amp;sLogFileDirectory)']]],
- ['setlogfilename_12',['SetLogFileName',['../classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c',1,'xb::xbXBase']]],
+ ['setlogdirectory_11',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv']]],
+ ['setlogfilename_12',['SetLogFileName',['../classxb_1_1xbSsv.html#a7f05738e7dfd759e89990242ef503544',1,'xb::xbSsv']]],
['setlogsize_13',['SetLogSize',['../classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42',1,'xb::xbXBase']]],
['setmultiuser_14',['SetMultiUser',['../classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c',1,'xb::xbSsv']]],
['setnum_15',['SetNum',['../classxb_1_1xbString.html#a3af5b1f111f94b0667551fcbd1d97abd',1,'xb::xbString']]],
- ['setversion_16',['SetVersion',['../classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323',1,'xb::xbDbf']]],
- ['sprintf_17',['Sprintf',['../classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195',1,'xb::xbString']]],
- ['str_18',['Str',['../classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0',1,'xb::xbDate::Str()'],['../classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3',1,'xb::xbString::Str() const']]],
- ['strncpy_19',['strncpy',['../classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b',1,'xb::xbString']]],
- ['swapchars_20',['SwapChars',['../classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe',1,'xb::xbString']]],
- ['sysdate_21',['Sysdate',['../classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192',1,'xb::xbDate']]]
+ ['settempdirectory_16',['SetTempDirectory',['../classxb_1_1xbSsv.html#a17c229a20ef9ab4034df8f9cd657adb2',1,'xb::xbSsv']]],
+ ['setversion_17',['SetVersion',['../classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323',1,'xb::xbDbf']]],
+ ['sprintf_18',['Sprintf',['../classxb_1_1xbString.html#a9e9bfa29d86377b915f1628aeb0e9195',1,'xb::xbString']]],
+ ['str_19',['Str',['../classxb_1_1xbDate.html#ab43a5d8d929767c0ffdd722972bb8cc0',1,'xb::xbDate::Str()'],['../classxb_1_1xbString.html#a6715f4c0010f3ab487c9d787838a29b3',1,'xb::xbString::Str() const']]],
+ ['strncpy_20',['strncpy',['../classxb_1_1xbString.html#a3bc9e856c34f0c240a6e36e5b6e3ea7b',1,'xb::xbString']]],
+ ['swapchars_21',['SwapChars',['../classxb_1_1xbString.html#a054683872e1f05d11c2cf8683a63a6fe',1,'xb::xbString']]],
+ ['sysdate_22',['Sysdate',['../classxb_1_1xbDate.html#a40ba54a58d64cf56266f020f91584192',1,'xb::xbDate']]]
];
diff --git a/docs/doxygen/html/search/functions_15.js b/docs/doxygen/html/search/functions_15.js
index 190bfe1..f72ae6d 100644
--- a/docs/doxygen/html/search/functions_15.js
+++ b/docs/doxygen/html/search/functions_15.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['xbdate_0',['xbDate',['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)']]],
+ ['xbdate_0',['xbDate',['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()'],['../classxb_1_1xbDate.html#a8dfc827b466be3c5e3def599277dfa43',1,'xb::xbDate::xbDate(xbUInt16 iInit)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &amp;Date8)'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)']]],
['xbdbf_1',['xbDbf',['../classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204',1,'xb::xbDbf']]],
['xbfclose_2',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
['xbfeof_3',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
@@ -8,7 +8,7 @@ var searchData=
['xbfgetc_5',['xbFgetc',['../classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4',1,'xb::xbFile::xbFgetc(xbInt32 &amp;c)'],['../classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6',1,'xb::xbFile::xbFgetc(char &amp;c)']]],
['xbfgets_6',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
['xbfile_7',['xbFile',['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile']]],
- ['xbfopen_8',['xbFopen',['../classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode)'],['../classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135',1,'xb::xbFile::xbFopen(const xbString &amp;sMode, const xbString &amp;sFileName, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c',1,'xb::xbFile::xbFopen(const xbString &amp;sOpenMode, xbInt16 iShareMode)']]],
+ ['xbfopen_8',['xbFopen',['../classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode)'],['../classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c',1,'xb::xbFile::xbFopen(const xbString &amp;sOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#aabd113333b49c36cad23244b392baab4',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode, xbInt16 iShareMode)'],['../classxb_1_1xbFile.html#ab0fa19686ca8953ff4b556fb5b249135',1,'xb::xbFile::xbFopen(const xbString &amp;sMode, const xbString &amp;sFileName, xbInt16 iShareMode)']]],
['xbfputc_9',['xbFputc',['../classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896',1,'xb::xbFile::xbFputc(xbInt32 c)'],['../classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a',1,'xb::xbFile::xbFputc(xbInt32 c, xbInt32 iNoTimes)']]],
['xbfputs_10',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
['xbfread_11',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
diff --git a/docs/doxygen/html/search/functions_2.js b/docs/doxygen/html/search/functions_2.js
index 4a1e70d..954b386 100644
--- a/docs/doxygen/html/search/functions_2.js
+++ b/docs/doxygen/html/search/functions_2.js
@@ -11,11 +11,12 @@ var searchData=
['copy_8',['Copy',['../classxb_1_1xbString.html#ac7a8466b03c04df838bd182ef244f792',1,'xb::xbString']]],
['copydbfstructure_9',['CopyDbfStructure',['../classxb_1_1xbDbf.html#a829c615a130a1fdf609d93438d8a6264',1,'xb::xbDbf']]],
['countchar_10',['CountChar',['../classxb_1_1xbString.html#a26bc14d92dc7ce1f2bf31cd74af0db0f',1,'xb::xbString::CountChar(char c) const'],['../classxb_1_1xbString.html#adc0204bcfd1c052b9aea9229b10acf72',1,'xb::xbString::CountChar(char c, xbInt16 iOpt) const']]],
- ['createtable_11',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
- ['createuniquefilename_12',['CreateUniqueFileName',['../classxb_1_1xbFile.html#aae9a2ddb0adb8165b4ac2b6a28a932f7',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut)'],['../classxb_1_1xbFile.html#ae5ffabde2c88ea58324f27e471f6bfc0',1,'xb::xbFile::CreateUniqueFileName(const xbString &amp;sDirIn, const xbString &amp;sExtIn, xbString &amp;sFqnOut, xbInt16 iOption)']]],
- ['ctod_13',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
- ['cvthexchar_14',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
- ['cvthexstring_15',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
- ['cvtlonglong_16',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
- ['cvtulonglong_17',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
+ ['createfqn_11',['CreateFqn',['../classxb_1_1xbXBase.html#aa41240d920b604dcbd91dce7eecb78e1',1,'xb::xbXBase']]],
+ ['createtable_12',['CreateTable',['../classxb_1_1xbDbf.html#a73e41bfe679dd06ab16c436652df93f1',1,'xb::xbDbf']]],
+ ['createuniquefilename_13',['CreateUniqueFileName',['../classxb_1_1xbFile.html#ad39797624a752b9d62533d00fad9feff',1,'xb::xbFile']]],
+ ['ctod_14',['CTOD',['../classxb_1_1xbDate.html#abb1eb4b0394e4a67aadab15779b1b8c5',1,'xb::xbDate']]],
+ ['cvthexchar_15',['CvtHexChar',['../classxb_1_1xbString.html#a0a737bd408a94903f214eb2879eb56de',1,'xb::xbString']]],
+ ['cvthexstring_16',['CvtHexString',['../classxb_1_1xbString.html#ab5eb6918a0ae9ab6c0e961318f3d1eb0',1,'xb::xbString']]],
+ ['cvtlonglong_17',['CvtLongLong',['../classxb_1_1xbString.html#ae3ab18365e132323f8ae4c99eb72181c',1,'xb::xbString']]],
+ ['cvtulonglong_18',['CvtULongLong',['../classxb_1_1xbString.html#a1528b30b84a41c3564ef31d1f4496b15',1,'xb::xbString']]]
];
diff --git a/docs/doxygen/html/search/functions_3.js b/docs/doxygen/html/search/functions_3.js
index e2fc7b3..9a4d44a 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#a309b5b1fb6a5c048c4bfb404d011ac55',1,'xb::xbDbf']]],
+ ['dumpheader_15',['DumpHeader',['../classxb_1_1xbDbf.html#a47643728f74cf3b6e0ffc55259895bdb',1,'xb::xbDbf']]],
['dumprecord_16',['DumpRecord',['../classxb_1_1xbDbf.html#aba30399f15885a07f87f904c0d0656fa',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/functions_4.js b/docs/doxygen/html/search/functions_4.js
index a90081e..434b34a 100644
--- a/docs/doxygen/html/search/functions_4.js
+++ b/docs/doxygen/html/search/functions_4.js
@@ -11,5 +11,5 @@ var searchData=
['eputint32_8',['ePutInt32',['../classxb_1_1xbFile.html#a19c37f76a2ccbb45019cb0fc373d3f46',1,'xb::xbFile']]],
['eputuint16_9',['ePutUInt16',['../classxb_1_1xbFile.html#a65e9839f92b96eac7b0d071fac3bbe40',1,'xb::xbFile']]],
['eputuint32_10',['ePutUInt32',['../classxb_1_1xbFile.html#aa3f6ceae4b96f24875d86848bf13a173',1,'xb::xbFile']]],
- ['extractelement_11',['ExtractElement',['../classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e',1,'xb::xbString']]]
+ ['extractelement_11',['ExtractElement',['../classxb_1_1xbString.html#a6b33a8df49cdcb76033cbce5d8dc59d7',1,'xb::xbString::ExtractElement(xbString &amp;s, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)'],['../classxb_1_1xbString.html#a77195fc4957952625cb33bb503517a3e',1,'xb::xbString::ExtractElement(const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt=0)']]]
];
diff --git a/docs/doxygen/html/search/functions_6.js b/docs/doxygen/html/search/functions_6.js
index 1cedf85..cee5729 100644
--- a/docs/doxygen/html/search/functions_6.js
+++ b/docs/doxygen/html/search/functions_6.js
@@ -17,53 +17,55 @@ var searchData=
['getendiantype_14',['GetEndianType',['../classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243',1,'xb::xbSsv']]],
['geteof_15',['GetEof',['../classxb_1_1xbDbf.html#a256dc1f98626fa77da24e91a38ab5b4d',1,'xb::xbDbf']]],
['geterrormessage_16',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
- ['getfield_17',['GetField',['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const']]],
+ ['getfield_17',['GetField',['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &amp;sFieldValue) const'],['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &amp;sFieldName, xbString &amp;sFieldValue) const']]],
['getfieldcnt_18',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
- ['getfielddecimal_19',['GetFieldDecimal',['../classxb_1_1xbDbf.html#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_19',['GetFieldDecimal',['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &amp;sFieldName, xbInt16 &amp;iFieldDecimal) const'],['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &amp;iFieldDecimal) const']]],
['getfieldlen_20',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &amp;iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &amp;sFieldName, xbInt16 &amp;iFieldLen) const']]],
['getfieldname_21',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
['getfieldno_22',['GetFieldNo',['../classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName, xbInt16 &amp;iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &amp;sFieldName) const']]],
['getfieldtype_23',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &amp;cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &amp;sFieldName, char &amp;cFieldType) const']]],
['getfiledirpart_24',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &amp;sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileDirPartOut) const']]],
- ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#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']]],
+ ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileExtPartOut) const'],['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &amp;sFileExtPartOut) const']]],
['getfilemtime_26',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
['getfilename_27',['GetFileName',['../classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a',1,'xb::xbFile']]],
['getfilenamepart_28',['GetFileNamePart',['../classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a',1,'xb::xbFile::GetFileNamePart(xbString &amp;sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &amp;sCompleteFileNameIn, xbString &amp;sFileNamePartOut) const']]],
['getfilesize_29',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
['getfiletype_30',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
['getfirstrecord_31',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
- ['getfloatfield_32',['GetFloatField',['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &amp;sFieldName, xbFloat &amp;fFieldValue) const'],['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &amp;fFieldValue) const']]],
+ ['getfloatfield_32',['GetFloatField',['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &amp;fFieldValue) const'],['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &amp;sFieldName, xbFloat &amp;fFieldValue) const']]],
['getfqfilename_33',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
['getfunctioninfo_34',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
['getheaderlen_35',['GetHeaderLen',['../classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb',1,'xb::xbDbf']]],
['gethomedir_36',['GetHomeDir',['../classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9',1,'xb::xbSsv']]],
['getlastpos_37',['GetLastPos',['../classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df',1,'xb::xbString::GetLastPos(char c) const'],['../classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646',1,'xb::xbString::GetLastPos(const char *s) const']]],
['getlastrecord_38',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
- ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv::GetLogDirectory()'],['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase::GetLogDirectory()']]],
- ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv::GetLogFileName()'],['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase::GetLogFileName() const']]],
+ ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv']]],
+ ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv']]],
['getlogfqfilename_41',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
- ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const']]],
- ['getlogstatus_43',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
- ['getlongfield_44',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &amp;sFieldName, xbInt32 &amp;lFieldValue) const']]],
- ['getmultiuser_45',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
- ['getnextrecord_46',['GetNextRecord',['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()']]],
- ['getnextsqlcmd_47',['GetNextSqlCmd',['../xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e',1,'xb_execsql.cpp']]],
- ['getopenmode_48',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
- ['getopentablecount_49',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
- ['getpathseparator_50',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString']]],
- ['getprevrecord_51',['GetPrevRecord',['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()'],['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)']]],
- ['getrawfield_52',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
- ['getrecord_53',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
- ['getrecordbuf_54',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
- ['getrecordcnt_55',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
- ['getrecordcount_56',['GetRecordCount',['../classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce',1,'xb::xbDbf']]],
- ['getrecordlen_57',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
- ['getsharemode_58',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
- ['getsize_59',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
- ['gettblalias_60',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
- ['gettbllistentry_61',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
- ['getulongfield_62',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &amp;sFieldName, xbUInt32 &amp;lFieldValue) const']]],
- ['getversion_63',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
- ['getxbasefiletypebyte_64',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, xbInt16 &amp;iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)']]],
- ['getxbaseptr_65',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
+ ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &amp;bFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &amp;sFieldName, xbString &amp;sFieldData) const'],['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &amp;sFieldData) const']]],
+ ['getlogsize_43',['GetLogSize',['../classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355',1,'xb::xbXBase']]],
+ ['getlogstatus_44',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
+ ['getlongfield_45',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &amp;sFieldName, xbInt32 &amp;lFieldValue) const']]],
+ ['getmultiuser_46',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
+ ['getnextrecord_47',['GetNextRecord',['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)']]],
+ ['getnextsqlcmd_48',['GetNextSqlCmd',['../xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945',1,'xb_execsql.cpp']]],
+ ['getnullsts_49',['GetNullSts',['../classxb_1_1xbDbf.html#a7930fe8b930c6d646b7b0d3df576fe9e',1,'xb::xbDbf::GetNullSts(xbInt16 iFieldNo, xbBool &amp;bIsNull, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ae9a3f726ce5229ed021bfce0515050fc',1,'xb::xbDbf::GetNullSts(xbInt16 iFieldNo, xbBool &amp;bIsNull) const'],['../classxb_1_1xbDbf.html#a909788123ce0694b65dfcf036380d918',1,'xb::xbDbf::GetNullSts(const xbString &amp;sFieldName, xbBool &amp;bIsNull) const']]],
+ ['getopenmode_50',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
+ ['getopentablecount_51',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
+ ['getpathseparator_52',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString::GetPathSeparator()'],['../classxb_1_1xbSsv.html#a63cee13b473ee13970e93b11837b9e35',1,'xb::xbSsv::GetPathSeparator()']]],
+ ['getprevrecord_53',['GetPrevRecord',['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()'],['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)']]],
+ ['getrawfield_54',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
+ ['getrecord_55',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
+ ['getrecordbuf_56',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
+ ['getrecordcnt_57',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
+ ['getrecordlen_58',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
+ ['getsharemode_59',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
+ ['getsize_60',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
+ ['gettblalias_61',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
+ ['gettbllistentry_62',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
+ ['gettempdirectory_63',['GetTempDirectory',['../classxb_1_1xbSsv.html#abfaeef85935331073d213465bb362a61',1,'xb::xbSsv']]],
+ ['getulongfield_64',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &amp;sFieldName, xbUInt32 &amp;lFieldValue) const']]],
+ ['getversion_65',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
+ ['getxbasefiletypebyte_66',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, xbInt16 &amp;iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &amp;sFileName, unsigned char &amp;cFileTypeByte, xbInt16 &amp;iVersion)']]],
+ ['getxbaseptr_67',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/functions_8.js b/docs/doxygen/html/search/functions_8.js
index 6d8ba73..0dcf217 100644
--- a/docs/doxygen/html/search/functions_8.js
+++ b/docs/doxygen/html/search/functions_8.js
@@ -4,5 +4,5 @@ var searchData=
['initvars_1',['InitVars',['../classxb_1_1xbDbf.html#ad06fe0f7975fb81125d27d82504e6829',1,'xb::xbDbf']]],
['isempty_2',['IsEmpty',['../classxb_1_1xbString.html#a4a255a30d683acd62ea09c1617b53cb3',1,'xb::xbString']]],
['isleapyear_3',['IsLeapYear',['../classxb_1_1xbDate.html#af2bd33a72448e2c5ee00d8b711dc5d95',1,'xb::xbDate::IsLeapYear(xbInt16 iYear) const'],['../classxb_1_1xbDate.html#a5f8051c31b29244265e8f26ac3547b9b',1,'xb::xbDate::IsLeapYear() const']]],
- ['isnull_4',['IsNull',['../classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500',1,'xb::xbString']]]
+ ['isnull_4',['IsNull',['../classxb_1_1xbDate.html#a611a64b14ff89ad3c20b34081ea1e658',1,'xb::xbDate::IsNull()'],['../classxb_1_1xbString.html#a3fa34fa31bcb7244ecb054ab628ad500',1,'xb::xbString::IsNull()']]]
];
diff --git a/docs/doxygen/html/search/functions_b.js b/docs/doxygen/html/search/functions_b.js
index 4debf05..6fd1671 100644
--- a/docs/doxygen/html/search/functions_b.js
+++ b/docs/doxygen/html/search/functions_b.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['main_0',['main',['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_execsql.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_undelall.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_file.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_expression.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av):&#160;xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expression.cpp']]],
+ ['main_0',['main',['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_xbase.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL):&#160;xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tblmgr.cpp'],['../xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_tdx.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_uda.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_funcs.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_execsql.cpp'],['../xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_import.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]):&#160;xb_undelall.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_filter.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_expression.cpp'],['../xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_log.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689',1,'main(int, char **av):&#160;xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main():&#160;xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_expression.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av):&#160;xb_test_file.cpp']]],
['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950',1,'xb::xbDbf']]],
['mid_2',['Mid',['../classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7',1,'xb::xbString']]],
['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]]
diff --git a/docs/doxygen/html/search/functions_e.js b/docs/doxygen/html/search/functions_e.js
index 1b907f5..342d52d 100644
--- a/docs/doxygen/html/search/functions_e.js
+++ b/docs/doxygen/html/search/functions_e.js
@@ -4,16 +4,16 @@ var searchData=
['padleft_1',['PadLeft',['../classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b',1,'xb::xbString']]],
['padright_2',['PadRight',['../classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284',1,'xb::xbString']]],
['pos_3',['Pos',['../classxb_1_1xbString.html#a1b586890138da8bf0e23090bd8b34581',1,'xb::xbString::Pos(char c, xbUInt32 ulStartPos) const'],['../classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b',1,'xb::xbString::Pos(char c) const'],['../classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da',1,'xb::xbString::Pos(const char *s) const']]],
- ['printhelp_4',['PrintHelp',['../xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumprecs.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_undelall.cpp']]],
+ ['printhelp_4',['PrintHelp',['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_undelall.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp():&#160;xb_dbfutil.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_tblinfo.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_pack.cpp'],['../xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_import.cpp'],['../xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_execsql.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumprecs.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_dumpdbt.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_deletall.cpp'],['../xb__copydbf_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp():&#160;xb_copydbf.cpp']]],
['printresult_5',['PrintResult',['../xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda',1,'xb_ex_expression.cpp']]],
- ['printversion_6',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumprecs.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_undelall.cpp']]],
+ ['printversion_6',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_execsql.cpp'],['../xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_import.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion():&#160;xb_undelall.cpp']]],
['putat_7',['PutAt',['../classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39',1,'xb::xbString']]],
['putdatefield_8',['PutDateField',['../classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5',1,'xb::xbDbf::PutDateField(xbInt16 iFieldNo, const xbDate &amp;dt)'],['../classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9',1,'xb::xbDbf::PutDateField(const xbString &amp;sFieldName, const xbDate &amp;dt)']]],
['putdoublefield_9',['PutDoubleField',['../classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5',1,'xb::xbDbf::PutDoubleField(xbInt16 FieldNo, xbDouble dFieldValue)'],['../classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971',1,'xb::xbDbf::PutDoubleField(const xbString &amp;FieldName, xbDouble dFieldValue)']]],
['putfield_10',['PutField',['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &amp;sFieldData)']]],
['putfloatfield_11',['PutFloatField',['../classxb_1_1xbDbf.html#a64161eb50d72e424b11bf3732657ebd8',1,'xb::xbDbf::PutFloatField(xbInt16 iFieldNo, xbFloat fFieldValue)'],['../classxb_1_1xbDbf.html#a4ea3241bc710d57e5f755efda62288ad',1,'xb::xbDbf::PutFloatField(const xbString &amp;sFieldName, xbFloat fFieldValue)']]],
['putlogicalfield_12',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, const xbString &amp;sFieldData)'],['../classxb_1_1xbDbf.html#a423a0cb7bd252cedf956ace4954f275d',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, xbBool bFieldData)'],['../classxb_1_1xbDbf.html#a623ca3ef5520c42308c1a16b518e7ff3',1,'xb::xbDbf::PutLogicalField(const xbString &amp;sFieldName, xbBool bFieldData)']]],
- ['putlongfield_13',['PutLongField',['../classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47',1,'xb::xbDbf::PutLongField(xbInt16 iFieldNo, xbInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#ae7aad223119edb3d541e9f65e88c9f2f',1,'xb::xbDbf::PutLongField(const xbString &amp;sFieldNo, xbInt32 lFieldValue)']]],
+ ['putlongfield_13',['PutLongField',['../classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47',1,'xb::xbDbf::PutLongField(xbInt16 iFieldNo, xbInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#a0692d1776a725c2f61d4c14677e9307c',1,'xb::xbDbf::PutLongField(const xbString &amp;sFieldName, xbInt32 lFieldValue)']]],
['putrecord_14',['PutRecord',['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()'],['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)']]],
- ['putulongfield_15',['PutULongField',['../classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2',1,'xb::xbDbf::PutULongField(xbInt16 iFieldNo, xbUInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381',1,'xb::xbDbf::PutULongField(const xbString &amp;sFieldNo, xbUInt32 lFieldValue)']]]
+ ['putulongfield_15',['PutULongField',['../classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381',1,'xb::xbDbf::PutULongField(const xbString &amp;sFieldNo, xbUInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2',1,'xb::xbDbf::PutULongField(xbInt16 iFieldNo, xbUInt32 lFieldValue)']]]
];
diff --git a/docs/doxygen/html/search/searchdata.js b/docs/doxygen/html/search/searchdata.js
index 0f7e3a8..910add8 100644
--- a/docs/doxygen/html/search/searchdata.js
+++ b/docs/doxygen/html/search/searchdata.js
@@ -1,11 +1,11 @@
var indexSectionsWithContent =
{
0: "abcdefghijlmnoprstuvwxyz~",
- 1: "x",
+ 1: "sx",
2: "x",
3: "tx",
4: "abcdefghijlmnoprstuvwxyz~",
- 5: "ceimprstux",
+ 5: "ceimnprstux",
6: "x",
7: "ox",
8: "jlvx"
diff --git a/docs/doxygen/html/search/variables_0.js b/docs/doxygen/html/search/variables_0.js
index c24d67c..cfc8fca 100644
--- a/docs/doxygen/html/search/variables_0.js
+++ b/docs/doxygen/html/search/variables_0.js
@@ -2,12 +2,13 @@ var searchData=
[
['cencryptionflag_0',['cEncryptionFlag',['../classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4',1,'xb::xbDbf']]],
['cfieldname_1',['cFieldName',['../structxb_1_1xbSchema.html#a514183856094123fd37df67885b4681e',1,'xb::xbSchema']]],
- ['cindexflag_2',['cIndexFlag',['../classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b',1,'xb::xbDbf']]],
- ['clangdriver_3',['cLangDriver',['../classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1',1,'xb::xbDbf']]],
- ['ctransactionflag_4',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
- ['ctype_5',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
- ['cupdatedd_6',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
- ['cupdatemm_7',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
- ['cupdateyy_8',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
- ['cversion_9',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]]
+ ['cfldtype_2',['cFldType',['../structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3',1,'sFldMap']]],
+ ['cindexflag_3',['cIndexFlag',['../classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b',1,'xb::xbDbf']]],
+ ['clangdriver_4',['cLangDriver',['../classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1',1,'xb::xbDbf']]],
+ ['ctransactionflag_5',['cTransactionFlag',['../classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970',1,'xb::xbDbf']]],
+ ['ctype_6',['cType',['../structxb_1_1xbSchema.html#a1d612b2ed5dc0b0289c9e91b3cda3a25',1,'xb::xbSchema']]],
+ ['cupdatedd_7',['cUpdateDD',['../classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2',1,'xb::xbDbf']]],
+ ['cupdatemm_8',['cUpdateMM',['../classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b',1,'xb::xbDbf']]],
+ ['cupdateyy_9',['cUpdateYY',['../classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a',1,'xb::xbDbf']]],
+ ['cversion_10',['cVersion',['../classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/variables_2.js b/docs/doxygen/html/search/variables_2.js
index 97adab8..1f104fd 100644
--- a/docs/doxygen/html/search/variables_2.js
+++ b/docs/doxygen/html/search/variables_2.js
@@ -5,6 +5,8 @@ var searchData=
['iendiantype_2',['iEndianType',['../classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3',1,'xb::xbSsv']]],
['ifieldlen_3',['iFieldLen',['../structxb_1_1xbSchema.html#a2da554af25ef628acf59bb52996056ac',1,'xb::xbSchema']]],
['ifileversion_4',['iFileVersion',['../classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388',1,'xb::xbDbf']]],
- ['inoofdecs_5',['iNoOfDecs',['../structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9',1,'xb::xbSchema']]],
- ['inooffields_6',['iNoOfFields',['../classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a',1,'xb::xbDbf']]]
+ ['ifldno_5',['iFldNo',['../structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723',1,'sFldMap']]],
+ ['inoofdecs_6',['iNoOfDecs',['../structxb_1_1xbSchema.html#a55bab3bb69dee3508d168c93e182d4b9',1,'xb::xbSchema']]],
+ ['inooffields_7',['iNoOfFields',['../classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a',1,'xb::xbDbf']]],
+ ['irecpos_8',['iRecPos',['../structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f',1,'sFldMap']]]
];
diff --git a/docs/doxygen/html/search/variables_4.js b/docs/doxygen/html/search/variables_4.js
index 946d73a..25cb177 100644
--- a/docs/doxygen/html/search/variables_4.js
+++ b/docs/doxygen/html/search/variables_4.js
@@ -1,8 +1,4 @@
var searchData=
[
- ['pdbf_0',['pDbf',['../structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6',1,'xb::xbTblList']]],
- ['pnext_1',['pNext',['../structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c',1,'xb::xbTblList']]],
- ['psfqtblname_2',['psFqTblName',['../structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d',1,'xb::xbTblList']]],
- ['pstblalias_3',['psTblAlias',['../structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05',1,'xb::xbTblList']]],
- ['pstblname_4',['psTblName',['../structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f',1,'xb::xbTblList']]]
+ ['next_0',['next',['../structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa',1,'sFldMap']]]
];
diff --git a/docs/doxygen/html/search/variables_5.js b/docs/doxygen/html/search/variables_5.js
index 9dde579..946d73a 100644
--- a/docs/doxygen/html/search/variables_5.js
+++ b/docs/doxygen/html/search/variables_5.js
@@ -1,5 +1,8 @@
var searchData=
[
- ['recbuf_0',['RecBuf',['../classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd',1,'xb::xbDbf']]],
- ['recbuf2_1',['RecBuf2',['../classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606',1,'xb::xbDbf']]]
+ ['pdbf_0',['pDbf',['../structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6',1,'xb::xbTblList']]],
+ ['pnext_1',['pNext',['../structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c',1,'xb::xbTblList']]],
+ ['psfqtblname_2',['psFqTblName',['../structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d',1,'xb::xbTblList']]],
+ ['pstblalias_3',['psTblAlias',['../structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05',1,'xb::xbTblList']]],
+ ['pstblname_4',['psTblName',['../structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f',1,'xb::xbTblList']]]
];
diff --git a/docs/doxygen/html/search/variables_6.js b/docs/doxygen/html/search/variables_6.js
index f1b6b71..9dde579 100644
--- a/docs/doxygen/html/search/variables_6.js
+++ b/docs/doxygen/html/search/variables_6.js
@@ -1,6 +1,5 @@
var searchData=
[
- ['salias_0',['sAlias',['../classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276',1,'xb::xbDbf']]],
- ['schemaptr_1',['SchemaPtr',['../classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7',1,'xb::xbDbf']]],
- ['snullstring_2',['sNullString',['../classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da',1,'xb::xbSsv']]]
+ ['recbuf_0',['RecBuf',['../classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd',1,'xb::xbDbf']]],
+ ['recbuf2_1',['RecBuf2',['../classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/variables_7.js b/docs/doxygen/html/search/variables_7.js
index 2369f5c..f1b6b71 100644
--- a/docs/doxygen/html/search/variables_7.js
+++ b/docs/doxygen/html/search/variables_7.js
@@ -1,4 +1,6 @@
var searchData=
[
- ['timer_0',['timer',['../tstfuncs_8cpp.html#ae2281da6157495d69406c35f69a61f9f',1,'tstfuncs.cpp']]]
+ ['salias_0',['sAlias',['../classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276',1,'xb::xbDbf']]],
+ ['schemaptr_1',['SchemaPtr',['../classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7',1,'xb::xbDbf']]],
+ ['snullstring_2',['sNullString',['../classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da',1,'xb::xbSsv']]]
];
diff --git a/docs/doxygen/html/search/variables_8.js b/docs/doxygen/html/search/variables_8.js
index 5eb7a13..2369f5c 100644
--- a/docs/doxygen/html/search/variables_8.js
+++ b/docs/doxygen/html/search/variables_8.js
@@ -1,7 +1,4 @@
var searchData=
[
- ['uiheaderlen_0',['uiHeaderLen',['../classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918',1,'xb::xbDbf']]],
- ['uirecordlen_1',['uiRecordLen',['../classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91',1,'xb::xbDbf']]],
- ['ulcurrec_2',['ulCurRec',['../classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8',1,'xb::xbDbf']]],
- ['ulnoofrecs_3',['ulNoOfRecs',['../classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87',1,'xb::xbDbf']]]
+ ['timer_0',['timer',['../tstfuncs_8cpp.html#ae2281da6157495d69406c35f69a61f9f',1,'tstfuncs.cpp']]]
];
diff --git a/docs/doxygen/html/search/variables_9.js b/docs/doxygen/html/search/variables_9.js
index 8367676..5eb7a13 100644
--- a/docs/doxygen/html/search/variables_9.js
+++ b/docs/doxygen/html/search/variables_9.js
@@ -1,8 +1,7 @@
var searchData=
[
- ['xbase_0',['xbase',['../classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004',1,'xb::xbFile']]],
- ['xbdbf_1',['xbDbf',['../namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b',1,'xb']]],
- ['xberrormessages_2',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
- ['xblog_3',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
- ['xbxbase_4',['xbXBase',['../namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0',1,'xb']]]
+ ['uiheaderlen_0',['uiHeaderLen',['../classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918',1,'xb::xbDbf']]],
+ ['uirecordlen_1',['uiRecordLen',['../classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91',1,'xb::xbDbf']]],
+ ['ulcurrec_2',['ulCurRec',['../classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8',1,'xb::xbDbf']]],
+ ['ulnoofrecs_3',['ulNoOfRecs',['../classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/variables_a.html b/docs/doxygen/html/search/variables_a.html
new file mode 100644
index 0000000..8090d16
--- /dev/null
+++ b/docs/doxygen/html/search/variables_a.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/docs/doxygen/html/search/variables_a.js b/docs/doxygen/html/search/variables_a.js
new file mode 100644
index 0000000..8367676
--- /dev/null
+++ b/docs/doxygen/html/search/variables_a.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['xbase_0',['xbase',['../classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004',1,'xb::xbFile']]],
+ ['xbdbf_1',['xbDbf',['../namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b',1,'xb']]],
+ ['xberrormessages_2',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
+ ['xblog_3',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
+ ['xbxbase_4',['xbXBase',['../namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0',1,'xb']]]
+];
diff --git a/docs/doxygen/html/sql_2xbcrix_8cpp.html b/docs/doxygen/html/sql_2xbcrix_8cpp.html
new file mode 100644
index 0000000..9947dfb
--- /dev/null
+++ b/docs/doxygen/html/sql_2xbcrix_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrix.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbcrix.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/structsFldMap.html b/docs/doxygen/html/structsFldMap.html
new file mode 100644
index 0000000..1be2f0a
--- /dev/null
+++ b/docs/doxygen/html/structsFldMap.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: sFldMap Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle"><div class="title">sFldMap Struct Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a02facce45c24ebecc13975c17fd52b8f"><td class="memItemLeft" align="right" valign="top">xbUInt32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html#a02facce45c24ebecc13975c17fd52b8f">iRecPos</a></td></tr>
+<tr class="separator:a02facce45c24ebecc13975c17fd52b8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a42eb801a85d8b60f06c4fe1be13ca723"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html#a42eb801a85d8b60f06c4fe1be13ca723">iFldNo</a></td></tr>
+<tr class="separator:a42eb801a85d8b60f06c4fe1be13ca723"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af89b26b2d4bc6e26c597f8c48b97b1a3"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html#af89b26b2d4bc6e26c597f8c48b97b1a3">cFldType</a></td></tr>
+<tr class="separator:af89b26b2d4bc6e26c597f8c48b97b1a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16eaff8fc09adc3faf453bfaa0d3baaa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsFldMap.html">sFldMap</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html#a16eaff8fc09adc3faf453bfaa0d3baaa">next</a></td></tr>
+<tr class="separator:a16eaff8fc09adc3faf453bfaa0d3baaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="af89b26b2d4bc6e26c597f8c48b97b1a3" name="af89b26b2d4bc6e26c597f8c48b97b1a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af89b26b2d4bc6e26c597f8c48b97b1a3">&#9670;&nbsp;</a></span>cFldType</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char sFldMap::cFldType</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a42eb801a85d8b60f06c4fe1be13ca723" name="a42eb801a85d8b60f06c4fe1be13ca723"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a42eb801a85d8b60f06c4fe1be13ca723">&#9670;&nbsp;</a></span>iFldNo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbInt16 sFldMap::iFldNo</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a02facce45c24ebecc13975c17fd52b8f" name="a02facce45c24ebecc13975c17fd52b8f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02facce45c24ebecc13975c17fd52b8f">&#9670;&nbsp;</a></span>iRecPos</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xbUInt32 sFldMap::iRecPos</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a16eaff8fc09adc3faf453bfaa0d3baaa" name="a16eaff8fc09adc3faf453bfaa0d3baaa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a16eaff8fc09adc3faf453bfaa0d3baaa">&#9670;&nbsp;</a></span>next</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structsFldMap.html">sFldMap</a>* sFldMap::next</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/<a class="el" href="xb__import_8cpp.html">xb_import.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/structxb_1_1xbSchema.html b/docs/doxygen/html/structxb_1_1xbSchema.html
index 4d314dd..4b745d8 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.1.0/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbdbf_8h_source.html">xbdbf.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/structxb_1_1xbTblList.html b/docs/doxygen/html/structxb_1_1xbTblList.html
index 688538c..b01da49 100644
--- a/docs/doxygen/html/structxb_1_1xbTblList.html
+++ b/docs/doxygen/html/structxb_1_1xbTblList.html
@@ -160,7 +160,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.1.0/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
+<li>/mnt/1Tdata/xbase/xbase64-4.1.4/src/include/<a class="el" href="xbtblmgr_8h_source.html">xbtblmgr.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/tstfuncs_8cpp.html b/docs/doxygen/html/tstfuncs_8cpp.html
index dbc72bf..91c12b8 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.1.0/src/tests/tstfuncs.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/tstfuncs.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__cfg__check_8cpp.html b/docs/doxygen/html/xb__cfg__check_8cpp.html
index 124dfaf..792b547 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.1.0/src/utils/xb_cfg_check.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_cfg_check.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__copydbf_8cpp.html b/docs/doxygen/html/xb__copydbf_8cpp.html
index b79ed7a..e1eb6df 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.1.0/src/utils/xb_copydbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_copydbf.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__dbfutil_8cpp.html b/docs/doxygen/html/xb__dbfutil_8cpp.html
index 3adab86..8bae555 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.1.0/src/utils/xb_dbfutil.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dbfutil.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__deletall_8cpp.html b/docs/doxygen/html/xb__deletall_8cpp.html
index d643d2e..b8834ae 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.1.0/src/utils/xb_deletall.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_deletall.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__dumpdbt_8cpp.html b/docs/doxygen/html/xb__dumpdbt_8cpp.html
index d664d5f..aa95e61 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.1.0/src/utils/xb_dumpdbt.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumpdbt.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__dumprecs_8cpp.html b/docs/doxygen/html/xb__dumprecs_8cpp.html
index e68256e..7c6187e 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.1.0/src/utils/xb_dumprecs.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_dumprecs.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__ex__date_8cpp.html b/docs/doxygen/html/xb__ex__date_8cpp.html
index 24429e7..a3c9419 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.1.0/src/examples/xb_ex_date.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_date.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__ex__expression_8cpp.html b/docs/doxygen/html/xb__ex__expression_8cpp.html
index 9ef36af..fcc64f1 100644
--- a/docs/doxygen/html/xb__ex__expression_8cpp.html
+++ b/docs/doxygen/html/xb__ex__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.1.0/src/examples/xb_ex_expression.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_expression.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__ex__log_8cpp.html b/docs/doxygen/html/xb__ex__log_8cpp.html
new file mode 100644
index 0000000..9070017
--- /dev/null
+++ b/docs/doxygen/html/xb__ex__log_8cpp.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_log.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_e931c1a3f0014e624d0645a271726ad2.html">examples</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_ex_log.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__log_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xb__ex__sql_8cpp.html b/docs/doxygen/html/xb__ex__sql_8cpp.html
index edb601b..d49de9f 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.1.0/src/examples/xb_ex_sql.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_sql.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__ex__ssv_8cpp.html b/docs/doxygen/html/xb__ex__ssv_8cpp.html
index dcf2628..7576f99 100644
--- a/docs/doxygen/html/xb__ex__ssv_8cpp.html
+++ b/docs/doxygen/html/xb__ex__ssv_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.1.0/src/examples/xb_ex_ssv.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_ssv.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -76,12 +76,12 @@ $(function() {
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
-<tr class="memitem:a0c99d968a34e803d378692bde2e3f18f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">main</a> (int ac, char **av)</td></tr>
-<tr class="separator:a0c99d968a34e803d378692bde2e3f18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6438fb6826a353355708e08b4395d689"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__ex__ssv_8cpp.html#a6438fb6826a353355708e08b4395d689">main</a> (int, char **av)</td></tr>
+<tr class="separator:a6438fb6826a353355708e08b4395d689"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
-<a id="a0c99d968a34e803d378692bde2e3f18f" name="a0c99d968a34e803d378692bde2e3f18f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0c99d968a34e803d378692bde2e3f18f">&#9670;&nbsp;</a></span>main()</h2>
+<a id="a6438fb6826a353355708e08b4395d689" name="a6438fb6826a353355708e08b4395d689"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6438fb6826a353355708e08b4395d689">&#9670;&nbsp;</a></span>main()</h2>
<div class="memitem">
<div class="memproto">
@@ -90,7 +90,7 @@ Functions</h2></td></tr>
<td class="memname">int main </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
- <td class="paramname"><em>ac</em>, </td>
+ <td class="paramname">, </td>
</tr>
<tr>
<td class="paramkey"></td>
diff --git a/docs/doxygen/html/xb__ex__string_8cpp.html b/docs/doxygen/html/xb__ex__string_8cpp.html
index 9daa57a..8fd378f 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.1.0/src/examples/xb_ex_string.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_string.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
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 a32c39b..e457106 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.1.0/src/examples/xb_ex_v3_create_dbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_create_dbf.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
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 b16f9cc..ec407f3 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.1.0/src/examples/xb_ex_v3_upd_dbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v3_upd_dbf.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
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 243b739..22ec40c 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.1.0/src/examples/xb_ex_v4_create_dbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_create_dbf.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
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 ff4ca67..ef0e8c1 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.1.0/src/examples/xb_ex_v4_upd_dbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/examples/xb_ex_v4_upd_dbf.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__execsql_8cpp.html b/docs/doxygen/html/xb__execsql_8cpp.html
index b00df44..89e032e 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.1.0/src/utils/xb_execsql.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_execsql.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -76,14 +76,18 @@ $(function() {
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
-<tr class="memitem:af888ba5e7e94d92c2165362b87f1ea0e"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e">GetNextSqlCmd</a> (<a class="el" href="classxb_1_1xbFile.html">xbFile</a> &amp;f, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCmd)</td></tr>
-<tr class="separator:af888ba5e7e94d92c2165362b87f1ea0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0c99d968a34e803d378692bde2e3f18f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f">main</a> (int ac, char **av)</td></tr>
-<tr class="separator:a0c99d968a34e803d378692bde2e3f18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb176b752e38521fdb334b4976965945"><td class="memItemLeft" align="right" valign="top">xbInt16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#adb176b752e38521fdb334b4976965945">GetNextSqlCmd</a> (<a class="el" href="classxb_1_1xbFile.html">xbFile</a> &amp;f, <a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;sCmd, <a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bQuiet)</td></tr>
+<tr class="separator:adb176b752e38521fdb334b4976965945"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__execsql_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
-<a id="af888ba5e7e94d92c2165362b87f1ea0e" name="af888ba5e7e94d92c2165362b87f1ea0e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af888ba5e7e94d92c2165362b87f1ea0e">&#9670;&nbsp;</a></span>GetNextSqlCmd()</h2>
+<a id="adb176b752e38521fdb334b4976965945" name="adb176b752e38521fdb334b4976965945"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb176b752e38521fdb334b4976965945">&#9670;&nbsp;</a></span>GetNextSqlCmd()</h2>
<div class="memitem">
<div class="memproto">
@@ -98,7 +102,13 @@ Functions</h2></td></tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classxb_1_1xbString.html">xbString</a> &amp;&#160;</td>
- <td class="paramname"><em>sCmd</em>&#160;</td>
+ <td class="paramname"><em>sCmd</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a>&#160;</td>
+ <td class="paramname"><em>bQuiet</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -110,8 +120,8 @@ Functions</h2></td></tr>
</div>
</div>
-<a id="a0c99d968a34e803d378692bde2e3f18f" name="a0c99d968a34e803d378692bde2e3f18f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0c99d968a34e803d378692bde2e3f18f">&#9670;&nbsp;</a></span>main()</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
<div class="memitem">
<div class="memproto">
@@ -120,13 +130,13 @@ Functions</h2></td></tr>
<td class="memname">int main </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
- <td class="paramname"><em>ac</em>, </td>
+ <td class="paramname"><em>argc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">char **&#160;</td>
- <td class="paramname"><em>av</em>&#160;</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
</tr>
<tr>
<td></td>
@@ -138,6 +148,40 @@ Functions</h2></td></tr>
</div>
</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/doxygen/html/xb__import_8cpp.html b/docs/doxygen/html/xb__import_8cpp.html
new file mode 100644
index 0000000..1ddc34d
--- /dev/null
+++ b/docs/doxygen/html/xb__import_8cpp.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_import.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_313caf1132e152dd9b58bea13a4052ca.html">utils</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_import.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="xbase_8h_source.html">xbase.h</a>&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsFldMap.html">sFldMap</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__import_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef">PrintHelp</a> ()</td></tr>
+<tr class="separator:ae964ff8411b4fdcaf65cb5529aea4bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fae5968f70747445d63f63065fb7ef3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__import_8cpp.html#a1fae5968f70747445d63f63065fb7ef3">PrintVersion</a> ()</td></tr>
+<tr class="separator:a1fae5968f70747445d63f63065fb7ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ddf1224851353fc92bfbff6f499fa97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__import_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (int argc, char *argv[])</td></tr>
+<tr class="separator:a0ddf1224851353fc92bfbff6f499fa97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a0ddf1224851353fc92bfbff6f499fa97" name="a0ddf1224851353fc92bfbff6f499fa97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0ddf1224851353fc92bfbff6f499fa97">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae964ff8411b4fdcaf65cb5529aea4bef" name="ae964ff8411b4fdcaf65cb5529aea4bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae964ff8411b4fdcaf65cb5529aea4bef">&#9670;&nbsp;</a></span>PrintHelp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintHelp </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a1fae5968f70747445d63f63065fb7ef3" name="a1fae5968f70747445d63f63065fb7ef3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fae5968f70747445d63f63065fb7ef3">&#9670;&nbsp;</a></span>PrintVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void PrintVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xb__pack_8cpp.html b/docs/doxygen/html/xb__pack_8cpp.html
index e007f38..50632f7 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.1.0/src/utils/xb_pack.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_pack.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__tblinfo_8cpp.html b/docs/doxygen/html/xb__tblinfo_8cpp.html
index e01295b..3ecdd3c 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.1.0/src/utils/xb_tblinfo.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_tblinfo.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__bcd_8cpp.html b/docs/doxygen/html/xb__test__bcd_8cpp.html
index 0de8fc2..e01aea3 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.1.0/src/tests/xb_test_bcd.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_bcd.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__blockread_8cpp.html b/docs/doxygen/html/xb__test__blockread_8cpp.html
index 195746e..2cb8c53 100644
--- a/docs/doxygen/html/xb__test__blockread_8cpp.html
+++ b/docs/doxygen/html/xb__test__blockread_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.1.0/src/tests/xb_test_blockread.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_blockread.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__date_8cpp.html b/docs/doxygen/html/xb__test__date_8cpp.html
index a6b3d97..a71a906 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.1.0/src/tests/xb_test_date.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_date.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
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 60eced6..a1f8d65 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.1.0/src/tests/xb_test_dbf_v3_memos.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_memos.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
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 59c23e1..f9ad3c0 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.1.0/src/tests/xb_test_dbf_v3_nomemos.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v3_nomemos.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
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 86e0b35..ec46fae 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.1.0/src/tests/xb_test_dbf_v4_memos.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_memos.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
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 e9b853a..bdadc98 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.1.0/src/tests/xb_test_dbf_v4_nomemos.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_dbf_v4_nomemos.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__expnode_8cpp.html b/docs/doxygen/html/xb__test__expnode_8cpp.html
index 630ecdb..b378c82 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.1.0/src/tests/xb_test_expnode.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expnode.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__expression_8cpp.html b/docs/doxygen/html/xb__test__expression_8cpp.html
index 6be59f2..b1f4f5f 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.1.0/src/tests/xb_test_expression.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_expression.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__file_8cpp.html b/docs/doxygen/html/xb__test__file_8cpp.html
index 6a9b6b0..c2a68c1 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.1.0/src/tests/xb_test_file.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_file.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__filter_8cpp.html b/docs/doxygen/html/xb__test__filter_8cpp.html
index 7176b10..f366c17 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.1.0/src/tests/xb_test_filter.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_filter.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__funcs_8cpp.html b/docs/doxygen/html/xb__test__funcs_8cpp.html
index fc28aec..d71b646 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.1.0/src/tests/xb_test_funcs.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_funcs.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__linklist_8cpp.html b/docs/doxygen/html/xb__test__linklist_8cpp.html
index 2d6be8e..002accf 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.1.0/src/tests/xb_test_linklist.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_linklist.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__lock2_8cpp.html b/docs/doxygen/html/xb__test__lock2_8cpp.html
index 54f9e90..a678c7f 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.1.0/src/tests/xb_test_lock2.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock2.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__lock_8cpp.html b/docs/doxygen/html/xb__test__lock_8cpp.html
index 5d83846..ad9919a 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.1.0/src/tests/xb_test_lock.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_lock.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__log_8cpp.html b/docs/doxygen/html/xb__test__log_8cpp.html
index b3115b6..d3fdba6 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.1.0/src/tests/xb_test_log.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_log.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__mdx_8cpp.html b/docs/doxygen/html/xb__test__mdx_8cpp.html
index 1fb7381..9ddc1da 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.1.0/src/tests/xb_test_mdx.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_mdx.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__ndx_8cpp.html b/docs/doxygen/html/xb__test__ndx_8cpp.html
index 78bcd99..89882be 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.1.0/src/tests/xb_test_ndx.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_ndx.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__sql_8cpp.html b/docs/doxygen/html/xb__test__sql_8cpp.html
index 759da86..919c01c 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.1.0/src/tests/xb_test_sql.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_sql.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__string_8cpp.html b/docs/doxygen/html/xb__test__string_8cpp.html
index 2a28164..87d816d 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.1.0/src/tests/xb_test_string.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_string.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__tblmgr_8cpp.html b/docs/doxygen/html/xb__test__tblmgr_8cpp.html
index df12fec..100eadb 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.1.0/src/tests/xb_test_tblmgr.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tblmgr.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__tdx_8cpp.html b/docs/doxygen/html/xb__test__tdx_8cpp.html
new file mode 100644
index 0000000..67c96f4
--- /dev/null
+++ b/docs/doxygen/html/xb__test__tdx_8cpp.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_tdx.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_d93a1d4020dea85bb71b237545b5e722.html">tests</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">xb_test_tdx.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="tstfuncs_8cpp.html">tstfuncs.cpp</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1470527971db41f828c26074cde7e15a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xb__test__tdx_8cpp.html#a1470527971db41f828c26074cde7e15a">main</a> (int argCnt, char **av)</td></tr>
+<tr class="separator:a1470527971db41f828c26074cde7e15a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a1470527971db41f828c26074cde7e15a" name="a1470527971db41f828c26074cde7e15a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1470527971db41f828c26074cde7e15a">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argCnt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>av</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xb__test__uda_8cpp.html b/docs/doxygen/html/xb__test__uda_8cpp.html
index bc917d6..d73026e 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.1.0/src/tests/xb_test_uda.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_uda.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__test__xbase_8cpp.html b/docs/doxygen/html/xb__test__xbase_8cpp.html
index ac33034..ad5ebb9 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.1.0/src/tests/xb_test_xbase.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/tests/xb_test_xbase.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xb__undelall_8cpp.html b/docs/doxygen/html/xb__undelall_8cpp.html
index 04da1a6..10f1f27 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.1.0/src/utils/xb_undelall.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/utils/xb_undelall.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbalttbl_8cpp.html b/docs/doxygen/html/xbalttbl_8cpp.html
index 6fdf925..21799cb 100644
--- a/docs/doxygen/html/xbalttbl_8cpp.html
+++ b/docs/doxygen/html/xbalttbl_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.1.0/src/sql/xbalttbl.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbalttbl.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbase_8h.html b/docs/doxygen/html/xbase_8h.html
index e91ad08..055fcc5 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.1.0/src/include/xbase.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbase_8h_source.html b/docs/doxygen/html/xbase_8h_source.html
index fe74fac..9d6988f 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.1.0/src/include/xbase.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbase.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbbcd_8cpp.html b/docs/doxygen/html/xbbcd_8cpp.html
index 26f5cf0..588a841 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.1.0/src/core/xbbcd.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbbcd.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbbcd_8h.html b/docs/doxygen/html/xbbcd_8h.html
index c8ad04d..e5f224b 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.1.0/src/include/xbbcd.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbbcd_8h_source.html b/docs/doxygen/html/xbbcd_8h_source.html
index a76c0ce..adb27a6 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.1.0/src/include/xbbcd.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbbcd.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbblkread_8h.html b/docs/doxygen/html/xbblkread_8h.html
index f79f691..dca115e 100644
--- a/docs/doxygen/html/xbblkread_8h.html
+++ b/docs/doxygen/html/xbblkread_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.1.0/src/include/xbblkread.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbblkread_8h_source.html b/docs/doxygen/html/xbblkread_8h_source.html
index 6da459b..95e7c3e 100644
--- a/docs/doxygen/html/xbblkread_8h_source.html
+++ b/docs/doxygen/html/xbblkread_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.1.0/src/include/xbblkread.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbblkread.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbblockread_8cpp.html b/docs/doxygen/html/xbblockread_8cpp.html
index e75a40c..e4c9a2f 100644
--- a/docs/doxygen/html/xbblockread_8cpp.html
+++ b/docs/doxygen/html/xbblockread_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.1.0/src/core/xbblockread.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbblockread.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbcrix_8cpp.html b/docs/doxygen/html/xbcrix_8cpp.html
index a7fc095..e844b33 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.1.0/src/sql/xbcrix.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.2/src/sql/xbcrix.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbcrtbl_8cpp.html b/docs/doxygen/html/xbcrtbl_8cpp.html
index 816b297..c4e3a34 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.1.0/src/sql/xbcrtbl.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbcrtbl.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbcrtbl_8save2_8cpp.html b/docs/doxygen/html/xbcrtbl_8save2_8cpp.html
new file mode 100644
index 0000000..5875287
--- /dev/null
+++ b/docs/doxygen/html/xbcrtbl_8save2_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.2/src/sql/xbcrtbl.save2.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_25b94c3afce00ed38231227d8141f932.html">sql</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbcrtbl.save2.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xbcrtbl_8save_8cpp.html b/docs/doxygen/html/xbcrtbl_8save_8cpp.html
index fce08f6..20b4367 100644
--- a/docs/doxygen/html/xbcrtbl_8save_8cpp.html
+++ b/docs/doxygen/html/xbcrtbl_8save_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.1.0/src/sql/xbcrtbl.save.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.2/src/sql/xbcrtbl.save.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbdate_8cpp.html b/docs/doxygen/html/xbdate_8cpp.html
index 7db59c4..3ac1b41 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.1.0/src/core/xbdate.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbdate.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbdate_8h.html b/docs/doxygen/html/xbdate_8h.html
index d910af4..39d4265 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.1.0/src/include/xbdate.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbdate.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbdate_8h_source.html b/docs/doxygen/html/xbdate_8h_source.html
index fbebea0..10178d8 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.1.0/src/include/xbdate.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbdate.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -113,60 +113,63 @@ $(function() {
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> * Date8 );</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Date8 );</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( xbInt32 lJulDate );</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <a class="code hl_class" href="classxb_1_1xbDate.html">~xbDate</a>();</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;d );</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> operator+=( xbInt32 i );</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> operator-=( xbInt32 i );</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> operator++( xbInt32 i );</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> operator--( xbInt32 i );</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> xbInt32 operator-( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * operator-( xbInt32 i );</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * operator+( xbInt32 i );</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator==( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator!=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&lt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&gt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&lt;=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&gt;=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> xbInt16 CalcRollingCenturyForYear( xbInt16 year ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbInt16 CenturyOf() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> xbInt16 CharDayOf( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharDay );</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 CharMonthOf( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharMonth );</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> DateIsValid ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDate8 ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> xbInt16 DayOf( xbInt16 iFormat ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 CTOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCtodInDate );</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 FormatDate( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtOut );</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeapYear( xbInt16 iYear ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeapYear() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbInt32 JulianDays() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> xbInt16 JulToDate8( xbInt32 lJulDate );</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> xbInt16 LastDayOfMonth();</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbInt16 MonthOf() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbInt16 Set( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Date8 );</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 Sysdate();</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt16 YearOf() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="preprocessor">#ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> Dump( <span class="keyword">const</span> <span class="keywordtype">char</span> * title );</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordtype">void</span> DumpDateTables();</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">void</span> SetDateTables();</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDate8; <span class="comment">/* CCYYMMDD date format ie; 20140718 */</span></div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">static</span> <span class="keywordtype">int</span> iAggregatedDaysInMonths[2][13];</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">static</span> <span class="keywordtype">int</span> iDaysInMonths[2][13];</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>};</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="preprocessor">#endif </span><span class="comment">/*__XB_XBDATE_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a>( xbUInt16 iInit ); <span class="comment">// Constructor used to set the static variables, also defaults to sysdate</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <a class="code hl_class" href="classxb_1_1xbDate.html">~xbDate</a>();</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> operator=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;d );</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> operator+=( xbInt32 i );</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> operator-=( xbInt32 i );</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> operator++( xbInt32 i );</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> operator--( xbInt32 i );</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> xbInt32 operator-( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * operator-( xbInt32 i );</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * operator+( xbInt32 i );</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator==( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator!=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&lt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&gt; ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&lt;=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> operator&gt;=( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp; ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbInt16 CalcRollingCenturyForYear( xbInt16 year ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> xbInt16 CenturyOf() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 CharDayOf( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharDay );</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbInt16 CharMonthOf( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutCharMonth );</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> DateIsValid ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDate8 ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 DayOf( xbInt16 iFormat ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 CTOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCtodInDate );</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> xbInt16 FormatDate( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmtOut );</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeapYear( xbInt16 iYear ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeapYear() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNull() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> xbInt32 JulianDays() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbInt16 JulToDate8( xbInt32 lJulDate );</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbInt16 LastDayOfMonth();</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 MonthOf() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt16 Set( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Date8 );</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 Sysdate();</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbInt16 YearOf() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="preprocessor">#ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> Dump( <span class="keyword">const</span> <span class="keywordtype">char</span> * title );</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> DumpDateTables();</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">void</span> SetDateTables();</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDate8; <span class="comment">// CCYYMMDD date format ie; 20140718</span></div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="comment">// Null date is identified by sDate.Len() &lt; 8</span></div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">static</span> <span class="keywordtype">int</span> iAggregatedDaysInMonths[2][13];</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">static</span> <span class="keywordtype">int</span> iDaysInMonths[2][13];</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span>};</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="preprocessor">#endif </span><span class="comment">/*__XB_XBDATE_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
<div class="ttc" id="aclassxb_1_1xbDate_html"><div class="ttname"><a href="classxb_1_1xbDate.html">xb::xbDate</a></div><div class="ttdoc">xbDate class.</div><div class="ttdef"><b>Definition:</b> xbdate.h:62</div></div>
<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
diff --git a/docs/doxygen/html/xbdbf3_8cpp.html b/docs/doxygen/html/xbdbf3_8cpp.html
index 84171c6..5adadaa 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.1.0/src/core/xbdbf3.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf3.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbdbf4_8cpp.html b/docs/doxygen/html/xbdbf4_8cpp.html
index 7bf435f..5395036 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.1.0/src/core/xbdbf4.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf4.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbdbf_8cpp.html b/docs/doxygen/html/xbdbf_8cpp.html
index 918936e..c4ea1d7 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.1.0/src/core/xbdbf.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbdbf.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbdbf_8h.html b/docs/doxygen/html/xbdbf_8h.html
index 39b2a14..19a18aa 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.1.0/src/include/xbdbf.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbdbf.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbdbf_8h_source.html b/docs/doxygen/html/xbdbf_8h_source.html
index c871653..4013491 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.1.0/src/include/xbdbf.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbdbf.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -194,7 +194,7 @@ $(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"> 167</span> <span class="keyword">virtual</span> xbInt16 DumpHeader ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">virtual</span> xbInt16 DumpHeader ( xbInt16 iOption );</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">virtual</span> xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">virtual</span> xbInt16 GetAutoCommit () <span class="keyword">const</span>;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">virtual</span> xbInt16 GetAutoCommit ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
@@ -216,7 +216,7 @@ $(function() {
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">virtual</span> xbInt16 GetPrevRecord ( xbInt16 iOption );</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">virtual</span> xbInt16 GetRecord ( xbUInt32 ulRecNo );</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">virtual</span> xbUInt32 GetRecordCount ();</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// virtual xbUInt32 GetRecordCount ();</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">virtual</span> xbInt16 GetRecordCnt ( xbUInt32 &amp; ulRecCnt );</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> * GetRecordBuf ( xbInt16 iOpt = 0 ) <span class="keyword">const</span>;</div>
@@ -237,7 +237,7 @@ $(function() {
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keyword">virtual</span> xbInt16 PutRecord (); <span class="comment">// Put record to current location</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">virtual</span> xbInt16 PutRecord ( xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">virtual</span> xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="comment">// virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );</span></div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keyword">virtual</span> xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708"> 212</a></span> <span class="keyword">virtual</span> xbInt16 <a class="code hl_function" href="classxb_1_1xbDbf.html#aeeeb2eb5fabcd0f91d457df07b0e0708">Rename</a> ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sNewName ) = 0;</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
@@ -281,7 +281,7 @@ $(function() {
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">virtual</span> xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">virtual</span> xbInt16 GetLongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keyword">virtual</span> xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );</div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keyword">virtual</span> xbInt16 PutLongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldNo, xbInt32 lFieldValue );</div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keyword">virtual</span> xbInt16 PutLongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbInt32 lFieldValue );</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keyword">virtual</span> xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keyword">virtual</span> xbInt16 GetULongField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, xbUInt32 &amp;lFieldValue ) <span class="keyword">const</span>;</div>
@@ -304,277 +304,287 @@ $(function() {
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keyword">virtual</span> xbInt16 PutDateField( xbInt16 iFieldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt );</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keyword">virtual</span> xbInt16 PutDateField( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dt );</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> </div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> </div>
-<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldCnt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keyword">virtual</span> xbMemo *GetMemoPtr ();</div>
-<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keyword">virtual</span> xbUInt32 GetCreateMemoBlockSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
-<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
-<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &amp;ullMemoFieldLen );</div>
-<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, xbUInt32 &amp;ulMemoFieldLen );</div>
-<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldExists ( xbInt16 iFieldNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;</div>
-<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( xbInt16 iFldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
-<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
-<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
-<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> </div>
-<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keyword">virtual</span> xbInt16 LockTable ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keyword">virtual</span> xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keyword">virtual</span> xbInt16 LockAppend ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keyword">virtual</span> xbInt16 LockHeader ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
-<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keyword">virtual</span> xbInt16 LockMemo ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMemoLocked () <span class="keyword">const</span>; </div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_LOCK</span></div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> </div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="keyword">virtual</span> xbInt16 LockIndices ( xbInt16 iLockFunction );</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keyword">virtual</span> xbInt16 GetNullSts( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keyword">virtual</span> xbInt16 GetNullSts( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keyword">virtual</span> xbInt16 GetNullSts( xbInt16 iFieldNo, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bIsNull, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldCnt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">virtual</span> xbMemo *GetMemoPtr ();</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">virtual</span> xbUInt32 GetCreateMemoBlockSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( xbInt16 iFldNo, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keyword">virtual</span> xbInt16 GetMemoField ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &amp;ulMemoFieldLen );</div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keyword">virtual</span> xbInt16 GetMemoFieldLen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, xbUInt32 &amp;ulMemoFieldLen );</div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldExists ( xbInt16 iFieldNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> MemoFieldExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFieldName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( xbInt16 iFldNo, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keyword">virtual</span> xbInt16 UpdateMemoField ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sFldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMemoData );</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> </div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keyword">virtual</span> xbInt16 LockTable ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <span class="keyword">virtual</span> xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keyword">virtual</span> xbInt16 LockAppend ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">virtual</span> xbInt16 LockHeader ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keyword">virtual</span> xbInt16 LockMemo ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMemoLocked () <span class="keyword">const</span>; </div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MEMO_LOCK</span></div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> xbInt16 GetAutoLock () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordtype">void</span> SetAutoLock ( xbInt16 iAutoLock );</div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> xbInt16 GetLockFlavor () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordtype">void</span> SetLockFlavor ( xbInt16 iLockFlavor );</div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetTableLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetHeaderLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> xbUInt32 GetAppendLocked () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> xbLinkListNode&lt;xbUInt32&gt; * GetFirstRecLock () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">void</span> DumpTableLockStatus() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span><span class="preprocessor"> #endif </span><span class="comment">// XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> </div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> </div>
-<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );</div>
-<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keyword">virtual</span> xbInt16 CloseIndexFile( xbIx *pIx );</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keyword">virtual</span> xbInt16 CreateTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sKey, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFilter, </div>
-<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, <span class="keywordtype">void</span> **vpTagOut );</div>
-<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName );</div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keyword">virtual</span> xbInt16 DeleteAllIndexFiles();</div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sKey );</div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dtKey );</div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dKey );</div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="keyword">virtual</span> xbIx *GetCurIx() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetCurTag() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> </div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey();</div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">virtual</span> xbInt16 GetNextKey();</div>
-<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey();</div>
-<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keyword">virtual</span> xbInt16 GetLastKey();</div>
-<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetCurIxType() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetCurTagName() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keyword">virtual</span> xbIxList *GetIxList() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keyword">virtual</span> xbInt32 GetPhysicalIxCnt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> xbLinkListNode&lt;xbTag *&gt; *GetTagList () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> </div>
-<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keyword">virtual</span> xbInt16 OpenIndex( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIndexName );</div>
-<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keyword">virtual</span> xbInt16 Reindex( xbInt16 iTagOpt );</div>
-<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTagName );</div>
-<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetCurTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, xbIx *pIx, <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> </div>
-<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> </div>
-<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keyword">virtual</span> xbInt16 AssociateIndex( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName, xbInt16 iOption );</div>
-<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> xbLinkListNode&lt;xbString&gt; *GetInfList() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> </div>
-<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="comment">//#ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="comment">//virtual xbInt16 GetCreateMdxBlockSize() const;</span></div>
-<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <span class="comment">//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</span></div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="comment">//#endif</span></div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> </div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> xbInt16 DisableBlockReadProcessing();</div>
-<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> xbInt16 EnableBlockReadProcessing();</div>
-<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetBlockReadStatus() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> </div>
-<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIx;</div>
-<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIxMdx;</div>
-<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> </div>
-<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> xbInt16 AddIndex( xbIx *ix, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmt );</div>
-<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keywordtype">void</span> ClearTagList();</div>
-<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> xbInt16 RemoveIndex( xbIx * ix );</div>
-<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keywordtype">void</span> UpdateSchemaIxFlag( xbInt16 iFldNo, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVal );</div>
-<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keyword">virtual</span> xbInt16 UpdateTagList ();</div>
-<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div>
-<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="keyword">virtual</span> xbInt16 GetInfFileName( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNdxIdxFileName );</div>
-<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keyword">virtual</span> xbInt16 LockIndices ( xbInt16 iLockFunction );</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> xbInt16 GetAutoLock () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">void</span> SetAutoLock ( xbInt16 iAutoLock );</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> xbInt16 GetLockFlavor () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">void</span> SetLockFlavor ( xbInt16 iLockFlavor );</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetTableLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetHeaderLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> xbUInt32 GetAppendLocked () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> xbLinkListNode&lt;xbUInt32&gt; * GetFirstRecLock () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keywordtype">void</span> DumpTableLockStatus() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="preprocessor"> #endif </span><span class="comment">// XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );</div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keyword">virtual</span> xbInt16 CloseIndexFile( xbIx *pIx );</div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">virtual</span> xbInt16 CreateTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sKey, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFilter, </div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, <span class="keywordtype">void</span> **vpTagOut );</div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName );</div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="keyword">virtual</span> xbInt16 DeleteAllIndexFiles();</div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sKey );</div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dtKey );</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keyword">virtual</span> xbInt16 Find( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dKey );</div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">virtual</span> xbIx *GetCurIx() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetCurTag() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey();</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">virtual</span> xbInt16 GetNextKey();</div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey();</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keyword">virtual</span> xbInt16 GetLastKey();</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetCurIxType() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetCurTagName() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keyword">virtual</span> xbIxList *GetIxList() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keyword">virtual</span> xbInt32 GetPhysicalIxCnt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> xbLinkListNode&lt;xbTag *&gt; *GetTagList () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keyword">virtual</span> xbInt16 OpenIndex( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIndexName );</div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="keyword">virtual</span> xbInt16 Reindex( xbInt16 iTagOpt = 0, xbInt16 iErrorOpt = 1, xbIx **pIx = NULL, <span class="keywordtype">void</span> **vpTag = NULL );</div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTagName );</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetCurTag( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIxType, xbIx *pIx, <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keyword">virtual</span> xbInt16 AssociateIndex( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sType, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sName, xbInt16 iOption );</div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> xbLinkListNode&lt;xbString&gt; *GetInfList() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="comment">//#ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="comment">//virtual xbInt16 GetCreateMdxBlockSize() const;</span></div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="comment">//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</span></div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="comment">//#endif</span></div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> xbInt16 DisableBlockReadProcessing();</div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> xbInt16 EnableBlockReadProcessing();</div>
+<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetBlockReadStatus() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIx;</div>
+<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIxMdx;</div>
+<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbIxTdx;</div>
+<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> </div>
+<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> xbInt16 AddIndex( xbIx *ix, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFmt );</div>
+<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="keywordtype">void</span> ClearTagList();</div>
+<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> xbInt16 RemoveIndex( xbIx * ix );</div>
+<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> <span class="keywordtype">void</span> UpdateSchemaIxFlag( xbInt16 iFldNo, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVal );</div>
+<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> </div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> </div>
-<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBlockRead;</div>
-<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="keyword">virtual</span> xbInt16 UpdateTagList ();</div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keyword">virtual</span> xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> </div>
-<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keywordtype">void</span> SetHeaderLocked ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked );</div>
-<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordtype">void</span> SetTableLocked ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked );</div>
-<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPORT</span></div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keyword">virtual</span> xbInt16 GetInfFileName( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNdxIdxFileName );</div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div>
-<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> xbInt16 iMemoFieldCnt; <span class="comment">// Memo field cnt in the table</span></div>
-<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> xbMemo *Memo; <span class="comment">// Pointer to memo class</span></div>
-<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> xbUInt32 ulCreateMemoBlockSize; <span class="comment">// blocksize to use when creating dbt file</span></div>
-<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> </div>
-<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keyword">virtual</span> xbInt16 DeleteInfData();</div>
-<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="keyword">virtual</span> xbInt16 LoadInfData();</div>
-<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="keyword">virtual</span> xbInt16 SaveInfData();</div>
-<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> </div>
-<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span><span class="comment"> #ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span><span class="comment"> xbInt16 iCreateMdxBlockSize;</span></div>
-<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span><span class="comment"> #endif // XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span><span class="comment">*/</span></div>
-<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> </div>
-<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="keyword">virtual</span> xbInt16 GetRawField( xbInt16 iFieldNo, <span class="keywordtype">char</span> *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323"> 417</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> InitVars(); </div>
-<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d"> 418</a></span> <span class="keyword">virtual</span> xbInt16 SetVersion() = 0;</div>
-<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema( <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> * s ) = 0;</div>
-<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );</div>
-<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> </div>
-<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8"> 422</a></span> </div>
-<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43"> 423</a></span> xbUInt32 ulCurRec; <span class="comment">// Current record or zero</span></div>
-<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> xbInt16 iAutoCommit; <span class="comment">// Auto commit updates if not explicitly performed before moving off record?</span></div>
-<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <span class="comment">// -1 --&gt; Use DBMS default</span></div>
-<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <span class="comment">// 0 --&gt; No auto update on this table, regardless of DBMS setting</span></div>
-<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="comment">// 1 --&gt; Auto update on this table, regardless of DBMS setting</span></div>
-<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388"> 428</a></span> </div>
-<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> xbInt16 iFileVersion; <span class="comment">// xBase file version - which class is in play</span></div>
-<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> </div>
-<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276"> 431</a></span> </div>
-<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a"> 432</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sAlias; <span class="comment">// table alias</span></div>
-<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b"> 433</a></span> xbInt16 iNoOfFields;</div>
-<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> xbInt16 iDbfStatus; <span class="comment">// 0 = closed</span></div>
-<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// 1 = open</span></div>
-<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <span class="comment">// 2 = updates pending</span></div>
-<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7"> 437</a></span> </div>
-<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd"> 438</a></span> xbSchemaRec *SchemaPtr; <span class="comment">// Pointer to field data</span></div>
-<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606"> 439</a></span> <span class="keywordtype">char</span> *RecBuf; <span class="comment">// Pointer to record buffer</span></div>
-<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <span class="keywordtype">char</span> *RecBuf2; <span class="comment">// Pointer to original rec buf allocation</span></div>
-<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div>
-<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> </div>
-<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470"> 443</a></span><span class="comment">/* Next several variables are database header fields, up through dbase V */</span></div>
-<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a"> 444</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVersion;</div>
-<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b"> 445</a></span> <span class="keywordtype">char</span> cUpdateYY;</div>
-<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2"> 446</a></span> <span class="keywordtype">char</span> cUpdateMM;</div>
-<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87"> 447</a></span> <span class="keywordtype">char</span> cUpdateDD;</div>
-<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918"> 448</a></span> xbUInt32 ulNoOfRecs;</div>
-<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91"> 449</a></span> xbUInt16 uiHeaderLen;</div>
-<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970"> 450</a></span> xbUInt16 uiRecordLen;</div>
-<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4"> 451</a></span> <span class="keywordtype">char</span> cTransactionFlag;</div>
-<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b"> 452</a></span> <span class="keywordtype">char</span> cEncryptionFlag;</div>
-<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"> 453</a></span> <span class="keywordtype">char</span> cIndexFlag;</div>
-<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="keywordtype">char</span> cLangDriver; <span class="comment">// dbase 7 sets to 1B</span></div>
-<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> </div>
-<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> </div>
-<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> </div>
-<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="keywordtype">void</span> ResetNoOfRecords(); </div>
-<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> </div>
-<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> </div>
-<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> xbInt16 iAutoLock; <span class="comment">// 0 - autolock off, 1 - autolock on</span></div>
-<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> xbInt16 iLockFlavor;</div>
-<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked; <span class="comment">// is the table locked</span></div>
-<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bHeaderLocked; <span class="comment">// is the header locked</span></div>
-<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> xbUInt32 ulAppendLocked; <span class="comment">// record number of the new record for the append lock operation</span></div>
-<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> xbLinkListOrd&lt;xbUInt32&gt; lloRecLocks; <span class="comment">// ordered link list of locked records</span></div>
-<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBlockRead;</div>
+<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <span class="keywordtype">void</span> SetHeaderLocked ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked );</div>
+<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordtype">void</span> SetTableLocked ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked );</div>
+<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPORT</span></div>
+<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> xbInt16 iMemoFieldCnt; <span class="comment">// Memo field cnt in the table</span></div>
+<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> xbMemo *Memo; <span class="comment">// Pointer to memo class</span></div>
+<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> xbUInt32 ulCreateMemoBlockSize; <span class="comment">// blocksize to use when creating dbt file</span></div>
+<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="keyword">virtual</span> xbInt16 DeleteInfData();</div>
+<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="keyword">virtual</span> xbInt16 LoadInfData();</div>
+<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keyword">virtual</span> xbInt16 SaveInfData();</div>
+<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> </div>
+<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span><span class="comment">/*</span></div>
+<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span><span class="comment"> #ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span><span class="comment"> xbInt16 iCreateMdxBlockSize;</span></div>
+<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span><span class="comment"> #endif // XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span><span class="comment">*/</span></div>
+<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <span class="keyword">virtual</span> xbInt16 GetRawField( xbInt16 iFieldNo, <span class="keywordtype">char</span> *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a7e63e852418f337eb7c44de5dcd50323"> 427</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> InitVars(); </div>
+<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aba5dcac3b4092261bc1669740cdd669d"> 428</a></span> <span class="keyword">virtual</span> xbInt16 SetVersion() = 0;</div>
+<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema( <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> * s ) = 0;</div>
+<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );</div>
+<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> </div>
+<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#afcd99924606be0a9e1e25180bcd1abf8"> 432</a></span> </div>
+<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ab506450954bc86e7bf1d7c4efe681f43"> 433</a></span> xbUInt32 ulCurRec; <span class="comment">// Current record or zero</span></div>
+<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> xbInt16 iAutoCommit; <span class="comment">// Auto commit updates if not explicitly performed before moving off record?</span></div>
+<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="comment">// -1 --&gt; Use DBMS default</span></div>
+<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <span class="comment">// 0 --&gt; No auto update on this table, regardless of DBMS setting</span></div>
+<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="comment">// 1 --&gt; Auto update on this table, regardless of DBMS setting</span></div>
+<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a15f495446f0d75bcf2fa89e3b699d388"> 438</a></span> </div>
+<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> xbInt16 iFileVersion; <span class="comment">// xBase file version - which class is in play</span></div>
+<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> </div>
+<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a73f9c792d0a769e2e604c1855245a276"> 441</a></span> </div>
+<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a5056757614c39f725cc775332494966a"> 442</a></span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sAlias; <span class="comment">// table alias</span></div>
+<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6d8e193da3ca414eef1e8866ec5ca81b"> 443</a></span> xbInt16 iNoOfFields;</div>
+<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> xbInt16 iDbfStatus; <span class="comment">// 0 = closed</span></div>
+<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <span class="comment">// 1 = open</span></div>
+<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="comment">// 2 = updates pending</span></div>
+<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad8c8b5eb12063bb898da1b2cc02cfce7"> 447</a></span> </div>
+<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8a9b3bce0b741e73473d3ebbd6e6f1cd"> 448</a></span> xbSchemaRec *SchemaPtr; <span class="comment">// Pointer to field data</span></div>
+<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a353ebfc8a2960ef827f429ec74025606"> 449</a></span> <span class="keywordtype">char</span> *RecBuf; <span class="comment">// Pointer to record buffer</span></div>
+<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keywordtype">char</span> *RecBuf2; <span class="comment">// Pointer to original rec buf allocation</span></div>
+<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> </div>
+<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a3a262abf658e5fa968b57ef457a69470"> 453</a></span><span class="comment">/* Next several variables are database header fields, up through dbase V */</span></div>
+<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a4fcd6a86ddd32d4a9d76a4074573440a"> 454</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cVersion;</div>
+<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a9340a5e8ee53eb0f3b6601eec2d71e1b"> 455</a></span> <span class="keywordtype">char</span> cUpdateYY;</div>
+<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a6021789d314cd41488991e708fcd0df2"> 456</a></span> <span class="keywordtype">char</span> cUpdateMM;</div>
+<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#acb594ab61dd35b17bdf28394083f8e87"> 457</a></span> <span class="keywordtype">char</span> cUpdateDD;</div>
+<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a62f5fa9149ae0f6dc75642823de66918"> 458</a></span> xbUInt32 ulNoOfRecs;</div>
+<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a1760e222567e2c849f9c799b9d896e91"> 459</a></span> xbUInt16 uiHeaderLen;</div>
+<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ac3c89fc3bc6a6abf385478a8adbed970"> 460</a></span> xbUInt16 uiRecordLen;</div>
+<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#a8734e799707582f022fc341d515650f4"> 461</a></span> <span class="keywordtype">char</span> cTransactionFlag;</div>
+<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#ad59074633641e03647e54d2b66c9102b"> 462</a></span> <span class="keywordtype">char</span> cEncryptionFlag;</div>
+<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"><a class="line" href="classxb_1_1xbDbf.html#aea1dfe5cbd1f9cdbcfc8eb04b2c3d5f1"> 463</a></span> <span class="keywordtype">char</span> cIndexFlag;</div>
+<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keywordtype">char</span> cLangDriver; <span class="comment">// dbase 7 sets to 1B</span></div>
+<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> </div>
+<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> </div>
+<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keywordtype">void</span> ResetNoOfRecords(); </div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> </div>
-<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> xbIxList *ixList; <span class="comment">// pointer to a list of indices associated with the table</span></div>
-<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> xbIx *pCurIx; <span class="comment">// Pointer to current index class</span></div>
-<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="keywordtype">void</span> *vpCurIxTag; <span class="comment">// Pointer to current tag</span></div>
-<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sCurIxType; <span class="comment">// Current index type</span></div>
-<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> xbLinkList&lt;xbTag *&gt; llTags; <span class="comment">// linked list of open tags</span></div>
-<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
-<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> </div>
-<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> xbLinkList&lt;xbString&gt; llInfData; <span class="comment">// linked list of strings containing ndx file entries</span></div>
-<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
-<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> </div>
-<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> xbBlockRead *pRb;</div>
-<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bBlockReadEnabled; <span class="comment">// if true, then block read mode is on</span></div>
-<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> </div>
+<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> xbInt16 iAutoLock; <span class="comment">// 0 - autolock off, 1 - autolock on</span></div>
+<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> xbInt16 iLockFlavor;</div>
+<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bTableLocked; <span class="comment">// is the table locked</span></div>
+<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bHeaderLocked; <span class="comment">// is the header locked</span></div>
+<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> xbUInt32 ulAppendLocked; <span class="comment">// record number of the new record for the append lock operation</span></div>
+<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> xbLinkListOrd&lt;xbUInt32&gt; lloRecLocks; <span class="comment">// ordered link list of locked records</span></div>
+<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span><span class="preprocessor"> #ifdef XB_INDEX_SUPPORT</span></div>
+<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> xbIxList *ixList; <span class="comment">// pointer to a list of indices associated with the table</span></div>
+<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> xbIx *pCurIx; <span class="comment">// Pointer to current index class</span></div>
+<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keywordtype">void</span> *vpCurIxTag; <span class="comment">// Pointer to current tag</span></div>
+<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sCurIxType; <span class="comment">// Current index type</span></div>
+<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> xbLinkList&lt;xbTag *&gt; llTags; <span class="comment">// linked list of open tags</span></div>
+<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INDEX_SUPPORT</span></div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> </div>
-<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> </div>
-<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span>};</div>
-<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> </div>
+<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span><span class="preprocessor"> #ifdef XB_INF_SUPPORT</span></div>
+<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> xbLinkList&lt;xbString&gt; llInfData; <span class="comment">// linked list of strings containing ndx file entries</span></div>
+<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span><span class="preprocessor"> #endif </span><span class="comment">// XB_INF_SUPPORT</span></div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> </div>
-<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span><span class="preprocessor">#ifdef XB_DBF3_SUPPORT</span></div>
-<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> </div>
-<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span><span class="keyword">class </span>XBDLLEXPORT xbDbf3 : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> {</div>
-<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> xbDbf3(<a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *x);</div>
-<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> ~xbDbf3();</div>
-<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> <span class="keyword">virtual</span> xbInt16 CreateTable ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *, xbInt16 iOverlay, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <span class="keyword">virtual</span> xbInt16 Rename ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sNewName );</div>
-<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> </div>
-<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
-<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> </div>
-<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> xbInt16 SetVersion ();</div>
-<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema( <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *s );</div>
-<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> </div>
-<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> xbBlockRead *pRb;</div>
+<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bBlockReadEnabled; <span class="comment">// if true, then block read mode is on</span></div>
+<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> </div>
+<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span>};</div>
+<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> </div>
+<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span><span class="preprocessor">#ifdef XB_DBF3_SUPPORT</span></div>
+<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> </div>
+<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span><span class="keyword">class </span>XBDLLEXPORT xbDbf3 : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> {</div>
+<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> xbDbf3(<a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *x);</div>
+<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> ~xbDbf3();</div>
+<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keyword">virtual</span> xbInt16 CreateTable ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *, xbInt16 iOverlay, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keyword">virtual</span> xbInt16 Rename ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sNewName );</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> </div>
-<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span>};</div>
-<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF3_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> </div>
+<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
+<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span><span class="preprocessor"> #endif</span></div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> </div>
-<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span><span class="preprocessor">#ifdef XB_DBF4_SUPPORT</span></div>
-<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> </div>
-<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span><span class="keyword">class </span>XBDLLEXPORT xbDbf4 : <span class="keyword">public</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> {</div>
-<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> xbDbf4( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</div>
-<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> </div>
-<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> ~xbDbf4();</div>
+<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> xbInt16 SetVersion ();</div>
+<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema( <a class="code hl_struct" href="structxb_1_1xbSchema.html">xbSchema</a> *s );</div>
+<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> </div>
+<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span>};</div>
+<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF3_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> </div>
+<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span><span class="preprocessor">#ifdef XB_DBF4_SUPPORT</span></div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> </div>
-<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <span class="keyword">virtual</span> xbInt16 CreateTable ( <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="keyword">virtual</span> xbInt16 Rename ( <span class="keyword">const</span> xbString sNewName );</div>
-<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> </div>
-<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
-<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
-<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> </div>
-<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="comment">// void InitVars ();</span></div>
-<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> xbInt16 SetVersion();</div>
-<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema ( xbSchema *s );</div>
-<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> </div>
-<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> </div>
-<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span>};</div>
-<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> </div>
-<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF4_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> </div>
-<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_DBF_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span><span class="keyword">class </span>XBDLLEXPORT xbDbf4 : <span class="keyword">public</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> {</div>
+<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> xbDbf4( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *x );</div>
+<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> ~xbDbf4();</div>
+<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keyword">virtual</span> xbInt16 CreateTable ( <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <span class="keyword">virtual</span> xbInt16 GetVersion () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keyword">virtual</span> xbInt16 Open ( <span class="keyword">const</span> xbString &amp;sTableName, <span class="keyword">const</span> xbString &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> <span class="keyword">virtual</span> xbInt16 Rename ( <span class="keyword">const</span> xbString sNewName );</div>
+<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span><span class="preprocessor"> #ifdef XB_MEMO_SUPPORT</span></div>
+<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keyword">virtual</span> xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );</div>
+<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> </div>
+<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> <span class="comment">// void InitVars ();</span></div>
+<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> xbInt16 SetVersion();</div>
+<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="keyword">virtual</span> xbInt16 ValidateSchema ( xbSchema *s );</div>
+<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> </div>
+<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span>};</div>
+<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> </div>
+<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span><span class="preprocessor">#endif </span><span class="comment">/* XB_DBF4_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_DBF_H__ */</span><span class="preprocessor"></span></div>
<div class="ttc" id="aclassxb_1_1xbDate_html"><div class="ttname"><a href="classxb_1_1xbDate.html">xb::xbDate</a></div><div class="ttdoc">xbDate class.</div><div class="ttdef"><b>Definition:</b> xbdate.h:62</div></div>
<div class="ttc" id="aclassxb_1_1xbDbf_html"><div class="ttname"><a href="classxb_1_1xbDbf.html">xb::xbDbf</a></div><div class="ttdoc">Base class for handling dbf files/tables.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:150</div></div>
<div class="ttc" id="aclassxb_1_1xbDbf_html_a49212a9eb17f7fa9f303e08d5fc50fc6"><div class="ttname"><a href="classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6">xb::xbDbf::GetVersion</a></div><div class="ttdeci">virtual xbInt16 GetVersion() const =0</div></div>
diff --git a/docs/doxygen/html/xbdelete_8cpp.html b/docs/doxygen/html/xbdelete_8cpp.html
index 24c2f92..bab3b1c 100644
--- a/docs/doxygen/html/xbdelete_8cpp.html
+++ b/docs/doxygen/html/xbdelete_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.1.0/src/sql/xbdelete.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdelete.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbdrpix_8cpp.html b/docs/doxygen/html/xbdrpix_8cpp.html
index c156992..059570b 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.1.0/src/sql/xbdrpix.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrpix.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbdrptbl_8cpp.html b/docs/doxygen/html/xbdrptbl_8cpp.html
index dbb9d11..2ccae0e 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.1.0/src/sql/xbdrptbl.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbdrptbl.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbexp_8cpp.html b/docs/doxygen/html/xbexp_8cpp.html
index dbbc593..55a0b2e 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.1.0/src/core/xbexp.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbexp.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbexp_8h.html b/docs/doxygen/html/xbexp_8h.html
index 15d6430..f57f73c 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.1.0/src/include/xbexp.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbexp.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -67,11 +67,34 @@ $(function() {
</div>
</div><!-- top -->
<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> </div>
<div class="headertitle"><div class="title">xbexp.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p><a href="xbexp_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a6e9d2ccba2b3ac6e44ab411ffda488c2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2">XB_NULL_DATE</a>&#160;&#160;&#160;21474835648</td></tr>
+<tr class="separator:a6e9d2ccba2b3ac6e44ab411ffda488c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a6e9d2ccba2b3ac6e44ab411ffda488c2" name="a6e9d2ccba2b3ac6e44ab411ffda488c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e9d2ccba2b3ac6e44ab411ffda488c2">&#9670;&nbsp;</a></span>XB_NULL_DATE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_NULL_DATE&#160;&#160;&#160;21474835648</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/doxygen/html/xbexp_8h_source.html b/docs/doxygen/html/xbexp_8h_source.html
index a5195d7..9f7ff76 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.1.0/src/include/xbexp.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbexp.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -94,140 +94,141 @@ $(function() {
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">// #pragma interface</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">// #endif</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="xbexp_8h.html#a6e9d2ccba2b3ac6e44ab411ffda488c2"> 25</a></span><span class="preprocessor">#define XB_NULL_DATE 21474835648</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#ifdef XB_FUNCTION_SUPPORT</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#define XB_EXP_CHAR &#39;C&#39;</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#define XB_EXP_DATE &#39;D&#39;</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#define XB_EXP_LOGICAL &#39;L&#39;</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#define XB_EXP_NUMERIC &#39;N&#39;</span></div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#define XB_EXP_UNKNOWN &#39;U&#39;</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#ifdef XB_EXPRESSION_SUPPORT</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor">#define XB_EXP_CONSTANT &#39;C&#39;</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#define XB_EXP_FUNCTION &#39;F&#39;</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor">#define XB_EXP_FIELD &#39;D&#39;</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#define XB_EXP_OPERATOR &#39;O&#39;</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#define XB_EXP_NOTROOT &#39;N&#39; </span><span class="comment">// not root node, needs further parsing</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#define XB_EXP_PRE_OPERATOR &#39;B&#39; </span><span class="comment">// (B)efore) pre increment, pre decrement</span></div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#define XB_EXP_POST_OPERATOR &#39;A&#39; </span><span class="comment">// (A)fter) post increment, pre decrement</span></div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#define XB_END_OF_EXPRESSION -100</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment">// #define XB_UNBALANCED_PARENS -101</span></div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// #define XB_UNBALANCED_QUOTES -102</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#ifdef XB_FUNCTION_SUPPORT</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#define XB_EXP_CHAR &#39;C&#39;</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#define XB_EXP_DATE &#39;D&#39;</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#define XB_EXP_LOGICAL &#39;L&#39;</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#define XB_EXP_NUMERIC &#39;N&#39;</span></div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#define XB_EXP_UNKNOWN &#39;U&#39;</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#ifdef XB_EXPRESSION_SUPPORT</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#define XB_EXP_CONSTANT &#39;C&#39;</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor">#define XB_EXP_FUNCTION &#39;F&#39;</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#define XB_EXP_FIELD &#39;D&#39;</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#define XB_EXP_OPERATOR &#39;O&#39;</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#define XB_EXP_NOTROOT &#39;N&#39; </span><span class="comment">// not root node, needs further parsing</span></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#define XB_EXP_PRE_OPERATOR &#39;B&#39; </span><span class="comment">// (B)efore) pre increment, pre decrement</span></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#define XB_EXP_POST_OPERATOR &#39;A&#39; </span><span class="comment">// (A)fter) post increment, pre decrement</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#define XB_END_OF_EXPRESSION -100</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment">// #define XB_UNBALANCED_PARENS -101</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment">// #define XB_UNBALANCED_QUOTES -102</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keyword">struct </span>XBDLLEXPORT xbExpToken {</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> xbString sExpression; <span class="comment">// in - expression to pull next token from</span></div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// out - remainder of the expression after token removed</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> xbString sToken; <span class="comment">// next token pulled from the expression</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">char</span> cNodeType; <span class="comment">// one of XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR, XB_EXP_NOTROOT</span></div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">char</span> cReturnType; <span class="comment">// one of XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC, XB_EXP_UNKNOWN</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbInt16 iSts; <span class="comment">// return status after retrieving or attempting next token from expression</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// 0 = no error</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// XB_END_OF_EXPRESSION</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// XB_UNBALANCED_PARENS</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// XB_UNBALANCED_QUOTES</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordtype">char</span> cPrevNodeType; <span class="comment">// previous node type</span></div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">char</span> cPrevReturnType; <span class="comment">// previous return type</span></div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// constructor</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbExpToken() { cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; }</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>};</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexb.html">xb</a>{</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keyword">struct </span>XBDLLEXPORT xbExpToken {</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> xbString sExpression; <span class="comment">// in - expression to pull next token from</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="comment">// out - remainder of the expression after token removed</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> xbString sToken; <span class="comment">// next token pulled from the expression</span></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">char</span> cNodeType; <span class="comment">// one of XB_EXP_CONSTANT, XB_EXP_FUNCTION, XB_EXP_FIELD, XB_EXP_OPERATOR, XB_EXP_NOTROOT</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordtype">char</span> cReturnType; <span class="comment">// one of XB_EXP_CHAR, XB_EXP_DATE, XB_EXP_LOGICAL, XB_EXP_NUMERIC, XB_EXP_UNKNOWN</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> xbInt16 iSts; <span class="comment">// return status after retrieving or attempting next token from expression</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// 0 = no error</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// XB_END_OF_EXPRESSION</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// XB_UNBALANCED_PARENS</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// XB_UNBALANCED_QUOTES</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordtype">char</span> cPrevNodeType; <span class="comment">// previous node type</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordtype">char</span> cPrevReturnType; <span class="comment">// previous return type</span></div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="comment">// constructor</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> xbExpToken() { cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; }</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span>};</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="comment">/************************************************************************/</span></div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="keyword">class </span>XBDLLEXPORT xbExp{</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbExp( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> * );</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbExp( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *, <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * );</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">virtual</span> ~xbExp();</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">void</span> ClearTreeHandle();</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment">/************************************************************************/</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span><span class="keyword">class </span>XBDLLEXPORT xbExp{</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbExp( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> * );</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbExp( <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *, <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * );</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">virtual</span> ~xbExp();</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">void</span> ClearTreeHandle();</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordtype">void</span> DumpTree( xbInt16 iOption );</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> DumpToken( xbExpToken &amp;t, xbInt16 iOption = 0 );</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> xbInt16 GetResultLen() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">char</span> GetReturnType() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> xbInt16 GetBoolResult( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> xbInt16 GetDateResult( xbDate &amp;dtResult );</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> xbInt16 GetNumericResult( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dResult );</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 GetStringResult( xbString &amp;sResult );</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 GetStringResult( <span class="keywordtype">char</span> * vpResult, xbUInt32 ulLen );</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> xbExpNode *GetTreeHandle();</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbInt16 ParseExpression( <span class="keyword">const</span> xbString &amp;sExpression );</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> xbInt16 ParseExpression( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, <span class="keyword">const</span> xbString &amp;sExpression );</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> xbInt16 ProcessExpression();</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> xbInt16 ProcessExpression( xbInt16 iRecBufSw );</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> DumpTree( xbInt16 iOption );</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">void</span> DumpToken( xbExpToken &amp;t, xbInt16 iOption = 0 );</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> xbInt16 GetResultLen() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">char</span> GetReturnType() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> xbInt16 GetBoolResult( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> xbInt16 GetDateResult( xbDate &amp;dtResult );</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 GetNumericResult( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dResult );</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 GetStringResult( xbString &amp;sResult );</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> xbInt16 GetStringResult( <span class="keywordtype">char</span> * vpResult, xbUInt32 ulLen );</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbExpNode *GetTreeHandle();</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> xbInt16 ParseExpression( <span class="keyword">const</span> xbString &amp;sExpression );</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> xbInt16 ParseExpression( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf, <span class="keyword">const</span> xbString &amp;sExpression );</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> xbInt16 ProcessExpression();</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> xbInt16 ProcessExpression( xbInt16 iRecBufSw );</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> xbInt16 GetNextToken( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> xbInt16 OperatorWeight( <span class="keyword">const</span> xbString &amp;sOperator );</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbExpNode *GetNextNode( xbExpNode * n ) <span class="keyword">const</span>; <span class="comment">// traverses the tree from bottom left node, right, then up</span></div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">private</span>: <span class="comment">// methods</span></div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="comment">// xbInt16 CalcExpressionResultLen();</span></div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> xbInt16 CalcFunctionResultLen( xbExpNode *n ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> xbInt16 CalcCharNodeLen( xbExpNode *n );</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> xbInt16 CheckParensAndQuotes( <span class="keyword">const</span> xbString &amp;sExpression );</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> xbInt16 GetExpressionResultLen() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> xbInt16 GetTokenCharConstant ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> xbInt16 GetTokenDatabaseField ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbInt16 GetTokenDateConstant ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbInt16 GetTokenFunction ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> xbInt16 GetTokenLogicalConstant( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt16 GetTokenNumericConstant( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbInt16 GetTokenOperator ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 GetTokenParen ( xbExpToken &amp;t );</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsFunction ( <span class="keyword">const</span> xbString &amp;sExp, <span class="keywordtype">char</span> &amp;cReturnType );</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLogicalConstant ( <span class="keyword">const</span> xbString &amp;sExp );</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNumericConstant ( <span class="keyword">const</span> xbString &amp;sExp, <span class="keywordtype">char</span> cPrevNodeType );</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsOperator ( <span class="keyword">const</span> xbString &amp;sExp );</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">char</span> IsTokenSeparator ( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsWhiteSpace ( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> xbInt16 ParseExpression ( <span class="keyword">const</span> xbString &amp;sExpression, xbInt16 iWeight );</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> xbInt16 ParseExpressionConstant( xbExpToken &amp;t, xbExpNode *n );</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> xbInt16 ParseExpressionFunction( xbExpToken &amp;t, xbExpNode *n, xbInt16 iWeight );</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> xbInt16 ParseExpressionFunctionParms( <span class="keyword">const</span> xbString &amp;sParms, xbLinkList&lt;xbString&gt; &amp;llParms );</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> xbInt16 ParseExpressionField ( xbExpToken &amp;t, xbExpNode *n );</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> xbInt16 ParseExpressionOperator( xbExpToken &amp;t, xbExpNode *n, xbInt16 iWeight );</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> xbInt16 ProcessExpressionOperator( xbExpNode *n );</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">private</span>: <span class="comment">// fields</span></div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase;</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> xbExpNode *nTree; <span class="comment">// pointer to tree of expNodes</span></div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// xbInt16 iExpLen; // size of expression result</span></div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> xbInt16 GetNextToken( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbInt16 OperatorWeight( <span class="keyword">const</span> xbString &amp;sOperator );</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbExpNode *GetNextNode( xbExpNode * n ) <span class="keyword">const</span>; <span class="comment">// traverses the tree from bottom left node, right, then up</span></div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">private</span>: <span class="comment">// methods</span></div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// xbInt16 CalcExpressionResultLen();</span></div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> xbInt16 CalcFunctionResultLen( xbExpNode *n ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> xbInt16 CalcCharNodeLen( xbExpNode *n );</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> xbInt16 CheckParensAndQuotes( <span class="keyword">const</span> xbString &amp;sExpression );</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> xbInt16 GetExpressionResultLen() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> xbInt16 GetTokenCharConstant ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbInt16 GetTokenDatabaseField ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbInt16 GetTokenDateConstant ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> xbInt16 GetTokenFunction ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt16 GetTokenLogicalConstant( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbInt16 GetTokenNumericConstant( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 GetTokenOperator ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 GetTokenParen ( xbExpToken &amp;t );</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsFunction ( <span class="keyword">const</span> xbString &amp;sExp, <span class="keywordtype">char</span> &amp;cReturnType );</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLogicalConstant ( <span class="keyword">const</span> xbString &amp;sExp );</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNumericConstant ( <span class="keyword">const</span> xbString &amp;sExp, <span class="keywordtype">char</span> cPrevNodeType );</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsOperator ( <span class="keyword">const</span> xbString &amp;sExp );</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">char</span> IsTokenSeparator ( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsWhiteSpace ( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> xbInt16 ParseExpression ( <span class="keyword">const</span> xbString &amp;sExpression, xbInt16 iWeight );</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> xbInt16 ParseExpressionConstant( xbExpToken &amp;t, xbExpNode *n );</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> xbInt16 ParseExpressionFunction( xbExpToken &amp;t, xbExpNode *n, xbInt16 iWeight );</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> xbInt16 ParseExpressionFunctionParms( <span class="keyword">const</span> xbString &amp;sParms, xbLinkList&lt;xbString&gt; &amp;llParms );</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> xbInt16 ParseExpressionField ( xbExpToken &amp;t, xbExpNode *n );</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> xbInt16 ParseExpressionOperator( xbExpToken &amp;t, xbExpNode *n, xbInt16 iWeight );</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> xbInt16 ProcessExpressionOperator( xbExpNode *n );</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">private</span>: <span class="comment">// fields</span></div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <a class="code hl_variable" href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xbXBase</a> *xbase;</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbExpNode *nTree; <span class="comment">// pointer to tree of expNodes</span></div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// xbInt16 iExpLen; // size of expression result</span></div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span>};</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="comment">/* Expression handler */</span></div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span>};</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span><span class="comment">/* Expression handler */</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span>};</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="preprocessor">#endif </span><span class="comment">// XB_EXPRESSION_SUPPORT</span></div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="preprocessor">#endif </span><span class="comment">// __XB_EXP_H__</span></div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span>};</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="preprocessor">#endif </span><span class="comment">// XB_EXPRESSION_SUPPORT</span></div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span><span class="preprocessor">#endif </span><span class="comment">// __XB_EXP_H__</span></div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
<div class="ttc" id="anamespacexb_html_a97858ddeb1c4b0100f3edc1a46d3a8b0"><div class="ttname"><a href="namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0">xb::xbXBase</a></div><div class="ttdeci">class XBDLLEXPORT xbXBase</div><div class="ttdef"><b>Definition:</b> xbssv.h:27</div></div>
diff --git a/docs/doxygen/html/xbexpnode_8cpp.html b/docs/doxygen/html/xbexpnode_8cpp.html
index d26df29..1b0480b 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.1.0/src/core/xbexpnode.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbexpnode.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbexpnode_8h.html b/docs/doxygen/html/xbexpnode_8h.html
index 079ab87..a9e458c 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.1.0/src/include/xbexpnode.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbexpnode.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbexpnode_8h_source.html b/docs/doxygen/html/xbexpnode_8h_source.html
index 0043f29..8e5db2b 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.1.0/src/include/xbexpnode.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbexpnode.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -162,7 +162,7 @@ $(function() {
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbUInt32 ulResultLen; <span class="comment">// for string results, accumulated length of character operations</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// includes the sum of all nodes under this + this</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// date = 8, numeric = 4, logical = 1</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 iWeight; <span class="comment">// used for buildign the tree of nodes, assigned to operators</span></div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 iWeight; <span class="comment">// used for building the tree of nodes, assigned to operators</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// the higher the number, the lower it goes on the tree</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>};</div>
diff --git a/docs/doxygen/html/xbfields_8cpp.html b/docs/doxygen/html/xbfields_8cpp.html
index f2cd472..8bd16cd 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.1.0/src/core/xbfields.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbfields.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbfile_8cpp.html b/docs/doxygen/html/xbfile_8cpp.html
index 26e8b99..a5c6c9b 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.1.0/src/core/xbfile.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbfile.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbfile_8h.html b/docs/doxygen/html/xbfile_8h.html
index d778f87..fb36f75 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.1.0/src/include/xbfile.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbfile.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbfile_8h_source.html b/docs/doxygen/html/xbfile_8h_source.html
index 11c4fcd..033b9d6 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.1.0/src/include/xbfile.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbfile.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -108,148 +108,149 @@ $(function() {
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html"> 56</a></span><span class="keyword">class </span>XBDLLEXPORT <a class="code hl_class" href="classxb_1_1xbFile.html">xbFile</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxb_1_1xbSsv.html">xbSsv</a> {</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// xbFile();</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_class" href="classxb_1_1xbFile.html">xbFile</a>( <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> * x );</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_class" href="classxb_1_1xbFile.html">xbFile</a>( <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> * x );</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_class" href="classxb_1_1xbFile.html">~xbFile</a>();</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_class" href="classxb_1_1xbFile.html">~xbFile</a>();</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> xbInt16 SetHomeFolders();</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDirectory() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetFileName() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetFqFileName() <span class="keyword">const</span>;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> xbInt16 CreateUniqueFileName( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut );</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> xbInt16 CreateUniqueFileName( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption );</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> xbInt16 CreateUniqueFileName( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqnOut, xbInt16 iOption = 0 );</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDirectory() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetFileName() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetFqFileName() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordtype">void</span> SetDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory);</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> SetFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName );</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> SetFqFileName( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName );</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> xbUInt32 GetBlockSize () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> xbInt16 GetOpenMode () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> xbInt16 GetShareMode () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> xbInt16 DetermineXbaseTableVersion( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFileTypeByte ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> xbInt16 DetermineXbaseMemoVersion( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFileTypeByte ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> eGetDouble ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> xbInt32 eGetInt32 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> xbUInt32 eGetUInt32 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> xbInt16 eGetInt16 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> xbUInt16 eGetUInt16 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> ePutDouble ( <span class="keywordtype">char</span> *p, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d );</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> ePutInt32 ( <span class="keywordtype">char</span> *p, xbInt32 l );</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">void</span> ePutUInt32 ( <span class="keywordtype">char</span> *p, xbUInt32 ul );</div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> ePutInt16 ( <span class="keywordtype">char</span> *p, xbInt16 s );</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordtype">void</span> ePutUInt16 ( <span class="keywordtype">char</span> *p, xbUInt16 s );</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> xbInt16 GetFileDirPart ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> xbInt16 GetFileDirPart ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> xbInt16 GetFileExtPart ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> xbInt16 GetFileExtPart ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> xbInt16 GetFileNamePart( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> xbInt16 GetFileNamePart( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbInt16 GetFileType ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileIsOpen () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> xbUInt32 GetBlockSize () <span class="keyword">const</span>;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion );</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &amp;cFileTypeByte );</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &amp;cFileTypeByte, xbInt16 &amp;iVersion );</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 DetermineXbaseTableVersion( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFileTypeByte ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 DetermineXbaseMemoVersion( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cFileTypeByte ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileExists ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 GetFileDirPart ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> xbInt16 GetFileDirPart ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileDirPartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> xbInt16 GetFileExtPart ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> xbInt16 GetFileExtPart ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileExtPartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 GetFileMtime ( time_t &amp;mtime );</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> xbInt16 GetFileNamePart( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> xbInt16 GetFileNamePart( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sCompleteFileNameIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileNamePartOut ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> xbInt16 GetFileSize ( xbUInt64 &amp;ullFileSize );</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbInt16 GetFileType ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileType ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> FileIsOpen () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> xbInt16 ReadBlock ( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> readSize, <span class="keywordtype">void</span> *buf );</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, <span class="keywordtype">size_t</span> readSize, <span class="keywordtype">void</span> *buf );</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 WriteBlock( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> writeSize, <span class="keywordtype">void</span> *buf );</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> xbInt16 GetFileSize( xbUInt64 &amp;ullFileSize );</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> xbInt16 GetFileMtime( time_t &amp;mtime );</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> eGetDouble( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> xbInt32 eGetInt32 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> xbUInt32 eGetUInt32( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> xbInt16 eGetInt16 ( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> xbUInt16 eGetUInt16( <span class="keyword">const</span> <span class="keywordtype">char</span> *p ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">void</span> ePutDouble( <span class="keywordtype">char</span> *p, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> d );</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">void</span> ePutInt32 ( <span class="keywordtype">char</span> *p, xbInt32 l );</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">void</span> ePutUInt32( <span class="keywordtype">char</span> *p, xbUInt32 ul );</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">void</span> ePutInt16 ( <span class="keywordtype">char</span> *p, xbInt16 s );</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">void</span> ePutUInt16( <span class="keywordtype">char</span> *p, xbUInt16 s );</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> xbInt16 xbFclose ();</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> xbInt16 xbFeof ();</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbInt16 xbFflush ();</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> xbInt16 xbFgetc ( xbInt32 &amp;c );</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> xbInt16 xbFgetc ( <span class="keywordtype">char</span> &amp;c );</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, <span class="keywordtype">size_t</span> stLen );</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> xbInt16 GetLockRetryCount() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">void</span> SetLockRetryCount( xbInt16 iLockRetries );</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c"> 134</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> ( xbInt16 iOpenMode );</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbInt16 xbFopen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbInt16 xbFopen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMode, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iShareMode );</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> xbInt16 xbFputc ( xbInt32 c );</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> xbInt16 xbFputs ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> xbInt16 xbFread ( <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> nmemb );</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> xbInt16 xbFgets ( <span class="keywordtype">size_t</span> lSize, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLine );</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">size_t</span> xbFtell ();</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">void</span> xbFTurnOffFileBuffering();</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> xbInt16 xbFwrite ( <span class="keyword">const</span> <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> lSize, <span class="keywordtype">size_t</span> lNmemb );</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 xbReadUntil ( <span class="keyword">const</span> <span class="keywordtype">char</span> cDelim, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 xbRemove ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption );</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> xbInt16 xbRemove ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName );</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbInt16 xbRemove ();</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbInt16 GetOpenMode () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbInt16 GetShareMode () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 &amp;iVersion );</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &amp;cFileTypeByte );</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> xbInt16 GetXbaseFileTypeByte( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> &amp;cFileTypeByte, xbInt16 &amp;iVersion );</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> xbInt16 NameSuffixMissing( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> xbInt16 ReadBlock ( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> readSize, <span class="keywordtype">void</span> *buf );</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, <span class="keywordtype">size_t</span> readSize, <span class="keywordtype">void</span> *buf );</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">void</span> SetDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirectory);</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">void</span> SetFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName );</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">void</span> SetFqFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqName );</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> xbInt16 SetHomeFolders();</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> xbInt16 WriteBlock ( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> writeSize, <span class="keywordtype">void</span> *buf );</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> xbInt16 xbFclose ();</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> xbInt16 xbFeof ();</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> xbInt16 xbFflush ();</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> xbInt16 xbFgetc ( xbInt32 &amp;c );</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> xbInt16 xbFgetc ( <span class="keywordtype">char</span> &amp;c );</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> xbInt16 xbFgets ( <span class="keywordtype">size_t</span> lSize, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLine );</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c"> 131</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xbFopen</a> ( xbInt16 iOpenMode );</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> xbInt16 xbFopen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOpenMode, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> xbInt16 xbFopen ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sMode, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iShareMode );</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbInt16 xbFputc ( xbInt32 c );</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> xbInt16 xbFputs ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> xbInt16 xbFread ( <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> nmemb );</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">size_t</span> xbFtell ();</div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keywordtype">void</span> xbFTurnOffFileBuffering();</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> xbInt16 xbReadUntil ( <span class="keyword">const</span> <span class="keywordtype">char</span> cDelim, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> xbInt16 xbRemove ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption );</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> xbInt16 xbRemove ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName );</div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> xbInt16 xbRemove ();</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> xbInt16 xbRename ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNewName );</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordtype">void</span> xbRewind ();</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 xbFwrite ( <span class="keyword">const</span> <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> lSize, <span class="keywordtype">size_t</span> lNmemb );</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> xbInt16 xbTruncate ( xbInt64 llSize );</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> xbInt16 xbRename ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOldName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNewName );</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">void</span> xbRewind ();</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> xbInt16 xbTruncate ( xbInt64 llSize );</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> xbInt16 NameSuffixMissing( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFileName, xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> lBlockSize );</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbInt16 DumpMemToDisk ( <span class="keywordtype">char</span> *p, <span class="keywordtype">size_t</span> lBlockSize );</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, <span class="keywordtype">size_t</span> stLen );</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> xbInt16 GetLockRetryCount() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">void</span> SetLockRetryCount( xbInt16 iLockRetries );</div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, <span class="keywordtype">size_t</span> lBlockSize );</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> xbInt16 DumpMemToDisk ( <span class="keywordtype">char</span> *p, <span class="keywordtype">size_t</span> lBlockSize );</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="preprocessor"> #endif</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004"> 170</a></span> <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *<a class="code hl_variable" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xbase</a>; <span class="comment">/* pointer to the main structures */</span></div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> FILE *fp;</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sFqFileName; <span class="comment">/* fully qualified file name */</span></div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sFileName; <span class="comment">/* file name */</span></div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDirectory; <span class="comment">/* directory, ends with / or \ */</span></div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFileOpen; <span class="comment">/* true if file is open */</span></div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbUInt32 ulBlockSize; <span class="comment">/* used for memo and index files */</span></div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 iOpenMode; <span class="comment">/* XB_READ || XB_READ_WRITE || XB_WRITE */</span></div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 iShareMode; <span class="comment">/* XB_SINGLE_USER || XB_MULTI_USER - set file buffering */</span></div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> xbInt32 iFileNo; <span class="comment">/* Library File No */</span></div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> xbInt16 iLockRetries; <span class="comment">/* file override number of lock attempts */</span></div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="preprocessor"> #ifdef HAVE_SETENDOFFILE_F</span></div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> HANDLE fHandle;</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"><a class="line" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004"> 171</a></span> <a class="code hl_class" href="classxb_1_1xbXBase.html">xbXBase</a> *<a class="code hl_variable" href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xbase</a>; <span class="comment">/* pointer to the main structures */</span></div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> FILE *fp;</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sFqFileName; <span class="comment">/* fully qualified file name */</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sFileName; <span class="comment">/* file name */</span></div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDirectory; <span class="comment">/* directory, ends with / or \ */</span></div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFileOpen; <span class="comment">/* true if file is open */</span></div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbUInt32 ulBlockSize; <span class="comment">/* used for memo and index files */</span></div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 iOpenMode; <span class="comment">/* XB_READ || XB_READ_WRITE || XB_WRITE */</span></div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> xbInt16 iShareMode; <span class="comment">/* XB_SINGLE_USER || XB_MULTI_USER - set file buffering */</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> xbInt32 iFileNo; <span class="comment">/* Library File No */</span></div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> xbInt16 iLockRetries; <span class="comment">/* file override number of lock attempts */</span></div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="preprocessor"> #ifdef HAVE_SETENDOFFILE_F</span></div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> HANDLE fHandle;</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="preprocessor"> #endif</span></div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span>};</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span><span class="preprocessor">#endif </span><span class="comment">/* __XBFILE_H__ */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span>};</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span><span class="preprocessor">#endif </span><span class="comment">/* __XBFILE_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
<div class="ttc" id="aclassxb_1_1xbFile_html"><div class="ttname"><a href="classxb_1_1xbFile.html">xb::xbFile</a></div><div class="ttdoc">Class for handling low level file I/O.</div><div class="ttdef"><b>Definition:</b> xbfile.h:56</div></div>
<div class="ttc" id="aclassxb_1_1xbFile_html_a7cdfef5ede9ac98d44a28a6b7a70972c"><div class="ttname"><a href="classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c">xb::xbFile::xbFopen</a></div><div class="ttdeci">xbInt16 xbFopen(xbInt16 iOpenMode)</div></div>
-<div class="ttc" id="aclassxb_1_1xbFile_html_ae39a67ea391b46055d4ca299cb222004"><div class="ttname"><a href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xb::xbFile::xbase</a></div><div class="ttdeci">xbXBase * xbase</div><div class="ttdef"><b>Definition:</b> xbfile.h:170</div></div>
+<div class="ttc" id="aclassxb_1_1xbFile_html_ae39a67ea391b46055d4ca299cb222004"><div class="ttname"><a href="classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004">xb::xbFile::xbase</a></div><div class="ttdeci">xbXBase * xbase</div><div class="ttdef"><b>Definition:</b> xbfile.h:171</div></div>
<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
diff --git a/docs/doxygen/html/xbfilter_8cpp.html b/docs/doxygen/html/xbfilter_8cpp.html
index 5af181c..78f8bce 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.1.0/src/core/xbfilter.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbfilter.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbfilter_8h.html b/docs/doxygen/html/xbfilter_8h.html
index 211aada..516f562 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.1.0/src/include/xbfilter.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbfilter_8h_source.html b/docs/doxygen/html/xbfilter_8h_source.html
index 854676f..7c2d905 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.1.0/src/include/xbfilter.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbfilter.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbfuncs_8cpp.html b/docs/doxygen/html/xbfuncs_8cpp.html
index 6cc894f..70eeaca 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.1.0/src/core/xbfuncs.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbfuncs.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbindex_8h.html b/docs/doxygen/html/xbindex_8h.html
index 1181fa0..3fc2b53 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.1.0/src/include/xbindex.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbindex_8h_source.html b/docs/doxygen/html/xbindex_8h_source.html
index 823e568..81c93eb 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.1.0/src/include/xbindex.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbindex.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -162,421 +162,429 @@ $(function() {
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">virtual</span> xbInt16 Open( <span class="keyword">const</span> xbString &amp;sFileName );</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">virtual</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag ) = 0;</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbString &amp;sTagName ) = 0;</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetCurTag( <span class="keywordtype">void</span> * vpCurTag );</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetLocked( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLocked );</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> TestStub( <span class="keywordtype">char</span> *s, <span class="keywordtype">void</span> *vpTag ) {};</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbString &amp;sTagName ) = 0;</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetCurTag( <span class="keywordtype">void</span> * vpCurTag );</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetLocked( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLocked );</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> TestStub( <span class="keywordtype">char</span> *s, <span class="keywordtype">void</span> *vpTag ) {};</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">virtual</span> xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) { <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>; }</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keyword">virtual</span> xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">virtual</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) = 0;</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 DumpNode( <span class="keywordtype">void</span> * vpTag, xbIxNode * pNode, xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL ) = 0;</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">virtual</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag ) = 0;</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">virtual</span> xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) { <span class="keywordflow">return</span> <a class="code hl_define" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a>; }</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">virtual</span> xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">virtual</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) = 0;</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">virtual</span> xbInt16 DumpNode( <span class="keywordtype">void</span> * vpTag, xbIxNode * pNode, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">virtual</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL ) = 0;</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="preprocessor"> #endif</span></div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">virtual</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo ) = 0;</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">virtual</span> xbInt16 AddKeys( xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <span class="keyword">virtual</span> xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">virtual</span> xbInt16 BSearchBlock( <span class="keywordtype">char</span> cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, <span class="keyword">const</span> <span class="keywordtype">void</span> *vpKey, xbInt32 lSearchKeyLen, xbInt16 &amp;iCompRc, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDescending = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">virtual</span> xbInt16 CheckForDupKeys();</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">virtual</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">virtual</span> xbInt16 CompareKey( <span class="keywordtype">char</span> cKeyType, <span class="keyword">const</span> <span class="keywordtype">void</span> *v1, <span class="keyword">const</span> <span class="keywordtype">void</span> *v2, <span class="keywordtype">size_t</span> lKeyLen ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> xbInt16 CreateKeys( xbInt16 iOpt );</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">virtual</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt ) = 0;</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span><span class="comment">// virtual xbInt16 DeleteKeys( xbUInt32 ulRecNo );</span></div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">virtual</span> xbInt16 DeleteKeys();</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">virtual</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">virtual</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo ) = 0;</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keyword">virtual</span> xbInt16 AddKeys( xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">virtual</span> xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keyword">virtual</span> xbInt16 BSearchBlock( <span class="keywordtype">char</span> cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, <span class="keyword">const</span> <span class="keywordtype">void</span> *vpKey, xbInt32 lSearchKeyLen, xbInt16 &amp;iCompRc, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDescending = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">virtual</span> xbInt16 CheckForDupKeys();</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keyword">virtual</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">virtual</span> xbInt16 CompareKey( <span class="keywordtype">char</span> cKeyType, <span class="keyword">const</span> <span class="keywordtype">void</span> *v1, <span class="keyword">const</span> <span class="keywordtype">void</span> *v2, <span class="keywordtype">size_t</span> lKeyLen ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">virtual</span> xbInt16 CreateKeys( xbInt16 iOpt );</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">virtual</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt ) = 0;</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">virtual</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">virtual</span> xbInt16 DeleteKeys();</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">virtual</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">virtual</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag ) = 0;</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keyword">virtual</span> xbIxNode *FreeNodeChain( xbIxNode *np );</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keyword">virtual</span> xbInt16 GetBlock( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="comment">// virtual xbBool GetIndexUpdated() const = 0;</span></div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">virtual</span> xbInt32 GetKeyCount( xbIxNode *npNode ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">virtual</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( xbUInt32 ulNodeNo, <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw ) = 0;</div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">virtual</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> * cpKeyBuf, xbUInt32 uiPtr ) = 0;</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">virtual</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">virtual</span> xbInt16 KeyExists( <span class="keywordtype">void</span> * ) = 0;</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span><span class="comment">// virtual xbInt16 KeyUpdated( void *vpTag ) const = 0;</span></div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> NodeFree( xbIxNode * ixNode );</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">virtual</span> xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetDbf( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf );</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">virtual</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr ) = 0;</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">virtual</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">virtual</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 ) = 0;</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">virtual</span> xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">char</span> *cNodeBuf; <span class="comment">// pointer to memory for processing in a block of index data</span></div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keywordtype">void</span> *vpCurTag; <span class="comment">// pointer to active tag. Single index files have only one tag</span></div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) = 0;</div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">virtual</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span> = 0;</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="comment">// virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;</span></div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLocked; <span class="comment">// index file locked?</span></div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span>};</div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> </div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="preprocessor">#ifdef XB_NDX_SUPPORT</span></div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="preprocessor">#define XB_NDX_BLOCK_SIZE 512</span></div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">virtual</span> xbInt32 GetKeyCount( xbIxNode *npNode ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">virtual</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( xbUInt32 ulNodeNo, <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw ) = 0;</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keyword">virtual</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> * cpKeyBuf, xbUInt32 uiPtr ) = 0;</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keyword">virtual</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">virtual</span> xbInt16 KeyExists( <span class="keywordtype">void</span> * ) = 0;</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> NodeFree( xbIxNode * ixNode );</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">virtual</span> xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;</div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="comment">// virtual xbInt16 Reindex( void **vpTag ) = 0;</span></div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetDbf( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf );</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">virtual</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr ) = 0;</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">virtual</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">virtual</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 ) = 0;</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">virtual</span> xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> *dbf;</div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">char</span> *cNodeBuf; <span class="comment">// pointer to memory for processing in a block of index data</span></div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">void</span> *vpCurTag; <span class="comment">// pointer to active tag. Single index files have only one tag</span></div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) = 0;</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keyword">virtual</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <span class="comment">// virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;</span></div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLocked; <span class="comment">// index file locked?</span></div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span>};</div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="preprocessor">#ifdef XB_NDX_SUPPORT</span></div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="preprocessor">#define XB_NDX_BLOCK_SIZE 512</span></div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> </div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="keyword">struct </span>XBDLLEXPORT xbNdxTag {</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> </div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="comment">// NDX File Header Fields</span></div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> xbUInt32 ulRootBlock; <span class="comment">// header node is 0</span></div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> xbUInt32 ulTotalBlocks; <span class="comment">// includes header node</span></div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keywordtype">char</span> cKeyType; <span class="comment">// C = Char, F = Numeric, D = Date</span></div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> xbInt16 iKeyLen; <span class="comment">// length of key data</span></div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> xbInt16 iKeysPerBlock; <span class="comment">// max number keys per block &lt;=100</span></div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> xbInt16 iKeyType; <span class="comment">// 00 = Char, 01 = Numeric</span></div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> xbInt16 iKeyItemLen; <span class="comment">// KeyLen + 8 bytes</span></div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <span class="keywordtype">char</span> cSerNo; <span class="comment">// rolling incrementing serial number +1 on each index update</span></div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> xbInt16 iUnique; <span class="comment">// True if unique</span></div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> xbString sKeyExpression; <span class="comment">// index expression</span></div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="comment">// end of NDX Header field</span></div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> </div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> xbExp *exp; <span class="comment">// pointer to expression for expression keys</span></div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> time_t tNodeChainTs; <span class="comment">// node chain time stamp</span></div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> xbIxNode *npNodeChain;</div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> xbIxNode *npCurNode;</div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">char</span> *cpKeyBuf; <span class="comment">// key buffer, for searches and adds</span></div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordtype">char</span> *cpKeyBuf2; <span class="comment">// key buffer, for deletes</span></div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> xbString sTagName; <span class="comment">// tag name - is the file name without the extension</span></div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span><span class="comment">// xbInt16 iKeyUpdated; // key updated? set in method KeyUpdated, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFoundSts; <span class="comment">// key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey</span></div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> xbInt16 iKeySts; <span class="comment">// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// old key filtered new key filtered iKeySts</span></div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="comment">// Y Y XB_UPD_KEY 2 - update key if changed (delete and add)</span></div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// Y N XB_DEL_KEY 3 - delete key</span></div>
-<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="comment">// N Y XB_ADD_KEY 1 - add key</span></div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="comment">// N N 0 - no update</span></div>
-<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> </div>
-<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span>};</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span><span class="keyword">struct </span>XBDLLEXPORT xbNdxTag {</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// NDX File Header Fields</span></div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> xbUInt32 ulRootBlock; <span class="comment">// header node is 0</span></div>
+<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> xbUInt32 ulTotalBlocks; <span class="comment">// includes header node</span></div>
+<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keywordtype">char</span> cKeyType; <span class="comment">// C = Char, F = Numeric, D = Date</span></div>
+<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> xbInt16 iKeyLen; <span class="comment">// length of key data</span></div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> xbInt16 iKeysPerBlock; <span class="comment">// max number keys per block &lt;=100</span></div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> xbInt16 iKeyType; <span class="comment">// 00 = Char, 01 = Numeric</span></div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> xbInt16 iKeyItemLen; <span class="comment">// KeyLen + 8 bytes</span></div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordtype">char</span> cSerNo; <span class="comment">// rolling incrementing serial number +1 on each index update</span></div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> xbInt16 iUnique; <span class="comment">// True if unique</span></div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> xbString sKeyExpression; <span class="comment">// index expression</span></div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// end of NDX Header field</span></div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> xbExp *exp; <span class="comment">// pointer to expression for expression keys</span></div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> time_t tNodeChainTs; <span class="comment">// node chain time stamp</span></div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> xbIxNode *npNodeChain;</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> xbIxNode *npCurNode;</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordtype">char</span> *cpKeyBuf; <span class="comment">// key buffer, for searches and adds</span></div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">char</span> *cpKeyBuf2; <span class="comment">// key buffer, for deletes</span></div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> xbString sTagName; <span class="comment">// tag name - is the file name without the extension</span></div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFoundSts; <span class="comment">// key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey</span></div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> xbInt16 iKeySts; <span class="comment">// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="comment">// old key filtered new key filtered iKeySts</span></div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="comment">// Y Y XB_UPD_KEY 2 - update key if changed (delete and add)</span></div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="comment">// Y N XB_DEL_KEY 3 - delete key</span></div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="comment">// N Y XB_ADD_KEY 1 - add key</span></div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="comment">// N N 0 - no update</span></div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span>};</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div>
-<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> </div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span><span class="keyword">class </span>XBDLLEXPORT xbIxNdx : <span class="keyword">public</span> xbIx {</div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> xbIxNdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> ~xbIxNdx();</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt );</div>
-<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="comment">// xbInt16 DeleteTag( void *vpTag );</span></div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> xbInt32 GetKeyLen ( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">char</span> GetKeyType ( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> </div>
-<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> xbInt16 GetTagCount() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetUnique( <span class="keywordtype">void</span> *vpTag = NULL ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag );</div>
-<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> xbInt16 SetCurTag( xbInt16 iTagNo );</div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> xbInt16 SetCurTag( xbString &amp;sTagName );</div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> </div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> </div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> </div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL );</div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );</div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt );</div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> xbInt16 DumpNode( <span class="keywordtype">void</span> * vpTag, xbIxNode * pNode, xbInt16 iOption ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> </div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );</div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> xbIxNode *CreateIxNode( xbUInt32 ulBufSize );</div>
-<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt );</div>
-<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );</div>
-<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> </div>
-<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> </div>
-<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span><span class="comment">// xbBool GetIndexUpdated() const;</span></div>
-<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> xbInt16 GetKeyTypeN( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> xbInt16 GetLastKey( xbUInt32 ulNodeNo, <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
-<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> * cpKeyBuf, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> xbInt16 KeyExists( <span class="keywordtype">void</span> *vpTag = NULL );</div>
-<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span><span class="comment">// xbBool KeyFiltered( void *vpTag ) const;</span></div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span><span class="comment">// xbInt16 KeyUpdated( void *vpTag ) const;</span></div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> xbInt16 ReadHeadBlock(xbInt16 iOpt); <span class="comment">// read the header node of the disk NDX file</span></div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 );</div>
-<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> xbInt16 WriteHeadBlock( xbInt16 iOption );</div>
-<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> </div>
-<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );</div>
-<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode );</div>
-<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> xbInt16 GetDbfPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulDbfPtr ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> xbInt16 GetLastKeyForBlockNo( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, <span class="keywordtype">char</span> *cpKeyBuf );</div>
-<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );</div>
-<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> xbInt16 KeySetPosDel( xbNdxTag *npTag );</div>
-<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="comment">// void SetCurNode( void *vpTag, xbIxNode *np );</span></div>
-<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> xbNdxTag *ndxTag;</div>
-<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span>};</div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span><span class="keyword">class </span>XBDLLEXPORT xbIxNdx : <span class="keyword">public</span> xbIx {</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> xbIxNdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> ~xbIxNdx();</div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt );</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> xbInt32 GetKeyLen ( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">char</span> GetKeyType ( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> xbInt16 GetTagCount() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetUnique( <span class="keywordtype">void</span> *vpTag = NULL ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> xbInt16 SetCurTag( xbInt16 iTagNo );</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> xbInt16 SetCurTag( xbString &amp;sTagName );</div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL );</div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );</div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt );</div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> xbInt16 DumpNode( <span class="keywordtype">void</span> * vpTag, xbIxNode * pNode, xbInt16 iOption ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );</div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> xbIxNode *CreateIxNode( xbUInt32 ulBufSize );</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt );</div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> xbInt16 GetKeyTypeN( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> xbInt16 GetLastKey( xbUInt32 ulNodeNo, <span class="keywordtype">void</span> *vpTag, xbInt16 iRetrieveSw = 1 );</div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> * cpKeyBuf, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> xbInt16 KeyExists( <span class="keywordtype">void</span> *vpTag = NULL );</div>
+<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> xbInt16 ReadHeadBlock(xbInt16 iOpt); <span class="comment">// read the header node of the disk NDX file</span></div>
+<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span><span class="comment">// xbInt16 Reindex( void **vpTag );</span></div>
+<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 );</div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> xbInt16 WriteHeadBlock( xbInt16 iOption );</div>
+<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );</div>
+<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode );</div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> xbInt16 GetDbfPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulDbfPtr ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> xbInt16 GetLastKeyForBlockNo( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, <span class="keywordtype">char</span> *cpKeyBuf );</div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );</div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> xbInt16 KeySetPosDel( xbNdxTag *npTag );</div>
+<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> xbNdxTag *ndxTag;</div>
+<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span>};</div>
+<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span><span class="preprocessor">#endif </span><span class="comment">/* XB_NDX_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> </div>
+<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="comment">//#define XB_MDX_BLOCK_SIZE 1024</span></div>
+<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> </div>
+<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="keyword">struct </span>XBDLLEXPORT xbMdxTag {</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div>
-<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="preprocessor">#endif </span><span class="comment">/* XB_NDX_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> </div>
-<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> </div>
-<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><span class="comment">//#define XB_MDX_BLOCK_SIZE 1024</span></div>
-<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> </div>
-<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span><span class="keyword">struct </span>XBDLLEXPORT xbMdxTag {</div>
-<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div>
-<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="comment">// next 7 fields comprise the tag table entry</span></div>
-<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> xbUInt32 ulTagHdrPageNo; <span class="comment">// 512 byte page number, NOT block number</span></div>
-<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="keywordtype">char</span> cTagName[11];</div>
-<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordtype">char</span> cKeyFmt; <span class="comment">// always 0x10 w/ DBase V7</span></div>
-<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="keywordtype">char</span> cLeftChild; <span class="comment">// cFwdTagThread</span></div>
-<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">char</span> cRightChild; <span class="comment">// cFwdTagThread2</span></div>
-<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="keywordtype">char</span> cParent; <span class="comment">// cBwdTagThread</span></div>
-<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keywordtype">char</span> c2;</div>
-<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordtype">char</span> cKeyType; <span class="comment">// C,D,N</span></div>
-<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div>
-<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> xbUInt32 ulRootPage; <span class="comment">// 512 byte page number, NOT block number</span></div>
-<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> xbUInt32 ulTagSize; <span class="comment">// Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block</span></div>
-<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> </div>
-<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordtype">char</span> cKeyFmt2; <span class="comment">// 0x10 - base</span></div>
-<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="comment">// 0x08 - descending</span></div>
-<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="comment">// 0x40 - unique</span></div>
-<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="keywordtype">char</span> cKeyType2;</div>
-<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="comment">// one unused byte fits here</span></div>
-<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> </div>
-<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="keywordtype">char</span> cTag11; <span class="comment">// dbase sets to 0x1B</span></div>
-<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> </div>
-<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> xbInt16 iKeyLen;</div>
-<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> xbInt16 iKeysPerBlock;</div>
-<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> xbInt16 iSecKeyType;</div>
-<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> xbInt16 iKeyItemLen; <span class="comment">// iKeyLen + 4</span></div>
-<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> </div>
-<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordtype">char</span> cSerialNo; <span class="comment">// Increments +1 for each tag update</span></div>
-<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">char</span> cUnique;</div>
-<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> xbString *sKeyExp; <span class="comment">// Key expression</span></div>
-<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> </div>
-<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keywordtype">char</span> cHasFilter; <span class="comment">// 0x00 or 0x01</span></div>
-<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="keywordtype">char</span> cHasKeys; <span class="comment">// 0x00 or 0x01</span></div>
+<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> <span class="comment">// next 7 fields comprise the tag table entry</span></div>
+<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> xbUInt32 ulTagHdrPageNo; <span class="comment">// 512 byte page number, NOT block number</span></div>
+<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">char</span> cTagName[11];</div>
+<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="keywordtype">char</span> cKeyFmt; <span class="comment">// always 0x10 w/ DBase V7</span></div>
+<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <span class="keywordtype">char</span> cLeftChild; <span class="comment">// cFwdTagThread</span></div>
+<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="keywordtype">char</span> cRightChild; <span class="comment">// cFwdTagThread2</span></div>
+<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keywordtype">char</span> cParent; <span class="comment">// cBwdTagThread</span></div>
+<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keywordtype">char</span> c2;</div>
+<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keywordtype">char</span> cKeyType; <span class="comment">// C,D,N</span></div>
+<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> xbUInt32 ulRootPage; <span class="comment">// 512 byte page number, NOT block number</span></div>
+<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> xbUInt32 ulTagSize; <span class="comment">// Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block</span></div>
+<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="keywordtype">char</span> cKeyFmt2; <span class="comment">// 0x10 - base</span></div>
+<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="comment">// 0x08 - descending</span></div>
+<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="comment">// 0x40 - unique</span></div>
+<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordtype">char</span> cKeyType2;</div>
+<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <span class="comment">// one unused byte fits here</span></div>
+<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordtype">char</span> cTag11; <span class="comment">// dbase sets to 0x1B</span></div>
+<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> xbInt16 iKeyLen;</div>
+<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> xbInt16 iKeysPerBlock;</div>
+<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> xbInt16 iSecKeyType;</div>
+<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> xbInt16 iKeyItemLen; <span class="comment">// iKeyLen + 4</span></div>
+<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="keywordtype">char</span> cSerialNo; <span class="comment">// Increments +1 for each tag update</span></div>
+<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keywordtype">char</span> cUnique;</div>
+<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> xbString *sKeyExp; <span class="comment">// Key expression</span></div>
+<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="keywordtype">char</span> cHasFilter; <span class="comment">// 0x00 or 0x01</span></div>
+<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="keywordtype">char</span> cHasKeys; <span class="comment">// 0x00 or 0x01</span></div>
+<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> xbUInt32 ulLeftChild; <span class="comment">// dbase 7 sets this to the root page on tag creation</span></div>
+<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> xbUInt32 ulRightChild; <span class="comment">// dbase 7 sets this to the root page on tag creation</span></div>
+<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> </div>
+<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keywordtype">char</span> cTagYY;</div>
+<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordtype">char</span> cTagMM;</div>
+<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keywordtype">char</span> cTagDD;</div>
+<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <span class="keywordtype">char</span> cKeyFmt3; <span class="comment">// dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation</span></div>
+<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> xbString *sFiltExp; <span class="comment">// Filter expression</span></div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> </div>
-<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> xbUInt32 ulLeftChild; <span class="comment">// dbase 7 sets this to the root page on tag creation</span></div>
-<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> xbUInt32 ulRightChild; <span class="comment">// dbase 7 sets this to the root page on tag creation</span></div>
-<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div>
-<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="keywordtype">char</span> cTagYY;</div>
-<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <span class="keywordtype">char</span> cTagMM;</div>
-<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="keywordtype">char</span> cTagDD;</div>
-<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> </div>
-<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keywordtype">char</span> cKeyFmt3; <span class="comment">// dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation</span></div>
-<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> </div>
-<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> xbString *sFiltExp; <span class="comment">// Filter expression</span></div>
+<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> time_t tNodeChainTs;</div>
+<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> xbIxNode *npNodeChain;</div>
+<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> xbIxNode *npCurNode;</div>
+<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> xbExp *exp; <span class="comment">// pointer to expression for expression based tags</span></div>
+<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> xbExp *filter; <span class="comment">// pointer to expression for index filter</span></div>
+<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <span class="keywordtype">char</span> *cpKeyBuf; <span class="comment">// key buffer</span></div>
+<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keywordtype">char</span> *cpKeyBuf2; <span class="comment">// key buffer</span></div>
+<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> xbString *sTagName; <span class="comment">// string tag name</span></div>
+<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> </div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> </div>
-<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> time_t tNodeChainTs;</div>
-<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> xbIxNode *npNodeChain;</div>
-<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> xbIxNode *npCurNode;</div>
-<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> xbExp *exp; <span class="comment">// pointer to expression for expression based tags</span></div>
-<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> xbExp *filter; <span class="comment">// pointer to expression for index filter</span></div>
-<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div>
-<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="keywordtype">char</span> *cpKeyBuf; <span class="comment">// key buffer</span></div>
-<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="keywordtype">char</span> *cpKeyBuf2; <span class="comment">// key buffer</span></div>
-<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span><span class="comment">// xbBool iKeyUpdated; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <span class="comment">// 0 - no update</span></div>
-<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="comment">// 1 - Add</span></div>
-<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="comment">// 2 - Update</span></div>
-<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="comment">// 3 - Delete</span></div>
-<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span><span class="comment">// xbBool bKeyFiltered; // key filtered? True if included key, False if excluded key. Set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> xbString *sTagName; <span class="comment">// string tag name</span></div>
-<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> </div>
-<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> </div>
-<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> xbMdxTag *next;</div>
-<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFoundSts; <span class="comment">// key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey</span></div>
-<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> </div>
-<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> </div>
-<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> xbInt16 iKeySts; <span class="comment">// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
-<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="comment">// old key filtered new key filtered iKeySts</span></div>
-<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="comment">// Y Y XB_UPD_KEY 2 - update key if changed (delete and add)</span></div>
-<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="comment">// Y N XB_DEL_KEY 3 - delete key</span></div>
-<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <span class="comment">// N Y XB_ADD_KEY 1 - add key</span></div>
-<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="comment">// N N 0 - no update</span></div>
-<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> </div>
-<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> </div>
-<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span>};</div>
-<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> </div>
-<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> </div>
-<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span><span class="keyword">class </span>XBDLLEXPORT xbIxMdx : <span class="keyword">public</span> xbIx {</div>
-<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> xbIxMdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
-<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> ~xbIxMdx();</div>
-<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt );</div>
-<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
-<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span><span class="comment">// xbInt16 DeleteTag( void *vpTag );</span></div>
-<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dKey, xbInt16 iRetrieveSw );</div>
-<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <span class="keywordtype">char</span> GetKeyType( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetReuseEmptyNodesSw() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> xbInt16 GetTagCount() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> xbMdxTag *next;</div>
+<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bFoundSts; <span class="comment">// key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey</span></div>
+<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> xbInt16 iKeySts; <span class="comment">// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines</span></div>
+<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="comment">// old key filtered new key filtered iKeySts</span></div>
+<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="comment">// Y Y XB_UPD_KEY 2 - update key if changed (delete and add)</span></div>
+<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="comment">// Y N XB_DEL_KEY 3 - delete key</span></div>
+<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> <span class="comment">// N Y XB_ADD_KEY 1 - add key</span></div>
+<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <span class="comment">// N N 0 - no update</span></div>
+<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span>};</div>
+<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> </div>
+<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> </div>
+<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span><span class="keyword">class </span>XBDLLEXPORT xbIxMdx : <span class="keyword">public</span> xbIx {</div>
+<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> xbIxMdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
+<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> ~xbIxMdx();</div>
+<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="keyword">virtual</span> xbInt16 CheckTagIntegrity( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt );</div>
+<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <span class="keyword">virtual</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <span class="keyword">const</span> <span class="keywordtype">void</span> *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="keyword">virtual</span> xbInt16 FindKey( <span class="keywordtype">void</span> *vpTag, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dKey, xbInt16 iRetrieveSw );</div>
+<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="keyword">virtual</span> xbInt16 GetFirstKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="keyword">virtual</span> xbString &amp;GetKeyExpression( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <span class="keyword">virtual</span> xbString &amp;GetKeyFilter( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keyword">virtual</span> <span class="keywordtype">char</span> GetKeyType( <span class="keyword">const</span> <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <span class="keyword">virtual</span> xbInt16 GetLastKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keyword">virtual</span> xbInt16 GetNextKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="keyword">virtual</span> xbInt16 GetPrevKey( <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetReuseEmptyNodesSw() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="keyword">virtual</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetSortOrder( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetTag( xbInt16 iTagNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> *GetTag( xbString &amp;sTagName ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> <span class="keyword">virtual</span> xbInt16 GetTagCount() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> <span class="keyword">virtual</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> GetTagName( <span class="keywordtype">void</span> *vpTag, xbString &amp;sTagName );</div>
+<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> </div>
+<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> <span class="keyword">virtual</span> xbInt16 GetUnique( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbInt16 iTagNo );</div>
+<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> <span class="keyword">virtual</span> xbInt16 SetCurTag( xbString &amp;sTagName );</div>
+<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <span class="keywordtype">void</span> SetReuseEmptyNodesSw( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bReuse );</div>
+<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> </div>
+<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <span class="keywordtype">void</span> TestStub( <span class="keywordtype">char</span> *s, <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> </div>
+<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> </div>
+<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keyword">virtual</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> </div>
+<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> </div>
+<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> </div>
-<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> xbString &amp;GetTagName( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetTagName( <span class="keywordtype">void</span> *vpTag, xbInt16 iOpt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordtype">void</span> GetTagName( <span class="keywordtype">void</span> *vpTag, xbString &amp;sTagName );</div>
-<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> </div>
-<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> xbInt16 GetUnique( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> xbInt16 Reindex( <span class="keywordtype">void</span> **vpTag );</div>
-<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> xbInt16 SetCurTag( xbInt16 iTagNo );</div>
-<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> xbInt16 SetCurTag( xbString &amp;sTagName );</div>
-<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> <span class="keywordtype">void</span> SetReuseEmptyNodesSw( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bReuse );</div>
-<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> </div>
-<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <span class="keywordtype">void</span> TestStub( <span class="keywordtype">char</span> *s, <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> </div>
-<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
-<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> </div>
-<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo );</div>
-<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );</div>
-<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> xbInt16 Close();</div>
-<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt );</div>
-<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );</div>
-<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> </div>
-<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> </div>
-<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag );</div>
-<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> xbInt16 GetLastKey( xbUInt32 ulBlockNo, <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
-<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keywordtype">void</span> *GetTagTblPtr() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> <span class="keywordtype">void</span> Init( xbInt16 iOpt = 0 );</div>
-<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> xbInt16 KeyExists( <span class="keywordtype">void</span> * );</div>
-<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> xbInt16 LoadTagTable();</div>
-<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> xbInt16 ReadHeadBlock(xbInt16 iOpt); <span class="comment">// read the header node of the disk file</span></div>
-<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
-<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 );</div>
-<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> xbInt16 WriteHeadBlock( xbInt16 iOption );</div>
+<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> xbInt16 AddKey( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo );</div>
+<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );</div>
+<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="keywordtype">void</span> CalcBtreePointers();</div>
+<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordtype">char</span> CalcTagKeyFmt( xbExp &amp;exp );</div>
+<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> xbInt16 CheckForDupKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> <span class="keyword">virtual</span> xbInt16 Close();</div>
+<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> xbInt16 CreateKey( <span class="keywordtype">void</span> * vpTag, xbInt16 iOpt );</div>
+<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> xbInt16 DeleteFromNode( <span class="keywordtype">void</span> *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );</div>
+<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> xbInt16 DeleteKey( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> </div>
+<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="keyword">virtual</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> xbInt16 FindKeyForCurRec( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> xbInt16 GetKeySts( <span class="keywordtype">void</span> *vpTag ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> xbInt16 GetLastKey( xbUInt32 ulBlockNo, <span class="keywordtype">void</span> *vpTag, xbInt16 lRetrieveSw );</div>
+<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <span class="keywordtype">void</span> *GetTagTblPtr() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> </div>
+<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> xbInt16 HarvestTagNodes( xbMdxTag *mpTag, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bRecycleRoot = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> );</div>
+<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> <span class="keywordtype">void</span> Init( xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> xbInt16 InsertNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> xbInt16 InsertNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> xbInt16 KeyExists( <span class="keywordtype">void</span> * );</div>
+<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> xbInt16 LoadTagTable();</div>
+<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> xbInt16 ReadHeadBlock(xbInt16 iOpt); <span class="comment">// read the header node of the disk file</span></div>
+<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="comment">//virtual xbInt16 Reindex( void **vpTag );</span></div>
+<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> xbInt16 SplitNodeI( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> xbInt16 SplitNodeL( <span class="keywordtype">void</span> *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, <span class="keywordtype">char</span> *cpKeyBuf, xbUInt32 uiPtr );</div>
+<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> xbInt16 UpdateTagKey( <span class="keywordtype">char</span> cAction, <span class="keywordtype">void</span> *vpTag, xbUInt32 ulRecNo = 0 );</div>
+<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> xbInt16 WriteHeadBlock( xbInt16 iOption );</div>
+<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> </div>
+<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL );</div>
+<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );</div>
+<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt );</div>
+<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> </div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> </div>
-<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, <span class="keywordtype">void</span> *vpTag = NULL );</div>
-<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );</div>
-<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );</div>
-<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> xbInt16 DumpIxForTag( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt );</div>
-<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="keywordtype">void</span> DumpIxNodeChain( <span class="keywordtype">void</span> *vpTag, xbInt16 iOutputOpt ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> </div>
-<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );</div>
-<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode );</div>
-<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> xbUInt32 BlockToPage( xbUInt32 ulBlockNo );</div>
-<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="keywordtype">void</span> CalcBtreePointers();</div>
-<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordtype">char</span> CalcTagKeyFmt( xbExp &amp;exp );</div>
-<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keywordtype">char</span> CalcTagFwdThread1();</div>
-<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> <span class="keywordtype">char</span> CalcTagFwdThread2();</div>
-<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> xbMdxTag *ClearTagTable();</div>
-<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );</div>
-<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> xbInt16 GetDbfPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulDbfPtr ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> xbInt16 GetLastKeyForBlockNo( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, <span class="keywordtype">char</span> *cpKeyBuf );</div>
-<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bHarvestRoot = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> );</div>
-<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> xbInt16 HarvestTagNodes( xbMdxTag *mpTag, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bRecycleRoot = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> );</div>
-<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );</div>
-<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> xbInt16 KeySetPosDel( xbMdxTag *mpTag );</div>
-<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );</div>
-<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> xbUInt32 PageToBlock( xbUInt32 ulPageNo );</div>
-<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );</div>
-<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );</div>
-<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> </div>
-<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
-<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> xbInt16 PrintKey( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, <span class="keywordtype">char</span> cType, xbInt16 iOutputOpt );</div>
-<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> </div>
-<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="comment">// MDX File Header Fields</span></div>
-<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="keywordtype">char</span> cVersion;</div>
-<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> <span class="keywordtype">char</span> cCreateYY;</div>
-<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <span class="keywordtype">char</span> cCreateMM;</div>
-<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keywordtype">char</span> cCreateDD;</div>
-<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> xbString sFileName;</div>
-<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> xbInt16 iBlockFactor; <span class="comment">// 1-32 #of 512 byte segments in a block</span></div>
-<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> </div>
-<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="comment">// use file version</span></div>
-<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="comment">// xbInt16 iBlockSize; // Stored at the xbFile level</span></div>
-<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> </div>
-<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordtype">char</span> cProdIxFlag;</div>
-<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> <span class="keywordtype">char</span> cTagEntryCnt;</div>
-<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> xbInt16 iTagLen;</div>
-<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> xbInt16 iTagUseCnt;</div>
-<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <span class="keywordtype">char</span> cNextTag; <span class="comment">// byte 28 +1</span></div>
-<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keywordtype">char</span> c1B; <span class="comment">// always 0x1B</span></div>
-<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> xbUInt32 ulPageCnt; <span class="comment">// number of 512 byte pages in the mdx file</span></div>
-<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> xbUInt32 ulFirstFreePage; <span class="comment">// page number corresponding to the next free block</span></div>
-<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> xbUInt32 ulNoOfBlockAvail; <span class="comment">// might be improperly named?? not sure how it is used</span></div>
-<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> <span class="keywordtype">char</span> cUpdateYY;</div>
-<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordtype">char</span> cUpdateMM;</div>
-<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> <span class="keywordtype">char</span> cUpdateDD;</div>
-<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="comment">// end of MDX Header fields</span></div>
+<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> xbMdxTag *mdxTagTbl;</div>
+<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span><span class="comment">// MDX File Header Fields</span></div>
+<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keywordtype">char</span> cVersion;</div>
+<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="keywordtype">char</span> cCreateYY;</div>
+<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="keywordtype">char</span> cCreateMM;</div>
+<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordtype">char</span> cCreateDD;</div>
+<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> xbString sFileName;</div>
+<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> xbInt16 iBlockFactor; <span class="comment">// 1-32 #of 512 byte segments in a block</span></div>
+<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="comment">// use file version</span></div>
+<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="comment">// xbInt16 iBlockSize; // Stored at the xbFile level</span></div>
+<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> </div>
+<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordtype">char</span> cProdIxFlag;</div>
+<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keywordtype">char</span> cTagEntryCnt;</div>
+<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> xbInt16 iTagLen;</div>
+<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> xbInt16 iTagUseCnt;</div>
+<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keywordtype">char</span> cNextTag; <span class="comment">// byte 28 +1</span></div>
+<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <span class="keywordtype">char</span> c1B; <span class="comment">// always 0x1B</span></div>
+<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> xbUInt32 ulPageCnt; <span class="comment">// number of 512 byte pages in the mdx file</span></div>
+<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> xbUInt32 ulFirstFreePage; <span class="comment">// page number corresponding to the next free block</span></div>
+<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> xbUInt32 ulNoOfBlockAvail; <span class="comment">// might be improperly named?? not sure how it is used</span></div>
+<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <span class="keywordtype">char</span> cUpdateYY;</div>
+<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordtype">char</span> cUpdateMM;</div>
+<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <span class="keywordtype">char</span> cUpdateDD;</div>
+<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="comment">// end of MDX Header fields</span></div>
+<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> </div>
+<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> </div>
+<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bReuseEmptyNodes; <span class="comment">// Reuese empty MDX nodes when all keys deleted?</span></div>
+<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="comment">// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file</span></div>
+<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="comment">// Codebase 6.x reuses empty nodes.</span></div>
+<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="comment">// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.</span></div>
+<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> </div>
+<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );</div>
+<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="keywordtype">void</span> AppendNodeChain( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode );</div>
+<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> xbUInt32 BlockToPage( xbUInt32 ulBlockNo );</div>
+<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> xbMdxTag *ClearTagTable();</div>
+<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );</div>
+<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> xbInt16 GetDbfPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulDbfPtr ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> xbInt16 GetKeyPtr( <span class="keywordtype">void</span> *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &amp;ulKeyPtr ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> xbInt16 GetLastKeyForBlockNo( <span class="keywordtype">void</span> *vpTag, xbUInt32 ulBlockNo, <span class="keywordtype">char</span> *cpKeyBuf );</div>
+<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bHarvestRoot = <a class="code hl_define" href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a> );</div>
+<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsLeaf( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );</div>
+<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> xbInt16 KeySetPosDel( xbMdxTag *mpTag );</div>
+<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );</div>
+<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> xbUInt32 PageToBlock( xbUInt32 ulPageNo );</div>
+<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );</div>
+<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );</div>
+<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> </div>
+<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span><span class="preprocessor"> #ifdef XB_DEBUG_SUPPORT</span></div>
+<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> xbInt16 PrintKey( <span class="keywordtype">void</span> *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, <span class="keywordtype">char</span> cType, xbInt16 iOutputOpt );</div>
+<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> </div>
+<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> </div>
+<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> };</div>
+<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span><span class="preprocessor"> #endif </span><span class="comment">/* XB_MDX_SUPPORT */</span><span class="preprocessor"></span></div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> </div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> </div>
-<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> </div>
-<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> xbMdxTag *mdxTagTbl;</div>
-<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div>
-<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bReuseEmptyNodes; <span class="comment">// Reuese empty MDX nodes when all keys deleted?</span></div>
-<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="comment">// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file</span></div>
-<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="comment">// Codebase 6.x reuses empty nodes.</span></div>
-<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="comment">// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.</span></div>
-<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> </div>
-<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span>};</div>
-<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span><span class="preprocessor">#endif </span><span class="comment">/* XB_MDX_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> </div>
-<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> </div>
-<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span><span class="preprocessor">#endif </span><span class="comment">/* XB_INDEX_SUPPORT */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_INDEX_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span><span class="preprocessor">#ifdef XB_TDX_SUPPORT</span></div>
+<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> </div>
+<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span><span class="keyword">class </span>XBDLLEXPORT xbIxTdx : <span class="keyword">public</span> xbIxMdx {</div>
+<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="keyword">public</span>:</div>
+<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> xbIxTdx( <a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a> * d );</div>
+<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> ~xbIxTdx();</div>
+<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> </div>
+<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> xbInt16 CreateTag( <span class="keyword">const</span> xbString &amp;sName, <span class="keyword">const</span> xbString &amp;sKey, <span class="keyword">const</span> xbString &amp;sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, <span class="keywordtype">void</span> **vpTag );</div>
+<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> </div>
+<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_variable" href="namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b">xbDbf</a>;</div>
+<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> xbInt16 Close();</div>
+<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> xbInt16 DeleteTag( <span class="keywordtype">void</span> *vpTag );</div>
+<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> </div>
+<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span>};</div>
+<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> </div>
+<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span><span class="preprocessor">#endif </span><span class="comment">/* XB_TDX_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> </div>
+<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> </div>
+<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> } <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span><span class="preprocessor"> #endif </span><span class="comment">/* XB_INDEX_SUPPORT */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_INDEX_H__ */</span><span class="preprocessor"></span></div>
<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
diff --git a/docs/doxygen/html/xbinsert_8cpp.html b/docs/doxygen/html/xbinsert_8cpp.html
index 3dfc6a6..e460688 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.1.0/src/sql/xbinsert.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbinsert.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbixbase_8cpp.html b/docs/doxygen/html/xbixbase_8cpp.html
index 71f1dc6..150f9fd 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.1.0/src/core/xbixbase.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbixbase.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbixmdx_8cpp.html b/docs/doxygen/html/xbixmdx_8cpp.html
index 7d15f64..f6dc5f6 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.1.0/src/core/xbixmdx.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbixmdx.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbixndx_8cpp.html b/docs/doxygen/html/xbixndx_8cpp.html
index 26fc15e..fd2aad2 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.1.0/src/core/xbixndx.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbixndx.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbixtdx_8cpp.html b/docs/doxygen/html/xbixtdx_8cpp.html
new file mode 100644
index 0000000..77685ef
--- /dev/null
+++ b/docs/doxygen/html/xbixtdx_8cpp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbixtdx.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">Xbase64<span id="projectnumber">&#160;4.0.1</span>
+ </div>
+ <div id="projectbrief">C++ Library for handling Xbase (DBF) format type files</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_aebb8dcc11953d78e620bbef0b9e2183.html">core</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">xbixtdx.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="xbase_8h_source.html">xbase.h</a>&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/docs/doxygen/html/xblnklst_8h.html b/docs/doxygen/html/xblnklst_8h.html
index 7d4be72..0208dc2 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.1.0/src/include/xblnklst.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xblnklst_8h_source.html b/docs/doxygen/html/xblnklst_8h_source.html
index c8ed015..8e0e24a 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.1.0/src/include/xblnklst.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklst.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -328,8 +328,8 @@ $(function() {
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
-<div class="ttc" id="axbretcod_8h_html_a13e6876470bd34c8c4e5533f115e04eb"><div class="ttname"><a href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a></div><div class="ttdeci">#define XB_INVALID_NODELINK</div><div class="ttdef"><b>Definition:</b> xbretcod.h:28</div></div>
-<div class="ttc" id="axbretcod_8h_html_ac2606659a54111334f5b02861e533700"><div class="ttname"><a href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a></div><div class="ttdeci">#define XB_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> xbretcod.h:40</div></div>
+<div class="ttc" id="axbretcod_8h_html_a13e6876470bd34c8c4e5533f115e04eb"><div class="ttname"><a href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a></div><div class="ttdeci">#define XB_INVALID_NODELINK</div><div class="ttdef"><b>Definition:</b> xbretcod.h:29</div></div>
+<div class="ttc" id="axbretcod_8h_html_ac2606659a54111334f5b02861e533700"><div class="ttname"><a href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a></div><div class="ttdeci">#define XB_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> xbretcod.h:41</div></div>
<div class="ttc" id="axbretcod_8h_html_ac720d5b4ec45bfd606f5865d40816e23"><div class="ttname"><a href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a></div><div class="ttdeci">#define XB_NO_ERROR</div><div class="ttdef"><b>Definition:</b> xbretcod.h:24</div></div>
<div class="ttc" id="axbretcod_8h_html_ae687fc7d872ba0475a8477e4447f9b54"><div class="ttname"><a href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a></div><div class="ttdeci">#define XB_NO_MEMORY</div><div class="ttdef"><b>Definition:</b> xbretcod.h:25</div></div>
</div><!-- fragment --></div><!-- contents -->
diff --git a/docs/doxygen/html/xblnklstord_8h.html b/docs/doxygen/html/xblnklstord_8h.html
index 44e4332..630dd10 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.1.0/src/include/xblnklstord.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xblnklstord_8h_source.html b/docs/doxygen/html/xblnklstord_8h_source.html
index 51c83ec..af441c9 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.1.0/src/include/xblnklstord.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnklstord.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -439,10 +439,10 @@ $(function() {
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div>
<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
-<div class="ttc" id="axbretcod_8h_html_a13e6876470bd34c8c4e5533f115e04eb"><div class="ttname"><a href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a></div><div class="ttdeci">#define XB_INVALID_NODELINK</div><div class="ttdef"><b>Definition:</b> xbretcod.h:28</div></div>
-<div class="ttc" id="axbretcod_8h_html_ac2606659a54111334f5b02861e533700"><div class="ttname"><a href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a></div><div class="ttdeci">#define XB_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> xbretcod.h:40</div></div>
+<div class="ttc" id="axbretcod_8h_html_a13e6876470bd34c8c4e5533f115e04eb"><div class="ttname"><a href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a></div><div class="ttdeci">#define XB_INVALID_NODELINK</div><div class="ttdef"><b>Definition:</b> xbretcod.h:29</div></div>
+<div class="ttc" id="axbretcod_8h_html_ac2606659a54111334f5b02861e533700"><div class="ttname"><a href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700">XB_NOT_FOUND</a></div><div class="ttdeci">#define XB_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> xbretcod.h:41</div></div>
<div class="ttc" id="axbretcod_8h_html_ac720d5b4ec45bfd606f5865d40816e23"><div class="ttname"><a href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23">XB_NO_ERROR</a></div><div class="ttdeci">#define XB_NO_ERROR</div><div class="ttdef"><b>Definition:</b> xbretcod.h:24</div></div>
-<div class="ttc" id="axbretcod_8h_html_ad60dbb1862c0c1c2dc0464cfbfd93a34"><div class="ttname"><a href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">XB_KEY_NOT_UNIQUE</a></div><div class="ttdeci">#define XB_KEY_NOT_UNIQUE</div><div class="ttdef"><b>Definition:</b> xbretcod.h:29</div></div>
+<div class="ttc" id="axbretcod_8h_html_ad60dbb1862c0c1c2dc0464cfbfd93a34"><div class="ttname"><a href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34">XB_KEY_NOT_UNIQUE</a></div><div class="ttdeci">#define XB_KEY_NOT_UNIQUE</div><div class="ttdef"><b>Definition:</b> xbretcod.h:30</div></div>
<div class="ttc" id="axbretcod_8h_html_ae687fc7d872ba0475a8477e4447f9b54"><div class="ttname"><a href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54">XB_NO_MEMORY</a></div><div class="ttdeci">#define XB_NO_MEMORY</div><div class="ttdef"><b>Definition:</b> xbretcod.h:25</div></div>
<div class="ttc" id="axbtypes_8h_html_ab0ae00665298fe7f5292691cb98ec2d9"><div class="ttname"><a href="xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9">xbTrue</a></div><div class="ttdeci">#define xbTrue</div><div class="ttdef"><b>Definition:</b> xbtypes.h:28</div></div>
<div class="ttc" id="axbtypes_8h_html_adc4b6ca5ad299f63675136d9e03938cc"><div class="ttname"><a href="xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc">xbFalse</a></div><div class="ttdeci">#define xbFalse</div><div class="ttdef"><b>Definition:</b> xbtypes.h:29</div></div>
diff --git a/docs/doxygen/html/xblnknod_8h.html b/docs/doxygen/html/xblnknod_8h.html
index 381c054..a26256b 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.1.0/src/include/xblnknod.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xblnknod_8h_source.html b/docs/doxygen/html/xblnknod_8h_source.html
index db7f8d3..5594d65 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.1.0/src/include/xblnknod.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblnknod.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xblog_8cpp.html b/docs/doxygen/html/xblog_8cpp.html
index 5114929..a273dfe 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.1.0/src/core/xblog.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xblog.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xblog_8h.html b/docs/doxygen/html/xblog_8h.html
index b53711a..fc7b6f1 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.1.0/src/include/xblog.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblog.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xblog_8h_source.html b/docs/doxygen/html/xblog_8h_source.html
index ef5ef49..db2c10f 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.1.0/src/include/xblog.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xblog.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -103,26 +103,27 @@ $(function() {
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a>( <span class="keyword">const</span> xbString &amp;sLogFileName );</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> ~xbLog();</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbInt16 LogClose ();</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbInt16 LogGetStatus ();</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 LogOpen ();</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> LogSetStatus ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLogStatus );</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> LogSetLogSize( <span class="keywordtype">size_t</span> lSize ); <span class="comment">// { LogSize = size; }</span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbInt16 LogWrite ( <span class="keyword">const</span> xbString &amp;LogEntry, xbInt16 iOutputOption = 0 );</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbInt16 LogWriteBytes( xbUInt32 lByteCnt, <span class="keyword">const</span> <span class="keywordtype">char</span> *p );</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLoggingStatus; <span class="comment">// false = logging off</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="comment">// true = logging on</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordtype">size_t</span> lLogSize;</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> xbInt16 iShareMode;</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span>};</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="preprocessor">#endif </span><span class="comment">// XB_LOGGING_SUPPORT</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span>} <span class="comment">// namespace</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLOG_H__</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> xbInt16 LogClose ();</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> xbInt16 LogGetStatus ();</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> xbInt16 LogOpen ();</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">void</span> LogSetStatus ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLogStatus );</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> LogSetLogSize( <span class="keywordtype">size_t</span> lSize ); <span class="comment">// { LogSize = size; }</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> xbInt16 LogWrite ( <span class="keyword">const</span> xbString &amp;LogEntry, xbInt16 iOutputOption = 0 );</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> xbInt16 LogWriteBytes( xbUInt32 lByteCnt, <span class="keyword">const</span> <span class="keywordtype">char</span> *p );</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordtype">size_t</span> LogGetLogSize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lLogSize; }</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bLoggingStatus; <span class="comment">// false = logging off</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// true = logging on</span></div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordtype">size_t</span> lLogSize;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> xbInt16 iShareMode;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>};</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#endif </span><span class="comment">// XB_LOGGING_SUPPORT</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span>} <span class="comment">// namespace</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#endif </span><span class="comment">// XB_XBLOG_H__</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
<div class="ttc" id="anamespacexb_html_a4a31fbe9110c9e55495ce71e642d785c"><div class="ttname"><a href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb::xbLog</a></div><div class="ttdeci">class XBDLLEXPORT xbLog</div><div class="ttdef"><b>Definition:</b> xbxbase.h:26</div></div>
<div class="ttc" id="anamespacexb_html_ab1a750481dd487f0d384aa1d200dff0f"><div class="ttname"><a href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xb::xbBool</a></div><div class="ttdeci">short int xbBool</div><div class="ttdef"><b>Definition:</b> xbtypes.h:24</div></div>
diff --git a/docs/doxygen/html/xbmemo3_8cpp.html b/docs/doxygen/html/xbmemo3_8cpp.html
index e1bdf62..ab331c3 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.1.0/src/core/xbmemo3.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo3.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbmemo4_8cpp.html b/docs/doxygen/html/xbmemo4_8cpp.html
index 99b2580..cc3596b 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.1.0/src/core/xbmemo4.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo4.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbmemo_8cpp.html b/docs/doxygen/html/xbmemo_8cpp.html
index 706b54a..8ff00bd 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.1.0/src/core/xbmemo.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbmemo.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbmemo_8h.html b/docs/doxygen/html/xbmemo_8h.html
index 409d3ce..3aca233 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.1.0/src/include/xbmemo.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbmemo_8h_source.html b/docs/doxygen/html/xbmemo_8h_source.html
index da8fab4..52c2335 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.1.0/src/include/xbmemo.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbmemo.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbretcod_8h.html b/docs/doxygen/html/xbretcod_8h.html
index d5ac672..baa24b3 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.1.0/src/include/xbretcod.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbretcod.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -89,6 +89,8 @@ Macros</h2></td></tr>
<tr class="separator:ae687fc7d872ba0475a8477e4447f9b54"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af1cd0baf346cad686fa4dd11f700012a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a">XB_INVALID_OPTION</a>&#160;&#160;&#160;-101</td></tr>
<tr class="separator:af1cd0baf346cad686fa4dd11f700012a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b78533ada854b4185c51ad8a5ce9f02"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02">XB_INVALID_PARAMETER</a>&#160;&#160;&#160;-102</td></tr>
+<tr class="separator:a1b78533ada854b4185c51ad8a5ce9f02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac18036408d10e5eee1bf76cf92352b95"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95">XB_DUP_TABLE_OR_ALIAS</a>&#160;&#160;&#160;-110</td></tr>
<tr class="separator:ac18036408d10e5eee1bf76cf92352b95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a13e6876470bd34c8c4e5533f115e04eb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb">XB_INVALID_NODELINK</a>&#160;&#160;&#160;-120</td></tr>
@@ -675,6 +677,20 @@ Macros</h2></td></tr>
</div>
</div>
+<a id="a1b78533ada854b4185c51ad8a5ce9f02" name="a1b78533ada854b4185c51ad8a5ce9f02"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b78533ada854b4185c51ad8a5ce9f02">&#9670;&nbsp;</a></span>XB_INVALID_PARAMETER</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define XB_INVALID_PARAMETER&#160;&#160;&#160;-102</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
<a id="a4cedf96581c9cbc9c14d07494143702d" name="a4cedf96581c9cbc9c14d07494143702d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4cedf96581c9cbc9c14d07494143702d">&#9670;&nbsp;</a></span>XB_INVALID_PARM</h2>
diff --git a/docs/doxygen/html/xbretcod_8h_source.html b/docs/doxygen/html/xbretcod_8h_source.html
index 95cf8c5..182f78a 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.1.0/src/include/xbretcod.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbretcod.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -96,77 +96,78 @@ $(function() {
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23"> 24</a></span><span class="preprocessor"> #define XB_NO_ERROR 0 </span><span class="comment">// general</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54"> 25</a></span><span class="preprocessor"> #define XB_NO_MEMORY -100 </span><span class="comment">// general</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a"> 26</a></span><span class="preprocessor"> #define XB_INVALID_OPTION -101 </span><span class="comment">// general</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95"> 27</a></span><span class="preprocessor"> #define XB_DUP_TABLE_OR_ALIAS -110 </span><span class="comment">// table manager</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb"> 28</a></span><span class="preprocessor"> #define XB_INVALID_NODELINK -120 </span><span class="comment">// linklist</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34"> 29</a></span><span class="preprocessor"> #define XB_KEY_NOT_UNIQUE -121 </span><span class="comment">// linklist</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d"> 30</a></span><span class="preprocessor"> #define XB_MEMCPY_ERROR -122 </span><span class="comment">// memcpy failure</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0"> 32</a></span><span class="preprocessor"> #define XB_FILE_EXISTS -200 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f"> 33</a></span><span class="preprocessor"> #define XB_ALREADY_OPEN -201 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2"> 34</a></span><span class="preprocessor"> #define XB_DBF_FILE_NOT_OPEN -202 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc"> 35</a></span><span class="preprocessor"> #define XB_FILE_NOT_FOUND -203 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596"> 36</a></span><span class="preprocessor"> #define XB_FILE_TYPE_NOT_SUPPORTED -204 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3"> 37</a></span><span class="preprocessor"> #define XB_RENAME_ERROR -205 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885"> 38</a></span><span class="preprocessor"> #define XB_INVALID_OBJECT -206 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1"> 39</a></span><span class="preprocessor"> #define XB_NOT_OPEN -207 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700"> 40</a></span><span class="preprocessor"> #define XB_NOT_FOUND -208 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8"> 41</a></span><span class="preprocessor"> #define XB_OPEN_ERROR -209 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235"> 42</a></span><span class="preprocessor"> #define XB_CLOSE_ERROR -210 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41"> 43</a></span><span class="preprocessor"> #define XB_SEEK_ERROR -211 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710"> 44</a></span><span class="preprocessor"> #define XB_READ_ERROR -212 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549"> 45</a></span><span class="preprocessor"> #define XB_WRITE_ERROR -213 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7"> 46</a></span><span class="preprocessor"> #define XB_EOF -214 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f"> 47</a></span><span class="preprocessor"> #define XB_BOF -215 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5"> 48</a></span><span class="preprocessor"> #define XB_INVALID_BLOCK_SIZE -216 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2"> 49</a></span><span class="preprocessor"> #define XB_INVALID_BLOCK_NO -217 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1"> 50</a></span><span class="preprocessor"> #define XB_INVALID_RECORD -218 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2"> 51</a></span><span class="preprocessor"> #define XB_DELETE_FAILED -219 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92"> 52</a></span><span class="preprocessor"> #define XB_INVALID_TABLE_NAME -220 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29"> 53</a></span><span class="preprocessor"> #define XB_EMPTY -221 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850"> 54</a></span><span class="preprocessor"> #define XB_LIMIT_REACHED -222 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a"> 55</a></span><span class="preprocessor"> #define XB_BLOCKREAD_NOT_ENABLED -223 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e"> 56</a></span><span class="preprocessor"> #define XB_DIRECTORY_ERROR -224 </span><span class="comment">// file</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f"> 58</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_TYPE -300 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381"> 59</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_NO -301 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a"> 60</a></span><span class="preprocessor"> #define XB_INVALID_DATA -302 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e"> 61</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_NAME -303 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f"> 62</a></span><span class="preprocessor"> #define XB_INVALID_MEMO_FIELD -304 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e"> 63</a></span><span class="preprocessor"> #define XB_INVALID_FIELD -305 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411"> 64</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_LEN -306 </span><span class="comment">// field</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925"> 65</a></span><span class="preprocessor"> #define XB_INVALID_DATE -307 </span><span class="comment">// date field</span></div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec"> 67</a></span><span class="preprocessor"> #define XB_INVALID_LOCK_OPTION -400 </span><span class="comment">// lock</span></div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1"> 68</a></span><span class="preprocessor"> #define XB_LOCK_FAILED -401 </span><span class="comment">// lock</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b"> 69</a></span><span class="preprocessor"> #define XB_TABLE_NOT_LOCKED -402 </span><span class="comment">// lock - need table locked for operation</span></div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b"> 71</a></span><span class="preprocessor"> #define XB_PARSE_ERROR -500 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742"> 72</a></span><span class="preprocessor"> #define XB_INVALID_FUNCTION -501 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d"> 73</a></span><span class="preprocessor"> #define XB_INVALID_PARM -502 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9"> 74</a></span><span class="preprocessor"> #define XB_INCONSISTENT_PARM_LENS -503 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74"> 75</a></span><span class="preprocessor"> #define XB_INCOMPATIBLE_OPERANDS -504 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6"> 76</a></span><span class="preprocessor"> #define XB_UNBALANCED_PARENS -505 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac"> 77</a></span><span class="preprocessor"> #define XB_UNBALANCED_QUOTES -506 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a"> 78</a></span><span class="preprocessor"> #define XB_INVALID_EXPRESSION -507 </span><span class="comment">// expression</span></div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8"> 80</a></span><span class="preprocessor"> #define XB_INVALID_KEYNO -600 </span><span class="comment">// index</span></div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4"> 81</a></span><span class="preprocessor"> #define XB_INVALID_INDEX -601 </span><span class="comment">// index file error</span></div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a"> 82</a></span><span class="preprocessor"> #define XB_INVALID_TAG -602 </span><span class="comment">// invalid index tag name, must be &lt;= 10 bytes</span></div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0"> 83</a></span><span class="preprocessor"> #define XB_INVALID_PAGE -603 </span><span class="comment">// invalid index page</span></div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a1b78533ada854b4185c51ad8a5ce9f02"> 27</a></span><span class="preprocessor"> #define XB_INVALID_PARAMETER -102 </span><span class="comment">// general</span></div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95"> 28</a></span><span class="preprocessor"> #define XB_DUP_TABLE_OR_ALIAS -110 </span><span class="comment">// table manager</span></div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb"> 29</a></span><span class="preprocessor"> #define XB_INVALID_NODELINK -120 </span><span class="comment">// linklist</span></div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34"> 30</a></span><span class="preprocessor"> #define XB_KEY_NOT_UNIQUE -121 </span><span class="comment">// linklist, index</span></div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d"> 31</a></span><span class="preprocessor"> #define XB_MEMCPY_ERROR -122 </span><span class="comment">// memcpy failure</span></div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0"> 33</a></span><span class="preprocessor"> #define XB_FILE_EXISTS -200 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f"> 34</a></span><span class="preprocessor"> #define XB_ALREADY_OPEN -201 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2"> 35</a></span><span class="preprocessor"> #define XB_DBF_FILE_NOT_OPEN -202 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc"> 36</a></span><span class="preprocessor"> #define XB_FILE_NOT_FOUND -203 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596"> 37</a></span><span class="preprocessor"> #define XB_FILE_TYPE_NOT_SUPPORTED -204 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3"> 38</a></span><span class="preprocessor"> #define XB_RENAME_ERROR -205 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885"> 39</a></span><span class="preprocessor"> #define XB_INVALID_OBJECT -206 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1"> 40</a></span><span class="preprocessor"> #define XB_NOT_OPEN -207 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ac2606659a54111334f5b02861e533700"> 41</a></span><span class="preprocessor"> #define XB_NOT_FOUND -208 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8"> 42</a></span><span class="preprocessor"> #define XB_OPEN_ERROR -209 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235"> 43</a></span><span class="preprocessor"> #define XB_CLOSE_ERROR -210 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41"> 44</a></span><span class="preprocessor"> #define XB_SEEK_ERROR -211 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710"> 45</a></span><span class="preprocessor"> #define XB_READ_ERROR -212 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aef34ebe6726057f805d6063130280549"> 46</a></span><span class="preprocessor"> #define XB_WRITE_ERROR -213 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7"> 47</a></span><span class="preprocessor"> #define XB_EOF -214 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f"> 48</a></span><span class="preprocessor"> #define XB_BOF -215 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5"> 49</a></span><span class="preprocessor"> #define XB_INVALID_BLOCK_SIZE -216 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2"> 50</a></span><span class="preprocessor"> #define XB_INVALID_BLOCK_NO -217 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1"> 51</a></span><span class="preprocessor"> #define XB_INVALID_RECORD -218 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2"> 52</a></span><span class="preprocessor"> #define XB_DELETE_FAILED -219 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92"> 53</a></span><span class="preprocessor"> #define XB_INVALID_TABLE_NAME -220 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29"> 54</a></span><span class="preprocessor"> #define XB_EMPTY -221 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850"> 55</a></span><span class="preprocessor"> #define XB_LIMIT_REACHED -222 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a"> 56</a></span><span class="preprocessor"> #define XB_BLOCKREAD_NOT_ENABLED -223 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e"> 57</a></span><span class="preprocessor"> #define XB_DIRECTORY_ERROR -224 </span><span class="comment">// file</span></div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f"> 59</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_TYPE -300 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a09d6c08a44316f551108a74003efd381"> 60</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_NO -301 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a"> 61</a></span><span class="preprocessor"> #define XB_INVALID_DATA -302 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a59403978784130834cf39434cb73f96e"> 62</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_NAME -303 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f"> 63</a></span><span class="preprocessor"> #define XB_INVALID_MEMO_FIELD -304 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e"> 64</a></span><span class="preprocessor"> #define XB_INVALID_FIELD -305 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411"> 65</a></span><span class="preprocessor"> #define XB_INVALID_FIELD_LEN -306 </span><span class="comment">// field</span></div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a702475500357a27b8a34463be3e11925"> 66</a></span><span class="preprocessor"> #define XB_INVALID_DATE -307 </span><span class="comment">// date field</span></div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec"> 68</a></span><span class="preprocessor"> #define XB_INVALID_LOCK_OPTION -400 </span><span class="comment">// lock</span></div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1"> 69</a></span><span class="preprocessor"> #define XB_LOCK_FAILED -401 </span><span class="comment">// lock</span></div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b"> 70</a></span><span class="preprocessor"> #define XB_TABLE_NOT_LOCKED -402 </span><span class="comment">// lock - need table locked for operation</span></div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b"> 72</a></span><span class="preprocessor"> #define XB_PARSE_ERROR -500 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742"> 73</a></span><span class="preprocessor"> #define XB_INVALID_FUNCTION -501 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d"> 74</a></span><span class="preprocessor"> #define XB_INVALID_PARM -502 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9"> 75</a></span><span class="preprocessor"> #define XB_INCONSISTENT_PARM_LENS -503 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74"> 76</a></span><span class="preprocessor"> #define XB_INCOMPATIBLE_OPERANDS -504 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6"> 77</a></span><span class="preprocessor"> #define XB_UNBALANCED_PARENS -505 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac"> 78</a></span><span class="preprocessor"> #define XB_UNBALANCED_QUOTES -506 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a"> 79</a></span><span class="preprocessor"> #define XB_INVALID_EXPRESSION -507 </span><span class="comment">// expression</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8"> 81</a></span><span class="preprocessor"> #define XB_INVALID_KEYNO -600 </span><span class="comment">// index</span></div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4"> 82</a></span><span class="preprocessor"> #define XB_INVALID_INDEX -601 </span><span class="comment">// index file error</span></div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a176d917912d3433f065483f905a4c50a"> 83</a></span><span class="preprocessor"> #define XB_INVALID_TAG -602 </span><span class="comment">// invalid index tag name, must be &lt;= 10 bytes</span></div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0"> 84</a></span><span class="preprocessor"> #define XB_INVALID_PAGE -603 </span><span class="comment">// invalid index page</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f"> 86</a></span><span class="preprocessor"> #define XB_SYNTAX_ERROR -700 </span><span class="comment">// sql syntax error</span></div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f"> 87</a></span><span class="preprocessor"> #define XB_SYNTAX_ERROR -700 </span><span class="comment">// sql syntax error</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d"> 89</a></span><span class="preprocessor"> #define XB_MAX_ERROR_NO -999</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"><a class="line" href="xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d"> 90</a></span><span class="preprocessor"> #define XB_MAX_ERROR_NO -999</span></div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="comment">/* when updating this table, also need to update messages in xbssv.cpp */</span></div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment">/* when updating this table, also need to update messages in xbssv.cpp */</span></div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_RETCODES_H__ */</span><span class="preprocessor"></span></div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_RETCODES_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/doxygen/html/xbselect_8cpp.html b/docs/doxygen/html/xbselect_8cpp.html
index e21f0d9..c5bb12f 100644
--- a/docs/doxygen/html/xbselect_8cpp.html
+++ b/docs/doxygen/html/xbselect_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.1.0/src/sql/xbselect.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbselect.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbset_8cpp.html b/docs/doxygen/html/xbset_8cpp.html
index 7b8c360..39420f4 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.1.0/src/sql/xbset.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbset.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbsql_8cpp.html b/docs/doxygen/html/xbsql_8cpp.html
index 334b5f0..bd491a0 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.1.0/src/sql/xbsql.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbsql.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbsql_8h.html b/docs/doxygen/html/xbsql_8h.html
index bae3261..527128d 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.1.0/src/include/xbsql.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbsql_8h_source.html b/docs/doxygen/html/xbsql_8h_source.html
index d36d1b7..a49c0a5 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.1.0/src/include/xbsql.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbsql.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbssv_8cpp.html b/docs/doxygen/html/xbssv_8cpp.html
index ada7749..aeda0bc 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.1.0/src/core/xbssv.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbssv.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbssv_8h.html b/docs/doxygen/html/xbssv_8h.html
index 56dcc9a..3d47c42 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.1.0/src/include/xbssv.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbssv.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbssv_8h_source.html b/docs/doxygen/html/xbssv_8h_source.html
index 6a4fc59..4cc8c82 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.1.0/src/include/xbssv.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbssv.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -123,128 +123,137 @@ $(function() {
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span> DisplayError ( xbInt16 ErrorCode ) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDefaultDateFormat () <span class="keyword">const</span>;</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetDataDirectory () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> xbInt16 GetEndianType () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetTempDirectory () <span class="keyword">const</span>;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *GetErrorMessage ( xbInt16 ErrorCode ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordtype">void</span> SetDataDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory );</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordtype">void</span> SetDefaultDateFormat ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat );</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> BitSet ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c, xbInt16 iBitNo ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoCommit () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> SetDefaultAutoCommit ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit );</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordtype">void</span> GetHomeDir ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut );</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> xbInt16 GetEndianType () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *GetErrorMessage ( xbInt16 ErrorCode ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordtype">char</span> GetPathSeparator () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordtype">void</span> SetDataDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDataDirectory );</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordtype">void</span> SetDefaultDateFormat ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDefaultDateFormat );</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span> SetTempDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTempDirectory );</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordtype">void</span> GetHomeDir ( <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sHomeDirOut );</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetLogDirectory () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetLogFileName () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordtype">void</span> SetLogDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory );</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMultiUser () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> SetMultiUser ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser );</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="preprocessor"> #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> xbInt16 GetUniqueKeyOpt () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor"> #endif </span><span class="comment">// (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> BitSet ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c, xbInt16 iBitNo ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">void</span> BitDump ( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoCommit () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">void</span> SetDefaultAutoCommit ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit );</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetLogDirectory () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; GetLogFileName () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> SetLogDirectory ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogDirectory );</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">void</span> SetLogFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName );</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> xbInt16 GetDefaultLockRetries () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">void</span> SetDefaultLockRetries ( xbInt16 iRetryCount );</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> xbInt32 GetDefaultLockWait () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">void</span> SetDefaultLockWait ( xbInt32 lRetryWait );</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbInt16 GetDefaultLockFlavor () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">void</span> SetDefaultLockFlavor ( xbInt16 iLockFlavor );</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoLock () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordtype">void</span> SetDefaultAutoLock ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAutoLock );</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">void</span> EnableDefaultAutoLock ();</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">void</span> DisableDefaultAutoLock ();</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="preprocessor"> #ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> xbInt16 GetCreateMdxBlockSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> xbUInt32 GetDefaultBlockReadSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">void</span> SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetMultiUser () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">void</span> SetMultiUser ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser );</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="preprocessor"> #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> xbInt16 GetUniqueKeyOpt () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="preprocessor"> #endif </span><span class="comment">// (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="preprocessor"> #ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> xbInt16 GetDefaultLockRetries () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordtype">void</span> SetDefaultLockRetries ( xbInt16 iRetryCount );</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> xbInt32 GetDefaultLockWait () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">void</span> SetDefaultLockWait ( xbInt32 lRetryWait );</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> xbInt16 GetDefaultLockFlavor () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span> SetDefaultLockFlavor ( xbInt16 iLockFlavor );</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetDefaultAutoLock () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> SetDefaultAutoLock ( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bAutoLock );</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordtype">void</span> EnableDefaultAutoLock ();</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> DisableDefaultAutoLock ();</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="preprocessor"> #endif </span><span class="comment">// XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor"> #ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> xbInt16 GetCreateMdxBlockSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="preprocessor"> #endif </span><span class="comment">// XB_MDX_SUPPORT</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordtype">void</span> SetEndianType ();</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3"> 122</a></span> <span class="keyword">static</span> xbInt16 <a class="code hl_variable" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a>; <span class="comment">// B=Big Endian L=Little Endian</span></div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da"> 123</a></span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> <a class="code hl_variable" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a>; <span class="comment">// Null String</span></div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> xbUInt32 GetDefaultBlockReadSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordtype">void</span> SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">protected</span>:</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDefaultDateFormat;</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDataDirectory; <span class="comment">//Data file directory</span></div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="preprocessor"> #ifdef XB_LOGGING_SUPPORT</span></div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sLogDirectory; <span class="comment">//Default location to store log files</span></div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sLogFileName; <span class="comment">//Default LogFileName</span></div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordtype">void</span> SetEndianType ();</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3"> 130</a></span> <span class="keyword">static</span> xbInt16 <a class="code hl_variable" href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">iEndianType</a>; <span class="comment">// B=Big Endian L=Little Endian</span></div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"><a class="line" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da"> 131</a></span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> <a class="code hl_variable" href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">sNullString</a>; <span class="comment">// Null String</span></div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">static</span> xbInt16 iDefaultFileVersion; <span class="comment">// 3 = DBase 3</span></div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// 4 = DBase 4</span></div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// default version used in CreateTable command</span></div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// can be over ridden at the Xbase level, or table level</span></div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// Different versions can be open simultaneously</span></div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">static</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit; <span class="comment">// Default dbf auto commit switch</span></div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">static</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser; <span class="comment">// True if multi user mode is turned on</span></div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// Turn this off for better performance in single user mode</span></div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// This needs to be turned on or off before any data tables are opened</span></div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// turning this on after tables are opened, can result in out of date</span></div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// file buffers if multiple users are sharing the files</span></div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="preprocessor">#ifdef XB_LOCKING_SUPPORT</span></div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">static</span> xbInt32 lDefaultLockWait; <span class="comment">// Number of milliseconds between lock retries</span></div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">static</span> xbInt16 iDefaultLockRetries; <span class="comment">// Number of times to retry a lock before conceding</span></div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">static</span> xbInt16 bDefaultAutoLock; <span class="comment">// Autolocking enabled?</span></div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">static</span> xbInt16 iDefaultLockFlavor; <span class="comment">// 1 = DBase</span></div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// 2 = Clipper - not developed yet</span></div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// 3 = FoxPro - not developed yet</span></div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// 9 = Xbase64 - not developed yet</span></div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor">#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> </div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">static</span> xbInt16 iUniqueKeyOpt;</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// is one of:</span></div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// XB_HALT_ON_DUPKEY</span></div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="comment">// XB_EMULATE_DBASE</span></div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDefaultDateFormat;</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sDataDirectory; <span class="comment">//Data file directory</span></div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sTempDirectory; <span class="comment">//Temp file directory</span></div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span><span class="preprocessor"> #ifdef XB_LOGGING_SUPPORT</span></div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sLogDirectory; <span class="comment">//Default location to store log files</span></div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">static</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> sLogFileName; <span class="comment">//Default LogFileName</span></div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">static</span> xbInt16 iDefaultFileVersion; <span class="comment">// 3 = DBase 3</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// 4 = DBase 4</span></div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// default version used in CreateTable command</span></div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// can be over ridden at the Xbase level, or table level</span></div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// Different versions can be open simultaneously</span></div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">static</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bDefaultAutoCommit; <span class="comment">// Default dbf auto commit switch</span></div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">static</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bMultiUser; <span class="comment">// True if multi user mode is turned on</span></div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// Turn this off for better performance in single user mode</span></div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// This needs to be turned on or off before any data tables are opened</span></div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// turning this on after tables are opened, can result in out of date</span></div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// file buffers if multiple users are sharing the files</span></div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span><span class="preprocessor">#ifdef XB_LOCKING_SUPPORT</span></div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">static</span> xbInt32 lDefaultLockWait; <span class="comment">// Number of milliseconds between lock retries</span></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">static</span> xbInt16 iDefaultLockRetries; <span class="comment">// Number of times to retry a lock before conceding</span></div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">static</span> xbInt16 bDefaultAutoLock; <span class="comment">// Autolocking enabled?</span></div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">static</span> xbInt16 iDefaultLockFlavor; <span class="comment">// 1 = DBase</span></div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="comment">// 2 = Clipper - not developed yet</span></div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// 3 = FoxPro - not developed yet</span></div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// 9 = Xbase64 - not developed yet</span></div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="preprocessor">#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">static</span> xbInt16 iCreateMdxBlockSize; <span class="comment">// System level Mdx Block Size</span></div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span><span class="preprocessor">#endif </span><span class="comment">// XB_MDX_SUPPORT</span></div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="preprocessor">#ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">static</span> xbUInt32 ulDefaultBlockReadSize;</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="preprocessor">#endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">static</span> xbInt16 iUniqueKeyOpt;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// is one of:</span></div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// XB_HALT_ON_DUPKEY</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// XB_EMULATE_DBASE</span></div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span>};</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBSSV_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="preprocessor">#ifdef XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">static</span> xbInt16 iCreateMdxBlockSize; <span class="comment">// System level Mdx Block Size</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="preprocessor">#endif </span><span class="comment">// XB_MDX_SUPPORT</span></div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="preprocessor">#ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">static</span> xbUInt32 ulDefaultBlockReadSize;</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="preprocessor">#endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span>};</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_XBSSV_H__ */</span><span class="preprocessor"></span></div>
<div class="ttc" id="aclassxb_1_1xbSsv_html"><div class="ttname"><a href="classxb_1_1xbSsv.html">xb::xbSsv</a></div><div class="ttdoc">Class for handling shared system variables.</div><div class="ttdef"><b>Definition:</b> xbssv.h:59</div></div>
-<div class="ttc" id="aclassxb_1_1xbSsv_html_a5849e813f5e8e1cd180f0366637adbf3"><div class="ttname"><a href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv::iEndianType</a></div><div class="ttdeci">static xbInt16 iEndianType</div><div class="ttdef"><b>Definition:</b> xbssv.h:122</div></div>
-<div class="ttc" id="aclassxb_1_1xbSsv_html_a9dec3164c3b264882df634915ecf21da"><div class="ttname"><a href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">xb::xbSsv::sNullString</a></div><div class="ttdeci">static xbString sNullString</div><div class="ttdef"><b>Definition:</b> xbssv.h:123</div></div>
+<div class="ttc" id="aclassxb_1_1xbSsv_html_a5849e813f5e8e1cd180f0366637adbf3"><div class="ttname"><a href="classxb_1_1xbSsv.html#a5849e813f5e8e1cd180f0366637adbf3">xb::xbSsv::iEndianType</a></div><div class="ttdeci">static xbInt16 iEndianType</div><div class="ttdef"><b>Definition:</b> xbssv.h:130</div></div>
+<div class="ttc" id="aclassxb_1_1xbSsv_html_a9dec3164c3b264882df634915ecf21da"><div class="ttname"><a href="classxb_1_1xbSsv.html#a9dec3164c3b264882df634915ecf21da">xb::xbSsv::sNullString</a></div><div class="ttdeci">static xbString sNullString</div><div class="ttdef"><b>Definition:</b> xbssv.h:131</div></div>
<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
diff --git a/docs/doxygen/html/xbstmt_8cpp.html b/docs/doxygen/html/xbstmt_8cpp.html
index 508269f..3d89cef 100644
--- a/docs/doxygen/html/xbstmt_8cpp.html
+++ b/docs/doxygen/html/xbstmt_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.1.0/src/sql/xbstmt.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/sql/xbstmt.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbstring_8cpp.html b/docs/doxygen/html/xbstring_8cpp.html
index 4683451..dbe8419 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.1.0/src/core/xbstring.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbstring.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbstring_8h.html b/docs/doxygen/html/xbstring_8h.html
index d1679d8..bc3a683 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.1.0/src/include/xbstring.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbstring.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbstring_8h_source.html b/docs/doxygen/html/xbstring_8h_source.html
index 1e20637..67e1d2e 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.1.0/src/include/xbstring.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbstring.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -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 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="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 ulStartPos, xbUInt32 lCopyLen );</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Assign(<span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, xbUInt32 ulStartPos );</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> Copy() <span class="keyword">const</span>;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> xbUInt32 CountChar( <span class="keywordtype">char</span> c ) <span class="keyword">const</span>;</div>
@@ -164,78 +164,80 @@ $(function() {
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span> DumpHex( <span class="keyword">const</span> <span class="keywordtype">char</span> *title ) <span class="keyword">const</span>;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="preprocessor"> #endif</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ExtractElement(<span class="keyword">const</span> <span class="keywordtype">char</span> *src, <span class="keywordtype">char</span> delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">char</span> GetCharacter( xbUInt32 lPos ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> xbUInt32 GetLastPos(<span class="keywordtype">char</span> c) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> xbUInt32 GetLastPos(<span class="keyword">const</span> <span class="keywordtype">char</span> *s) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordtype">char</span> GetPathSeparator() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> xbUInt32 GetSize() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> HasAlphaChars() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsEmpty() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNull() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Left( xbUInt32 ulLen );</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> xbUInt32 Len() <span class="keyword">const</span>; <span class="comment">// returns the length of the string</span></div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Ltrim();</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Ltrunc( xbUInt32 ulCnt );</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Mid(xbUInt32 ulPos, xbUInt32 lLen );</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PadLeft( <span class="keywordtype">char</span> c, xbUInt32 ulLen );</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PadRight( <span class="keywordtype">char</span> c, xbUInt32 ulLen );</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> </div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> xbUInt32 Pos(<span class="keywordtype">char</span> c, xbUInt32 ulStartPos ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> xbUInt32 Pos(<span class="keywordtype">char</span> c) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbUInt32 Pos(<span class="keyword">const</span> <span class="keywordtype">char</span> *s) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PutAt(xbUInt32 ulPos, <span class="keywordtype">char</span> c);</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Remove( xbUInt32 ulPos, xbUInt32 ulN );</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Replace( <span class="keyword">const</span> <span class="keywordtype">char</span> *sReplace, <span class="keyword">const</span> <span class="keywordtype">char</span> *sReplaceWith, xbInt16 iOpt = 0 );</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Resize( xbUInt32 lSize );</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Rtrim();</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s );</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s, xbUInt32 ulSize );</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SetNum( xbInt32 lNum );</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Sprintf(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordtype">char</span> *strncpy( <span class="keywordtype">char</span> * cDest, xbUInt32 n ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SwapChars( <span class="keywordtype">char</span> from, <span class="keywordtype">char</span> to );</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToLowerCase();</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToUpperCase();</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Trim();</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidLogicalValue() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidNumericValue() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapChar( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapLeadingChar( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapTrailingChar( <span class="keywordtype">char</span> c );</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">friend</span> std::ostream&amp; <a class="code hl_function" href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">operator&lt;&lt; </a>( std::ostream&amp; os, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; s );</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ExtractElement(<a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <span class="keywordtype">char</span> delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ExtractElement(<span class="keyword">const</span> <span class="keywordtype">char</span> *src, <span class="keywordtype">char</span> delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="keywordtype">char</span> GetCharacter( xbUInt32 lPos ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> xbUInt32 GetLastPos(<span class="keywordtype">char</span> c) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> xbUInt32 GetLastPos(<span class="keyword">const</span> <span class="keywordtype">char</span> *s) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">char</span> GetPathSeparator() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> xbUInt32 GetSize() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> HasAlphaChars() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsEmpty() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> IsNull() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Left( xbUInt32 ulLen );</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> xbUInt32 Len() <span class="keyword">const</span>; <span class="comment">// returns the length of the string</span></div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Ltrim();</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Ltrunc( xbUInt32 ulCnt );</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Mid(xbUInt32 ulPos, xbUInt32 lLen );</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PadLeft( <span class="keywordtype">char</span> c, xbUInt32 ulLen );</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PadRight( <span class="keywordtype">char</span> c, xbUInt32 ulLen );</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> xbUInt32 Pos(<span class="keywordtype">char</span> c, xbUInt32 ulStartPos ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> xbUInt32 Pos(<span class="keywordtype">char</span> c) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> xbUInt32 Pos(<span class="keyword">const</span> <span class="keywordtype">char</span> *s) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;PutAt(xbUInt32 ulPos, <span class="keywordtype">char</span> c);</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Remove( xbUInt32 ulPos, xbUInt32 ulN );</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Replace( <span class="keyword">const</span> <span class="keywordtype">char</span> *sReplace, <span class="keyword">const</span> <span class="keywordtype">char</span> *sReplaceWith, xbInt16 iOpt = 0 );</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Resize( xbUInt32 lSize );</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Rtrim();</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s );</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s );</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Set( <span class="keyword">const</span> <span class="keywordtype">char</span> *s, xbUInt32 ulSize );</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SetNum( xbInt32 lNum );</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Sprintf(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *Str() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">char</span> *strncpy( <span class="keywordtype">char</span> * cDest, xbUInt32 n ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;SwapChars( <span class="keywordtype">char</span> from, <span class="keywordtype">char</span> to );</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToLowerCase();</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ToUpperCase();</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;Trim();</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidLogicalValue() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> ValidNumericValue() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapChar( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapLeadingChar( <span class="keywordtype">char</span> c );</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;ZapTrailingChar( <span class="keywordtype">char</span> c );</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keyword">friend</span> std::ostream&amp; <a class="code hl_function" href="namespacexb.html#ad27f348219e895c44f74addba8e1889a">operator&lt;&lt; </a>( std::ostream&amp; os, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a>&amp; s );</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * NullString;</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">static</span> <span class="keywordtype">char</span> cJunkBuf;</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordtype">char</span> *data; <span class="comment">// pointer to actual string data</span></div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> xbUInt32 size; <span class="comment">// size of string plus null terminating byte</span></div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordtype">void</span> ctor(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment">// xbUInt32 CalcSprintfBufSize(const char *format, ...);</span></div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment">// char * xb_realloc( char *pIn, xbUInt32 iLen );</span></div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * NullString;</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">static</span> <span class="keywordtype">char</span> cJunkBuf;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">char</span> *data; <span class="comment">// pointer to actual string data</span></div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbUInt32 size; <span class="comment">// size of string plus null terminating byte</span></div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordtype">void</span> ctor(<span class="keyword">const</span> <span class="keywordtype">char</span> *s);</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span><span class="comment">// xbUInt32 CalcSprintfBufSize(const char *format, ...);</span></div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// next routine could result in buffer over runs if used with improperly sized buffers</span></div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">char</span> * xb_strcpy ( <span class="keywordtype">char</span> *target, <span class="keyword">const</span> <span class="keywordtype">char</span> *source);</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>};</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="comment">// char * xb_realloc( char *pIn, xbUInt32 iLen );</span></div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// next routine could result in buffer over runs if used with improperly sized buffers</span></div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordtype">char</span> * xb_strcpy ( <span class="keywordtype">char</span> *target, <span class="keyword">const</span> <span class="keywordtype">char</span> *source);</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>} <span class="comment">/* namespace */</span></div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="preprocessor">#endif </span><span class="comment">/* __XBSTRING_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>};</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span>} <span class="comment">/* namespace */</span></div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="preprocessor">#endif </span><span class="comment">/* __XBSTRING_H__ */</span><span class="preprocessor"></span></div>
<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
diff --git a/docs/doxygen/html/xbtag_8cpp.html b/docs/doxygen/html/xbtag_8cpp.html
index e38be6b..1c6a4b8 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.1.0/src/core/xbtag.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbtag.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbtag_8h.html b/docs/doxygen/html/xbtag_8h.html
index 0814418..593119e 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.1.0/src/include/xbtag.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbtag_8h_source.html b/docs/doxygen/html/xbtag_8h_source.html
index 486b26f..0b07092 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.1.0/src/include/xbtag.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtag.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbtblmgr_8cpp.html b/docs/doxygen/html/xbtblmgr_8cpp.html
index 599a2af..c39335b 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.1.0/src/core/xbtblmgr.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbtblmgr.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbtblmgr_8h.html b/docs/doxygen/html/xbtblmgr_8h.html
index 89b58b1..4254153 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.1.0/src/include/xbtblmgr.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbtblmgr_8h_source.html b/docs/doxygen/html/xbtblmgr_8h_source.html
index faf8923..3d3c51e 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.1.0/src/include/xbtblmgr.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtblmgr.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbtypes_8h.html b/docs/doxygen/html/xbtypes_8h.html
index 258fa58..24f5dde 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.1.0/src/include/xbtypes.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbtypes_8h_source.html b/docs/doxygen/html/xbtypes_8h_source.html
index af33ce4..60d9e5b 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.1.0/src/include/xbtypes.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbtypes.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbuda_8cpp.html b/docs/doxygen/html/xbuda_8cpp.html
index e4b26ab..5930c72 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.1.0/src/core/xbuda.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbuda.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbuda_8h.html b/docs/doxygen/html/xbuda_8h.html
index 9d3ef21..7efa3fa 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.1.0/src/include/xbuda.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbuda_8h_source.html b/docs/doxygen/html/xbuda_8h_source.html
index 00954f1..325b01f 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.1.0/src/include/xbuda.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbuda.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbxbase_8cpp.html b/docs/doxygen/html/xbxbase_8cpp.html
index 7bce391..b71ed75 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.1.0/src/core/xbxbase.cpp File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/core/xbxbase.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbxbase_8h.html b/docs/doxygen/html/xbxbase_8h.html
index ecfc853..9e40b92 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.1.0/src/include/xbxbase.h File Reference</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbxbase.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
diff --git a/docs/doxygen/html/xbxbase_8h_source.html b/docs/doxygen/html/xbxbase_8h_source.html
index 7f8563b..0166967 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.1.0/src/include/xbxbase.h Source File</title>
+<title>Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.4/src/include/xbxbase.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -194,108 +194,113 @@ $(function() {
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_class" href="classxb_1_1xbXBase.html">~xbXBase</a>();</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> xbInt16 CloseAllTables();</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">void</span> DisableMsgLogging();</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">void</span> EnableMsgLogging ();</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> xbInt16 FlushLog();</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetLogDirectory () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetLogFileName () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetLogFqFileName() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetLogStatus () <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b"> 138</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">OpenHighestVersion</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> &amp;dbf, <span class="keywordtype">int</span> dummy );</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> xbInt16 OpenHighestVersion( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> **dbf );</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * Open( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, xbInt16 &amp;iRc );</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * Open( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &amp;iRc );</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> SetLogDirectory( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileDirectory );</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">void</span> SetLogFileName ( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogFileName );</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">void</span> SetLogSize ( <span class="keywordtype">size_t</span> lSize );</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> xbInt16 WriteLogMessage( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogMessage, xbInt16 iOutputOpt = 0 );</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> xbInt16 WriteLogBytes ( xbUInt32 lCnt, <span class="keyword">const</span> <span class="keywordtype">char</span> *p );</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordtype">void</span> xbSleep ( xbInt32 lMillisecs );</div>
+<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> xbInt16 CreateFqn( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sDirIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sNameIn, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExtIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFqfnOut );</div>
+<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordtype">void</span> DisableMsgLogging();</div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">void</span> EnableMsgLogging ();</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> xbInt16 FlushLog();</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="comment">//const xbString &amp;GetLogDirectory () const;</span></div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="comment">//const xbString &amp;GetLogFileName () const;</span></div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;GetLogFqFileName() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> GetLogStatus () <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b"> 139</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">OpenHighestVersion</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> &amp;dbf, <span class="keywordtype">int</span> dummy );</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> xbInt16 OpenHighestVersion( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> **dbf );</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * Open( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, xbInt16 &amp;iRc );</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * Open( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTableName, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &amp;iRc );</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// next three methods moved to xbssv for consistency</span></div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// void SetLogDirectory( const xbString &amp;sLogFileDirectory );</span></div>
+<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// void SetLogFileName ( const xbString &amp;sLogFileName );</span></div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="keywordtype">void</span> SetLogSize ( <span class="keywordtype">size_t</span> lSize );</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355"> 149</a></span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">GetLogSize</a> () <span class="keyword">const</span>;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 GetCmdLineOpt ( xbInt32 lArgc, <span class="keywordtype">char</span> **argv, <span class="keyword">const</span> <span class="keywordtype">char</span> *sOptRqst, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut );</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 GetCmdLineOpt ( xbInt32 lArgc, <span class="keywordtype">char</span> **argv, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOptRqst, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut );</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> xbInt16 WriteLogMessage( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sLogMessage, xbInt16 iOutputOpt = 0 );</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> xbInt16 WriteLogBytes ( xbUInt32 lCnt, <span class="keyword">const</span> <span class="keywordtype">char</span> *p );</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="comment">/* xbase functions */</span></div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="preprocessor"> #ifdef XB_FUNCTION_SUPPORT</span></div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> xbInt16 ABS( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> xbInt16 ALLTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> xbInt16 ASC( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dAscOut );</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> xbInt16 AT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sSrchFor, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sBase, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dPos );</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> xbInt16 CDOW( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutDow );</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> xbInt16 CHR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dAsciCd, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbInt16 CMONTH( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutMonth );</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbInt16 CTOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sInDate, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> xbInt16 DATE( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> xbInt16 DAY( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOutDay );</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> xbInt16 DEL( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut, xbInt16 iRecBufSw = 0 );</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> xbInt16 DELETED( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bOut, xbInt16 iRecBufSw = 0 );</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dsOut );</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> xbInt16 DOW( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;sInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dDowOut );</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> xbInt16 DTOC( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutFmtDate );</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> xbInt16 DTOS( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutFmtDate );</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbInt16 EXP( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbInt16 IIF( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bResult, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTrueResult, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFalseResult, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sResult );</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> xbInt16 INT( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt16 ISALPHA( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbInt16 ISLOWER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 ISUPPER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 LEFT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 lCharCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> xbInt16 LEN( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dLen );</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> xbInt16 LOG( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> xbInt16 LOWER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> xbInt16 LTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sOut );</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> xbInt16 MAX( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn1, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn2, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> xbInt16 MIN( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn1, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn2, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> xbInt16 MONTH( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dMonthOut );</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> xbInt16 RECCOUNT( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dRecOut );</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> xbInt16 RECNO( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dRecOut );</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> xbInt16 REPLICATE( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 ulRepCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> xbInt16 RIGHT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 iCharCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> xbInt16 RTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> xbInt16 SPACE( xbInt32 lCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> xbInt16 SQRT( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dBase, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dSqrRt );</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> xbInt16 STOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;sDateOut );</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sPadChar, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> xbInt16 STRZERO( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> xbInt16 SUBSTR( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbInt16 TRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> xbInt16 UPPER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> xbInt16 VAL( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> xbInt16 YEAR( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOutYear );</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span><span class="preprocessor"> #endif</span></div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add"> 210</a></span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBcd;</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc"> 211</a></span> <span class="keyword">friend</span> <span class="keyword">class </span>xbExp;</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> </div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBlockRead;</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">void</span> xbSleep ( xbInt32 lMillisecs );</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> xbInt16 GetCmdLineOpt ( xbInt32 lArgc, <span class="keywordtype">char</span> **argv, <span class="keyword">const</span> <span class="keywordtype">char</span> *sOptRqst, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut );</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> xbInt16 GetCmdLineOpt ( xbInt32 lArgc, <span class="keywordtype">char</span> **argv, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOptRqst, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sParmOut );</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="comment">/* xbase functions */</span></div>
+<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="preprocessor"> #ifdef XB_FUNCTION_SUPPORT</span></div>
+<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> xbInt16 ABS( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> xbInt16 ALLTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> xbInt16 ASC( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dAscOut );</div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> xbInt16 AT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sSrchFor, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sBase, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dPos );</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> xbInt16 CDOW( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutDow );</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> xbInt16 CHR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dAsciCd, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> xbInt16 CMONTH( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutMonth );</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> xbInt16 CTOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sInDate, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> xbInt16 DATE( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> xbInt16 DAY( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOutDay );</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> xbInt16 DEL( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut, xbInt16 iRecBufSw = 0 );</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> xbInt16 DELETED( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bOut, xbInt16 iRecBufSw = 0 );</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dOutDate );</div>
+<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> xbInt16 DESCEND( <span class="keyword">const</span> <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dsOut );</div>
+<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> xbInt16 DOW( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;sInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dDowOut );</div>
+<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> xbInt16 DTOC( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutFmtDate );</div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> xbInt16 DTOS( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOutFmtDate );</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> xbInt16 EXP( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> xbInt16 IIF( <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> bResult, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sTrueResult, <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sFalseResult, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sResult );</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> xbInt16 INT( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> xbInt16 ISALPHA( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> xbInt16 ISLOWER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> xbInt16 ISUPPER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;s, <a class="code hl_typedef" href="namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f">xbBool</a> &amp;bResult );</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> xbInt16 LEFT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 lCharCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> xbInt16 LEN( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dLen );</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> xbInt16 LOG( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> xbInt16 LOWER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> xbInt16 LTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp; sOut );</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> xbInt16 MAX( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn1, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn2, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> xbInt16 MIN( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn1, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn2, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> xbInt16 MONTH( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dMonthOut );</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> xbInt16 RECCOUNT( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dRecOut );</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> xbInt16 RECNO( <a class="code hl_class" href="classxb_1_1xbDbf.html">xbDbf</a> * d, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dRecOut );</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> xbInt16 REPLICATE( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 ulRepCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> xbInt16 RIGHT( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 iCharCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> xbInt16 RTRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> xbInt16 SPACE( xbInt32 lCnt, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> xbInt16 SQRT( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dBase, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dSqrRt );</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> xbInt16 STOD( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;sDateOut );</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> xbInt16 STR( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sPadChar, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> xbInt16 STRZERO( <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> dIn, xbUInt32 ulLen, xbUInt32 ulDec, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> xbInt16 SUBSTR( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> xbInt16 TRIM( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> xbInt16 UPPER( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sOut );</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> xbInt16 VAL( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sIn, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOut );</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> xbInt16 YEAR( <a class="code hl_class" href="classxb_1_1xbDate.html">xbDate</a> &amp;dInDate, <a class="code hl_typedef" href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xbDouble</a> &amp;dOutYear );</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="preprocessor"> #endif</span></div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add"> 215</a></span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBcd;</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc"> 216</a></span> <span class="keyword">friend</span> <span class="keyword">class </span>xbExp;</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1"> 218</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">GetFunctionInfo</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExpLine, <span class="keywordtype">char</span> &amp;cReturnType, xbInt16 &amp;iReturnLenCalc, xbInt32 &amp;lReturnLenVal ) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">static</span> xbInt16 xbMemcmp( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s1, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s2, <span class="keywordtype">size_t</span> n );</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span><span class="preprocessor"> #ifdef XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">friend</span> <span class="keyword">class </span>xbBlockRead;</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span><span class="preprocessor"> #endif </span><span class="comment">// XB_BLOCKREAD_SUPPORT</span></div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="preprocessor">#ifdef XB_LOGGING_SUPPORT</span></div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a> *xLog;</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span><span class="preprocessor">#endif</span></div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span>};</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span>} <span class="comment">/* namespace xb */</span></div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_DBLIST_H__ */</span><span class="preprocessor"></span></div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"><a class="line" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1"> 223</a></span> xbInt16 <a class="code hl_function" href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">GetFunctionInfo</a>( <span class="keyword">const</span> <a class="code hl_class" href="classxb_1_1xbString.html">xbString</a> &amp;sExpLine, <span class="keywordtype">char</span> &amp;cReturnType, xbInt16 &amp;iReturnLenCalc, xbInt32 &amp;lReturnLenVal ) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keyword">static</span> xbInt16 xbMemcmp( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s1, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s2, <span class="keywordtype">size_t</span> n );</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">private</span>:</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span><span class="preprocessor">#ifdef XB_LOGGING_SUPPORT</span></div>
+<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <a class="code hl_variable" href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xbLog</a> *xLog;</div>
+<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="preprocessor">#endif</span></div>
+<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span>};</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span>} <span class="comment">/* namespace xb */</span></div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span><span class="preprocessor">#endif </span><span class="comment">/* __XB_DBLIST_H__ */</span><span class="preprocessor"></span></div>
<div class="ttc" id="aclassxb_1_1xbDate_html"><div class="ttname"><a href="classxb_1_1xbDate.html">xb::xbDate</a></div><div class="ttdoc">xbDate class.</div><div class="ttdef"><b>Definition:</b> xbdate.h:62</div></div>
<div class="ttc" id="aclassxb_1_1xbDbf_html"><div class="ttname"><a href="classxb_1_1xbDbf.html">xb::xbDbf</a></div><div class="ttdoc">Base class for handling dbf files/tables.</div><div class="ttdef"><b>Definition:</b> xbdbf.h:150</div></div>
<div class="ttc" id="aclassxb_1_1xbString_html"><div class="ttname"><a href="classxb_1_1xbString.html">xb::xbString</a></div><div class="ttdoc">Class for handling string data.</div><div class="ttdef"><b>Definition:</b> xbstring.h:50</div></div>
@@ -303,6 +308,7 @@ $(function() {
<div class="ttc" id="aclassxb_1_1xbXBase_html"><div class="ttname"><a href="classxb_1_1xbXBase.html">xb::xbXBase</a></div><div class="ttdoc">xbXbase class.</div><div class="ttdef"><b>Definition:</b> xbxbase.h:123</div></div>
<div class="ttc" id="aclassxb_1_1xbXBase_html_aa957eb502ecd076e5df89e7415cb094b"><div class="ttname"><a href="classxb_1_1xbXBase.html#aa957eb502ecd076e5df89e7415cb094b">xb::xbXBase::OpenHighestVersion</a></div><div class="ttdeci">xbInt16 OpenHighestVersion(const xbString &amp;sTableName, const xbString &amp;sAlias, xbDbf &amp;dbf, int dummy)</div></div>
<div class="ttc" id="aclassxb_1_1xbXBase_html_ae52e53340593b4253936c1372ec15ee1"><div class="ttname"><a href="classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1">xb::xbXBase::GetFunctionInfo</a></div><div class="ttdeci">xbInt16 GetFunctionInfo(const xbString &amp;sExpLine, char &amp;cReturnType, xbInt16 &amp;iReturnLenCalc, xbInt32 &amp;lReturnLenVal) const</div></div>
+<div class="ttc" id="aclassxb_1_1xbXBase_html_aedb4c2aa2c90e4529915198a2305b355"><div class="ttname"><a href="classxb_1_1xbXBase.html#aedb4c2aa2c90e4529915198a2305b355">xb::xbXBase::GetLogSize</a></div><div class="ttdeci">size_t GetLogSize() const</div></div>
<div class="ttc" id="anamespacexb_html"><div class="ttname"><a href="namespacexb.html">xb</a></div><div class="ttdef"><b>Definition:</b> xbdate.cpp:19</div></div>
<div class="ttc" id="anamespacexb_html_a25f47b226ce924a5c78f97989b0744a2"><div class="ttname"><a href="namespacexb.html#a25f47b226ce924a5c78f97989b0744a2">xb::xbDouble</a></div><div class="ttdeci">double xbDouble</div><div class="ttdef"><b>Definition:</b> xbtypes.h:23</div></div>
<div class="ttc" id="anamespacexb_html_a4a31fbe9110c9e55495ce71e642d785c"><div class="ttname"><a href="namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c">xb::xbLog</a></div><div class="ttdeci">class XBDLLEXPORT xbLog</div><div class="ttdef"><b>Definition:</b> xbxbase.h:26</div></div>
diff --git a/docs/doxygen/latex/annotated.tex b/docs/doxygen/latex/annotated.tex
index 4ee4578..c670b75 100644
--- a/docs/doxygen/latex/annotated.tex
+++ b/docs/doxygen/latex/annotated.tex
@@ -1,5 +1,6 @@
\doxysection{Data Structures}
Here are the data structures with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{\mbox{\hyperlink{structsFldMap}{s\+Fld\+Map}} }{\pageref{structsFldMap}}{}
\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbDate}{xb\+::xb\+Date}} \\*Xb\+Date class }{\pageref{classxb_1_1xbDate}}{}
\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+::xb\+Dbf}} \\*Base class for handling dbf files/tables }{\pageref{classxb_1_1xbDbf}}{}
\item\contentsline{section}{\mbox{\hyperlink{classxb_1_1xbFile}{xb\+::xb\+File}} \\*Class for handling low level file I/O }{\pageref{classxb_1_1xbFile}}{}
diff --git a/docs/doxygen/latex/classxb_1_1xbDate.pdf b/docs/doxygen/latex/classxb_1_1xbDate.pdf
index c0c2d67..566204d 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 d1505d4..a7a9988 100644
--- a/docs/doxygen/latex/classxb_1_1xbDate.tex
+++ b/docs/doxygen/latex/classxb_1_1xbDate.tex
@@ -26,6 +26,8 @@ Inheritance diagram for xb\+::xb\+Date\+:\begin{figure}[H]
\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbDate_a7ab727a7ec184a086ad36ef83b948170}{xb\+Date}} (xb\+Int32 l\+Jul\+Date)
\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbDate_a8dfc827b466be3c5e3def599277dfa43}{xb\+Date}} (xb\+UInt16 i\+Init)
+\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbDate_a05c9680c6eb9fe07ecf13a189b596c37}{$\sim$xb\+Date}} ()
\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbDate_a2e33ad9415c32e820e08fd8084198690}{operator=}} (const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&d)
@@ -78,6 +80,8 @@ const char $\ast$ \mbox{\hyperlink{classxb_1_1xbDate_ab43a5d8d929767c0ffdd722972
\begin{DoxyCompactList}\small\item\em Determine if date is a leap year. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a5f8051c31b29244265e8f26ac3547b9b}{Is\+Leap\+Year}} () const
\begin{DoxyCompactList}\small\item\em Determine if date is a leap year. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbDate_a611a64b14ff89ad3c20b34081ea1e658}{Is\+Null}} () const
+\begin{DoxyCompactList}\small\item\em Determine if date is null date. \end{DoxyCompactList}\item
xb\+Int32 \mbox{\hyperlink{classxb_1_1xbDate_a1ee3377d4ead9d31099eee539d9b13a7}{Julian\+Days}} () const
\begin{DoxyCompactList}\small\item\em Calculate julian days for a given date. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDate_a9d28b2a46d8aaa284b92f44eeb96b2ff}{Jul\+To\+Date8}} (xb\+Int32 l\+Jul\+Date)
@@ -98,14 +102,22 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Displa
\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
@@ -116,14 +128,14 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+D
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
@@ -175,7 +187,7 @@ To calculate a future or past date, convert the base date to a Julian date, add
\mbox{\Hypertarget{classxb_1_1xbDate_ab3150e7db0ab5db10a07d748b55465eb}\label{classxb_1_1xbDate_ab3150e7db0ab5db10a07d748b55465eb}}
\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [1/5]}}
{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
@@ -185,7 +197,7 @@ Constructor.
\mbox{\Hypertarget{classxb_1_1xbDate_ac8a4d9330221a3daee21b3c28c1d9719}\label{classxb_1_1xbDate_ac8a4d9330221a3daee21b3c28c1d9719}}
\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [2/5]}}
{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{const char $\ast$}]{s\+Date8\+In }\end{DoxyParamCaption})}
@@ -200,7 +212,7 @@ Constructor.
\mbox{\Hypertarget{classxb_1_1xbDate_acf4546f5681735ede18210f60bab68d4}\label{classxb_1_1xbDate_acf4546f5681735ede18210f60bab68d4}}
\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [3/5]}}
{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Date8\+In }\end{DoxyParamCaption})}
@@ -215,7 +227,7 @@ Constructor.
\mbox{\Hypertarget{classxb_1_1xbDate_a7ab727a7ec184a086ad36ef83b948170}\label{classxb_1_1xbDate_a7ab727a7ec184a086ad36ef83b948170}}
\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
-\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [4/5]}}
{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{xb\+Int32}]{l\+Jul\+Date }\end{DoxyParamCaption})}
@@ -227,6 +239,21 @@ Constructor.
{\em l\+Jul\+Date} & -\/ Input julian date. \\
\hline
\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbDate_a8dfc827b466be3c5e3def599277dfa43}\label{classxb_1_1xbDate_a8dfc827b466be3c5e3def599277dfa43}}
+\index{xb::xbDate@{xb::xbDate}!xbDate@{xbDate}}
+\index{xbDate@{xbDate}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{xbDate()}{xbDate()}\hspace{0.1cm}{\footnotesize\ttfamily [5/5]}}
+{\footnotesize\ttfamily xb\+::xb\+Date\+::xb\+Date (\begin{DoxyParamCaption}\item[{xb\+UInt16}]{i\+Init }\end{DoxyParamCaption})}
+
+
+
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Init\+Opt} & -\/ Constructor to use to initialize date static variables Called by the main xb\+Xbase\+::xb\+XBase constructor \\
+\hline
+\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbDate_a05c9680c6eb9fe07ecf13a189b596c37}\label{classxb_1_1xbDate_a05c9680c6eb9fe07ecf13a189b596c37}}
\index{xb::xbDate@{xb::xbDate}!````~xbDate@{$\sim$xbDate}}
\index{````~xbDate@{$\sim$xbDate}!xb::xbDate@{xb::xbDate}}
@@ -304,7 +331,7 @@ Century calculated for the two digit year.
Get century for date.
\begin{DoxyReturn}{Returns}
-This routine returns the century from the date.
+the century from the valid date. or 0 for a null date.
\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbDate_a9fc29730b66cddfbb58c69992a99cc7c}\label{classxb_1_1xbDate_a9fc29730b66cddfbb58c69992a99cc7c}}
\index{xb::xbDate@{xb::xbDate}!CharDayOf@{CharDayOf}}
@@ -543,9 +570,6 @@ Get home directory.
{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
\hline
\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
\index{xb::xbDate@{xb::xbDate}!GetLogDirectory@{GetLogDirectory}}
\index{GetLogDirectory@{GetLogDirectory}!xb::xbDate@{xb::xbDate}}
@@ -573,6 +597,32 @@ xb\+True -\/ Multi user mode turned on.~\newline
xb\+False -\/ Multi user mode turned off.~\newline
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbDate@{xb::xbDate}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbDate@{xb::xbDate}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbDate_a5f8051c31b29244265e8f26ac3547b9b}\label{classxb_1_1xbDate_a5f8051c31b29244265e8f26ac3547b9b}}
\index{xb::xbDate@{xb::xbDate}!IsLeapYear@{IsLeapYear}}
\index{IsLeapYear@{IsLeapYear}!xb::xbDate@{xb::xbDate}}
@@ -606,6 +656,20 @@ Determine if date is a leap year.
xb\+True -\/ Is leapyear.~\newline
xb\+False -\/ Not a leap year.
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDate_a611a64b14ff89ad3c20b34081ea1e658}\label{classxb_1_1xbDate_a611a64b14ff89ad3c20b34081ea1e658}}
+\index{xb::xbDate@{xb::xbDate}!IsNull@{IsNull}}
+\index{IsNull@{IsNull}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{IsNull()}{IsNull()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} xb\+::xb\+Date\+::\+Is\+Null (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Determine if date is null date.
+
+\begin{DoxyReturn}{Returns}
+xb\+True -\/ If null date.~\newline
+ xb\+False -\/ Not a null date.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbDate_a1ee3377d4ead9d31099eee539d9b13a7}\label{classxb_1_1xbDate_a1ee3377d4ead9d31099eee539d9b13a7}}
\index{xb::xbDate@{xb::xbDate}!JulianDays@{JulianDays}}
\index{JulianDays@{JulianDays}!xb::xbDate@{xb::xbDate}}
@@ -692,7 +756,7 @@ xb\+False -\/ Dates match.
operator +
-This routine adds additional days to a date field.
+This routine adds additional days to a valid date field.
\begin{DoxyParams}{Parameters}
{\em l\+Count} & -\/ Number of days to add. \\
\hline
@@ -710,7 +774,7 @@ New date in CCYYMMDD format.
operator ++
-This routine adds one day to the date field. \mbox{\Hypertarget{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}\label{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}}
+This routine adds one day to the date field if the date is not null. \mbox{\Hypertarget{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}\label{classxb_1_1xbDate_a947ba156d04fe063aaa4c9964ae5d163}}
\index{xb::xbDate@{xb::xbDate}!operator+=@{operator+=}}
\index{operator+=@{operator+=}!xb::xbDate@{xb::xbDate}}
\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}}
@@ -720,7 +784,7 @@ This routine adds one day to the date field. \mbox{\Hypertarget{classxb_1_1xbDat
operator +=
-This routine adds l\+Days to the date
+This routine adds l\+Days to the date if the date is not null.
\begin{DoxyParams}{Parameters}
{\em l\+Days} & -\/ Number of days to add to the date. \\
\hline
@@ -737,11 +801,11 @@ operator -\/
This routine subtracts one date from another date returning the difference.
\begin{DoxyParams}{Parameters}
-{\em dt} & -\/ Date to subtract. \\
+{\em dt} & -\/ Date to subtract \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
-Number of days
+Number of days difference or zero if one of the dates is null.
\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbDate_a73ff5c037046ac0a0bb7d73f74e25cbb}\label{classxb_1_1xbDate_a73ff5c037046ac0a0bb7d73f74e25cbb}}
\index{xb::xbDate@{xb::xbDate}!operator-\/@{operator-\/}}
@@ -753,7 +817,7 @@ Number of days
operator -\/
-This routine subtracts days from a date field.
+This routine subtracts days from a valid date field.
\begin{DoxyParams}{Parameters}
{\em l\+Count} & -\/ Number of days to subtract. \\
\hline
@@ -771,7 +835,7 @@ New date in CCYYMMDD format.
operator --
-This routine subtracts one day from the date field. \mbox{\Hypertarget{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}\label{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}}
+This routine subtracts one day from the date field if the date is not null. \mbox{\Hypertarget{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}\label{classxb_1_1xbDate_a4a8f207d759540114373f5e9d6d375f7}}
\index{xb::xbDate@{xb::xbDate}!operator-\/=@{operator-\/=}}
\index{operator-\/=@{operator-\/=}!xb::xbDate@{xb::xbDate}}
\doxysubsubsection{\texorpdfstring{operator-\/=()}{operator-=()}}
@@ -781,7 +845,7 @@ This routine subtracts one day from the date field. \mbox{\Hypertarget{classxb_1
operator -\/=
-This routine subtracts l\+Days from the date.
+This routine subtracts l\+Days from the date if the date is not null.
\begin{DoxyParams}{Parameters}
{\em l\+Days} & -\/ Number of days to subtract from the date. \\
\hline
@@ -912,8 +976,7 @@ Set the date.
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
-XB\+\_\+\+NO\+\_\+\+ERROR~\newline
-XB\+\_\+\+INVALID\+\_\+\+DATE
+XB\+\_\+\+NO\+\_\+\+ERROR
\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
\index{xb::xbDate@{xb::xbDate}!SetDataDirectory@{SetDataDirectory}}
@@ -927,7 +990,7 @@ Set the data directory.
\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
+{\em s\+Data\+Directory} & Set the data directory. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
@@ -980,6 +1043,12 @@ This routine determines the Endian-\/ness at run time instead of compile time as
\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbDate@{xb::xbDate}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
\index{xb::xbDate@{xb::xbDate}!SetMultiUser@{SetMultiUser}}
\index{SetMultiUser@{SetMultiUser}!xb::xbDate@{xb::xbDate}}
@@ -997,6 +1066,21 @@ Get the multi user setting.
\\
\hline
\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbDate@{xb::xbDate}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbDate@{xb::xbDate}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbDate_ab43a5d8d929767c0ffdd722972bb8cc0}\label{classxb_1_1xbDate_ab43a5d8d929767c0ffdd722972bb8cc0}}
\index{xb::xbDate@{xb::xbDate}!Str@{Str}}
\index{Str@{Str}!xb::xbDate@{xb::xbDate}}
@@ -1061,5 +1145,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.\+1.\+0/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbDbf.pdf b/docs/doxygen/latex/classxb_1_1xbDbf.pdf
index 589c18c..73fad18 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 0d95c95..248e693 100644
--- a/docs/doxygen/latex/classxb_1_1xbDbf.tex
+++ b/docs/doxygen/latex/classxb_1_1xbDbf.tex
@@ -44,7 +44,7 @@ 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_a309b5b1fb6a5c048c4bfb404d011ac55}{Dump\+Header}} (xb\+Int16 i\+Option) const
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a47643728f74cf3b6e0ffc55259895bdb}{Dump\+Header}} (xb\+Int16 i\+Option)
\begin{DoxyCompactList}\small\item\em Dump dbf file header. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aba30399f15885a07f87f904c0d0656fa}{Dump\+Record}} (xb\+UInt32 ul\+Rec\+No, xb\+Int16 i\+Output\+Dest=0, xb\+Int16 i\+Output\+Fmt=0)
\begin{DoxyCompactList}\small\item\em Dump record. \end{DoxyCompactList}\item
@@ -84,8 +84,6 @@ virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7eadc7b08d73003802b90584f7b
\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
@@ -114,8 +112,6 @@ virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a3c36a5ffbc7067a1abbcb526dd3
\begin{DoxyCompactList}\small\item\em Write the current record to disk. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aacbc7bac3ea0c502ee75b838f4f0fcbf}{Put\+Record}} (xb\+UInt32 ul\+Rec\+No)
\begin{DoxyCompactList}\small\item\em Write record to disk. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a060541addb5bb1f0fe12959ed6f66fb9}{Read\+Header}} (xb\+Int16 i\+File\+Position\+Option, xb\+Int16 i\+Read\+Option)
-\begin{DoxyCompactList}\small\item\em Read dbf file header information. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a94d7d626ba691fd4b740c034673e6fc6}{Record\+Deleted}} (xb\+Int16 i\+Opt=0) const
\begin{DoxyCompactList}\small\item\em Return record deletion status. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}{Rename}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} s\+New\+Name)=0
@@ -180,7 +176,7 @@ virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7b8ef75b17941beac17e50e969b
\begin{DoxyCompactList}\small\item\em Get long field for field name. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a56c8f924284bf88aabf90b7930b4eb47}{Put\+Long\+Field}} (xb\+Int16 i\+Field\+No, xb\+Int32 l\+Field\+Value)
\begin{DoxyCompactList}\small\item\em Put long field for field number. \end{DoxyCompactList}\item
-virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae7aad223119edb3d541e9f65e88c9f2f}{Put\+Long\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+No, xb\+Int32 l\+Field\+Value)
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a0692d1776a725c2f61d4c14677e9307c}{Put\+Long\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, xb\+Int32 l\+Field\+Value)
\begin{DoxyCompactList}\small\item\em Put long field for field name. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a67e3a050f9090edf69eee75aef7f5d83}{Get\+ULong\+Field}} (xb\+Int16 i\+Field\+No, xb\+UInt32 \&l\+Field\+Value) const
\begin{DoxyCompactList}\small\item\em Get unsigned long field for field number. \end{DoxyCompactList}\item
@@ -216,32 +212,56 @@ virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a873f04af528a9d81e6a367a59d9
\begin{DoxyCompactList}\small\item\em Put date field for field number. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a571b36b3a940b1a16d5e834f329b33b9}{Put\+Date\+Field}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, const \mbox{\hyperlink{classxb_1_1xbDate}{xb\+Date}} \&dt)
\begin{DoxyCompactList}\small\item\em Put date field for field name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}{Set\+Home\+Folders}} ()
-\begin{DoxyCompactList}\small\item\em Create Home Folders. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out)
-\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out, xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_ae9a3f726ce5229ed021bfce0515050fc}{Get\+Null\+Sts}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Is\+Null) const
+\begin{DoxyCompactList}\small\item\em Get field null status. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a909788123ce0694b65dfcf036380d918}{Get\+Null\+Sts}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Field\+Name, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Is\+Null) const
+\begin{DoxyCompactList}\small\item\em Get field null status. \end{DoxyCompactList}\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a7930fe8b930c6d646b7b0d3df576fe9e}{Get\+Null\+Sts}} (xb\+Int16 i\+Field\+No, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&b\+Is\+Null, xb\+Int16 i\+Rec\+Buf\+Sw) const
+\begin{DoxyCompactList}\small\item\em Get field null status. \end{DoxyCompactList}\item
const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}{Get\+Directory}} () const
\begin{DoxyCompactList}\small\item\em Get the directory name. \end{DoxyCompactList}\item
const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}{Get\+File\+Name}} () const
\begin{DoxyCompactList}\small\item\em Get the file name. \end{DoxyCompactList}\item
const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}{Get\+Fq\+File\+Name}} () const
\begin{DoxyCompactList}\small\item\em Get the fully qualified file name. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}{Set\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}{Set\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
-\begin{DoxyCompactList}\small\item\em Set the filename. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}{Set\+Fq\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Name)
-\begin{DoxyCompactList}\small\item\em Set the fully qualifed filename. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out, xb\+Int16 i\+Option=0)
+\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}{Determine\+Xbase\+Table\+Version}} (unsigned char c\+File\+Type\+Byte) const
+\begin{DoxyCompactList}\small\item\em Determine xbase dbf version. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}{Determine\+Xbase\+Memo\+Version}} (unsigned char c\+File\+Type\+Byte) const
+\begin{DoxyCompactList}\small\item\em Determine which version the memo (dbt) file is. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \mbox{\hyperlink{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}{e\+Get\+Double}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable double value. \end{DoxyCompactList}\item
+xb\+Int32 \mbox{\hyperlink{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}{e\+Get\+Int32}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable long value. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}{e\+Get\+UInt32}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable unsigned long value. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}{e\+Get\+Int16}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable short value. \end{DoxyCompactList}\item
+xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}{e\+Get\+UInt16}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable unsigned short value. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}{e\+Put\+Double}} (char $\ast$p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
+\begin{DoxyCompactList}\small\item\em Write a portable double value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}{e\+Put\+Int32}} (char $\ast$p, xb\+Int32 l)
+\begin{DoxyCompactList}\small\item\em Write a portable long value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}{e\+Put\+UInt32}} (char $\ast$p, xb\+UInt32 ul)
+\begin{DoxyCompactList}\small\item\em Write a portable unsigned long value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}{e\+Put\+Int16}} (char $\ast$p, xb\+Int16 s)
+\begin{DoxyCompactList}\small\item\em Write a portable short value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}{e\+Put\+UInt16}} (char $\ast$p, xb\+UInt16 s)
+\begin{DoxyCompactList}\small\item\em Write a portable unsigned short value to memory location. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}{File\+Exists}} () const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}{File\+Exists}} (xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}{File\+Is\+Open}} () const
+\begin{DoxyCompactList}\small\item\em Determines if file is open. \end{DoxyCompactList}\item
xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}{Get\+Block\+Size}} () const
\begin{DoxyCompactList}\small\item\em Get the block size. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}{Set\+Block\+Size}} (xb\+UInt32 ul\+Block\+Size)
-\begin{DoxyCompactList}\small\item\em Set the block size. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}{Get\+Open\+Mode}} () const
-\begin{DoxyCompactList}\small\item\em Get the open mode of the file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}{Get\+Share\+Mode}} () const
-\begin{DoxyCompactList}\small\item\em Get the share mode of the file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}{Get\+File\+Dir\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}{Get\+File\+Dir\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
@@ -250,62 +270,44 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}{
\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}{Get\+File\+Ext\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}{Get\+File\+Mtime}} (time\+\_\+t \&mtime)
+\begin{DoxyCompactList}\small\item\em Get the time of last file modification timestamp as reported by the OS. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}{Get\+File\+Name\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}{Get\+File\+Name\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}{Get\+File\+Size}} (xb\+UInt64 \&ull\+File\+Size)
+\begin{DoxyCompactList}\small\item\em Get the size of the file as reported by the OS. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}{Get\+File\+Type}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Type) const
\begin{DoxyCompactList}\small\item\em Get the file type aka Capitalized file extension. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}{Get\+Open\+Mode}} () const
+\begin{DoxyCompactList}\small\item\em Get the open mode of the file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}{Get\+Share\+Mode}} () const
+\begin{DoxyCompactList}\small\item\em Get the share mode of the file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 \&i\+Version)
\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte)
\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte, xb\+Int16 \&i\+Version)
\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}{Determine\+Xbase\+Table\+Version}} (unsigned char c\+File\+Type\+Byte) const
-\begin{DoxyCompactList}\small\item\em Determine xbase dbf version. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}{Determine\+Xbase\+Memo\+Version}} (unsigned char c\+File\+Type\+Byte) const
-\begin{DoxyCompactList}\small\item\em Determine which version the memo (dbt) file is. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}{File\+Exists}} () const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}{File\+Exists}} (xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}{File\+Is\+Open}} () const
-\begin{DoxyCompactList}\small\item\em Determines if file is open. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}{Name\+Suffix\+Missing}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines status of file extension. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t read\+Size, void $\ast$buf)
\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, xb\+UInt32 ul\+Block\+Size, size\+\_\+t read\+Size, void $\ast$buf)
\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}{Set\+Block\+Size}} (xb\+UInt32 ul\+Block\+Size)
+\begin{DoxyCompactList}\small\item\em Set the block size. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}{Set\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}{Set\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
+\begin{DoxyCompactList}\small\item\em Set the filename. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}{Set\+Fq\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Name)
+\begin{DoxyCompactList}\small\item\em Set the fully qualifed filename. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}{Set\+Home\+Folders}} ()
+\begin{DoxyCompactList}\small\item\em Set Home Folders. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}{Write\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t write\+Size, void $\ast$buf)
\begin{DoxyCompactList}\small\item\em Write a block of data to file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}{Get\+File\+Size}} (xb\+UInt64 \&ull\+File\+Size)
-\begin{DoxyCompactList}\small\item\em Get the size of the file as reported by the OS. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}{Get\+File\+Mtime}} (time\+\_\+t \&mtime)
-\begin{DoxyCompactList}\small\item\em Get the time of last file modification timestamp as reported by the OS. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \mbox{\hyperlink{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}{e\+Get\+Double}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable double value. \end{DoxyCompactList}\item
-xb\+Int32 \mbox{\hyperlink{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}{e\+Get\+Int32}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable long value. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}{e\+Get\+UInt32}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable unsigned long value. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}{e\+Get\+Int16}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable short value. \end{DoxyCompactList}\item
-xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}{e\+Get\+UInt16}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable unsigned short value. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}{e\+Put\+Double}} (char $\ast$p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
-\begin{DoxyCompactList}\small\item\em Write a portable double value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}{e\+Put\+Int32}} (char $\ast$p, xb\+Int32 l)
-\begin{DoxyCompactList}\small\item\em Write a portable long value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}{e\+Put\+UInt32}} (char $\ast$p, xb\+UInt32 ul)
-\begin{DoxyCompactList}\small\item\em Write a portable unsigned long value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}{e\+Put\+Int16}} (char $\ast$p, xb\+Int16 s)
-\begin{DoxyCompactList}\small\item\em Write a portable short value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}{e\+Put\+UInt16}} (char $\ast$p, xb\+UInt16 s)
-\begin{DoxyCompactList}\small\item\em Write a portable unsigned short value to memory location. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}{xb\+Fclose}} ()
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fclose. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}{xb\+Feof}} ()
@@ -316,6 +318,8 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}{
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}{xb\+Fgetc}} (char \&c)
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}{xb\+Fgets}} (size\+\_\+t l\+Size, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Line)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgets. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode)
\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
@@ -332,16 +336,12 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}{
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputs. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}{xb\+Fread}} (void $\ast$ptr, size\+\_\+t size, size\+\_\+t nmemb)
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fread. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}{xb\+Fgets}} (size\+\_\+t l\+Size, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Line)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgets. \end{DoxyCompactList}\item
-size\+\_\+t \mbox{\hyperlink{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}{xb\+Ftell}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary ftell. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}{xb\+Fseek}} (xb\+Int64 ll\+Offset, xb\+Int32 whence)
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fseek. \end{DoxyCompactList}\item
+size\+\_\+t \mbox{\hyperlink{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}{xb\+Ftell}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary ftell. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}{xb\+FTurn\+Off\+File\+Buffering}} ()
\begin{DoxyCompactList}\small\item\em Turn off file buffering. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}{xb\+Fwrite}} (const void $\ast$ptr, size\+\_\+t l\+Size, size\+\_\+t l\+Nmemb)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fwrite. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}{xb\+Read\+Until}} (const char c\+Delim, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out)
\begin{DoxyCompactList}\small\item\em Read file until a particular character is encountered on input stream. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option)
@@ -354,24 +354,32 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}{
\begin{DoxyCompactList}\small\item\em Rename file. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}{xb\+Rewind}} ()
\begin{DoxyCompactList}\small\item\em Xbase wrapper for rewind. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}{xb\+Fwrite}} (const void $\ast$ptr, size\+\_\+t l\+Size, size\+\_\+t l\+Nmemb)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fwrite. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}{xb\+Truncate}} (xb\+Int64 ll\+Size)
\begin{DoxyCompactList}\small\item\em Xbase wrapper for ftruncate. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}{Name\+Suffix\+Missing}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines status of file extension. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
@@ -382,14 +390,14 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+D
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
@@ -402,6 +410,8 @@ static const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a6219f1b5e24ea12fe158
\doxysubsection*{Protected Member Functions}
\begin{DoxyCompactItemize}
\item
+virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_a060541addb5bb1f0fe12959ed6f66fb9}{Read\+Header}} (xb\+Int16 i\+File\+Position\+Option, xb\+Int16 i\+Read\+Option)
+\begin{DoxyCompactList}\small\item\em Read dbf file header information. \end{DoxyCompactList}\item
virtual xb\+Int16 \mbox{\hyperlink{classxb_1_1xbDbf_aabd146c0e1054ab905ec96aedd84b02e}{Get\+Raw\+Field}} (xb\+Int16 i\+Field\+No, char $\ast$Buf, xb\+UInt32 Buf\+Size, xb\+Int16 i\+Rec\+Buf\+Sw) const
\begin{DoxyCompactList}\small\item\em Get raw field data for field number. \end{DoxyCompactList}\item
virtual void \mbox{\hyperlink{classxb_1_1xbDbf_ad06fe0f7975fb81125d27d82504e6829}{Init\+Vars}} ()
@@ -678,11 +688,11 @@ This routine will copy the structure of a dbf file and if successful return a po
\doxysubsubsection{\texorpdfstring{CreateTable()}{CreateTable()}}
{\footnotesize\ttfamily virtual xb\+Int16 xb\+::xb\+Dbf\+::\+Create\+Table (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Table\+Name, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Alias, }\item[{\mbox{\hyperlink{structxb_1_1xbSchema}{xb\+Schema}} $\ast$}]{p\+Schema, }\item[{xb\+Int16}]{i\+Overlay, }\item[{xb\+Int16}]{i\+Share\+Mode }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}
-\mbox{\Hypertarget{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}\label{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}}
+\mbox{\Hypertarget{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}\label{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}}
\index{xb::xbDbf@{xb::xbDbf}!CreateUniqueFileName@{CreateUniqueFileName}}
\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out, }\item[{xb\+Int16}]{i\+Option = {\ttfamily 0} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
@@ -700,17 +710,9 @@ Given a directory and file extension as inputs, create a unique file name.
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}\label{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}}
-\index{xb::xbDbf@{xb::xbDbf}!CreateUniqueFileName@{CreateUniqueFileName}}
-\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbDbf@{xb::xbDbf}}
-\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-
-
-
-Create a unique file name.
+Create a unique file name.
Given a directory and file extension as inputs, create a unique file name.
@@ -871,11 +873,11 @@ 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_a309b5b1fb6a5c048c4bfb404d011ac55}\label{classxb_1_1xbDbf_a309b5b1fb6a5c048c4bfb404d011ac55}}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a47643728f74cf3b6e0ffc55259895bdb}\label{classxb_1_1xbDbf_a47643728f74cf3b6e0ffc55259895bdb}}
\index{xb::xbDbf@{xb::xbDbf}!DumpHeader@{DumpHeader}}
\index{DumpHeader@{DumpHeader}!xb::xbDbf@{xb::xbDbf}}
\doxysubsubsection{\texorpdfstring{DumpHeader()}{DumpHeader()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Dump\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Dump\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
@@ -1527,7 +1529,7 @@ B -\/ Big endian~\newline
Return true if dbf file empty or positioned to the last record.
\begin{DoxyReturn}{Returns}
-Returns true if dbf file is empty or positioned on the last record.
+Returns true if error, dbf file is empty or positioned on the last record.
\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}\label{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}}
\index{xb::xbDbf@{xb::xbDbf}!GetErrorMessage@{GetErrorMessage}}
@@ -2174,9 +2176,6 @@ Get home directory.
{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
\hline
\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbDbf_a49e667f9c8ee55c36444702663fc5964}\label{classxb_1_1xbDbf_a49e667f9c8ee55c36444702663fc5964}}
\index{xb::xbDbf@{xb::xbDbf}!GetLastRecord@{GetLastRecord}}
\index{GetLastRecord@{GetLastRecord}!xb::xbDbf@{xb::xbDbf}}
@@ -2480,6 +2479,87 @@ Get the next record.
\begin{DoxyReturn}{Returns}
\href{xbretcod_8h.html}{\texttt{ Return Codes}}
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a909788123ce0694b65dfcf036380d918}\label{classxb_1_1xbDbf_a909788123ce0694b65dfcf036380d918}}
+\index{xb::xbDbf@{xb::xbDbf}!GetNullSts@{GetNullSts}}
+\index{GetNullSts@{GetNullSts}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetNullSts()}{GetNullSts()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Null\+Sts (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Field\+Name, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Is\+Null }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field null status.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+Name} & Field Name of field to retrieve. \\
+\hline
+{\em b\+Is\+Null} & Output field value. If field is all spaces on record buffer, returns true. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_ae9a3f726ce5229ed021bfce0515050fc}\label{classxb_1_1xbDbf_ae9a3f726ce5229ed021bfce0515050fc}}
+\index{xb::xbDbf@{xb::xbDbf}!GetNullSts@{GetNullSts}}
+\index{GetNullSts@{GetNullSts}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetNullSts()}{GetNullSts()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Null\+Sts (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Is\+Null }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field null status.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em b\+Is\+Null} & Output field value. If field is all spaces on record buffer, returns true. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a7930fe8b930c6d646b7b0d3df576fe9e}\label{classxb_1_1xbDbf_a7930fe8b930c6d646b7b0d3df576fe9e}}
+\index{xb::xbDbf@{xb::xbDbf}!GetNullSts@{GetNullSts}}
+\index{GetNullSts@{GetNullSts}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetNullSts()}{GetNullSts()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Get\+Null\+Sts (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Field\+No, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \&}]{b\+Is\+Null, }\item[{xb\+Int16}]{i\+Rec\+Buf\+Sw }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}
+
+
+
+Get field null status.
+
+
+\begin{DoxyParams}{Parameters}
+{\em i\+Field\+No} & Number of field to retrieve. \\
+\hline
+{\em b\+Is\+Null} & Output field value. If field is all spaces on record buffer, returns true. \\
+\hline
+{\em i\+Rec\+Buf\+Sw} & 0 -\/ Record buffer with any updates.~\newline
+1 -\/ Record buffer with original data. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The field routines return one of\+:~\newline
+ XB\+\_\+\+NO\+\_\+\+ERROR~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NO~\newline
+XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
+ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
+XB\+\_\+\+INVALID\+\_\+\+DATA
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}\label{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}}
\index{xb::xbDbf@{xb::xbDbf}!GetOpenMode@{GetOpenMode}}
\index{GetOpenMode@{GetOpenMode}!xb::xbDbf@{xb::xbDbf}}
@@ -2496,6 +2576,19 @@ XB\+\_\+\+READ~\newline
XB\+\_\+\+WRITE~\newline
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbDbf@{xb::xbDbf}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbDbf_ab3d248e5221b4f0809897cd43af17a1e}\label{classxb_1_1xbDbf_ab3d248e5221b4f0809897cd43af17a1e}}
\index{xb::xbDbf@{xb::xbDbf}!GetPrevRecord@{GetPrevRecord}}
\index{GetPrevRecord@{GetPrevRecord}!xb::xbDbf@{xb::xbDbf}}
@@ -2611,6 +2704,11 @@ Pointer to record buffer.
Get the current number of records in the dbf data file.
+\begin{DoxyReturn}{Returns}
+Record count or \href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\end{DoxyReturn}
+Get the current number of records in the dbf data file.
+
\begin{DoxyParams}{Parameters}
{\em ul\+Rec\+Cnt} & Output number of records in file. \\
@@ -2619,19 +2717,6 @@ 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}}
@@ -2673,6 +2758,19 @@ Get the table alias.
This routine returns the table alias. \begin{DoxyReturn}{Returns}
Table alias
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbDbf@{xb::xbDbf}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbDbf_a039eb02418ec4ca862adbc0f95b9cbec}\label{classxb_1_1xbDbf_a039eb02418ec4ca862adbc0f95b9cbec}}
\index{xb::xbDbf@{xb::xbDbf}!GetULongField@{GetULongField}}
\index{GetULongField@{GetULongField}!xb::xbDbf@{xb::xbDbf}}
@@ -3249,7 +3347,7 @@ XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+NAME~\newline
XB\+\_\+\+INVALID\+\_\+\+FIELD\+\_\+\+TYPE~\newline
XB\+\_\+\+INVALID\+\_\+\+DATA
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbDbf_ae7aad223119edb3d541e9f65e88c9f2f}\label{classxb_1_1xbDbf_ae7aad223119edb3d541e9f65e88c9f2f}}
+\mbox{\Hypertarget{classxb_1_1xbDbf_a0692d1776a725c2f61d4c14677e9307c}\label{classxb_1_1xbDbf_a0692d1776a725c2f61d4c14677e9307c}}
\index{xb::xbDbf@{xb::xbDbf}!PutLongField@{PutLongField}}
\index{PutLongField@{PutLongField}!xb::xbDbf@{xb::xbDbf}}
\doxysubsubsection{\texorpdfstring{PutLongField()}{PutLongField()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
@@ -3438,7 +3536,7 @@ Read a block of data from file.
\index{xb::xbDbf@{xb::xbDbf}!ReadHeader@{ReadHeader}}
\index{ReadHeader@{ReadHeader}!xb::xbDbf@{xb::xbDbf}}
\doxysubsubsection{\texorpdfstring{ReadHeader()}{ReadHeader()}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Read\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Position\+Option, }\item[{xb\+Int16}]{i\+Read\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+Dbf\+::\+Read\+Header (\begin{DoxyParamCaption}\item[{xb\+Int16}]{i\+Position\+Option, }\item[{xb\+Int16}]{i\+Read\+Option }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}
@@ -3526,7 +3624,7 @@ Set the data directory.
\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
+{\em s\+Data\+Directory} & Set the data directory. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
@@ -3631,9 +3729,9 @@ Set the fully qualifed filename.
-Create Home Folders.
+Set Home Folders.
-Create xbase64 log and data folders in the home directory for current usre.
+Create xbase64 log, data and temp folders in the home directory for current usre.
\begin{DoxyReturn}{Returns}
\href{xbretcod_8h.html}{\texttt{ Return Codes}}
@@ -3644,6 +3742,12 @@ Create xbase64 log and data folders in the home directory for current usre.
\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbDbf@{xb::xbDbf}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
\index{xb::xbDbf@{xb::xbDbf}!SetMultiUser@{SetMultiUser}}
\index{SetMultiUser@{SetMultiUser}!xb::xbDbf@{xb::xbDbf}}
@@ -3661,6 +3765,21 @@ Get the multi user setting.
\\
\hline
\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbDbf@{xb::xbDbf}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbDbf@{xb::xbDbf}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbDbf_a7e63e852418f337eb7c44de5dcd50323}\label{classxb_1_1xbDbf_a7e63e852418f337eb7c44de5dcd50323}}
\index{xb::xbDbf@{xb::xbDbf}!SetVersion@{SetVersion}}
\index{SetVersion@{SetVersion}!xb::xbDbf@{xb::xbDbf}}
@@ -4399,6 +4518,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.\+1.\+0/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbFile.pdf b/docs/doxygen/latex/classxb_1_1xbFile.pdf
index 491c726..11aea00 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 b342cad..e5e63ad 100644
--- a/docs/doxygen/latex/classxb_1_1xbFile.tex
+++ b/docs/doxygen/latex/classxb_1_1xbFile.tex
@@ -22,32 +22,50 @@ Inheritance diagram for xb\+::xb\+File\+:\begin{figure}[H]
\begin{DoxyCompactList}\small\item\em Class Constructor. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbFile_a491f6c48076e89da2e791a42b2727a90}{$\sim$xb\+File}} ()
\begin{DoxyCompactList}\small\item\em Class Destructor. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}{Set\+Home\+Folders}} ()
-\begin{DoxyCompactList}\small\item\em Create Home Folders. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out)
-\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out, xb\+Int16 i\+Option)
-\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_acd0fb2166b2bff7e8a1cf65a7bc8be1e}{Get\+Directory}} () const
\begin{DoxyCompactList}\small\item\em Get the directory name. \end{DoxyCompactList}\item
const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_ac95cb882ccbcdedc9a233c6ad9fed07a}{Get\+File\+Name}} () const
\begin{DoxyCompactList}\small\item\em Get the file name. \end{DoxyCompactList}\item
const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbFile_a31b4e641f93206ba23e2a5a27491dcd4}{Get\+Fq\+File\+Name}} () const
\begin{DoxyCompactList}\small\item\em Get the fully qualified file name. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}{Set\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Directory)
-\begin{DoxyCompactList}\small\item\em Set the directory. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}{Set\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
-\begin{DoxyCompactList}\small\item\em Set the filename. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}{Set\+Fq\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Name)
-\begin{DoxyCompactList}\small\item\em Set the fully qualifed filename. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}{Create\+Unique\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqn\+Out, xb\+Int16 i\+Option=0)
+\begin{DoxyCompactList}\small\item\em Create a unique file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}{Determine\+Xbase\+Table\+Version}} (unsigned char c\+File\+Type\+Byte) const
+\begin{DoxyCompactList}\small\item\em Determine xbase dbf version. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}{Determine\+Xbase\+Memo\+Version}} (unsigned char c\+File\+Type\+Byte) const
+\begin{DoxyCompactList}\small\item\em Determine which version the memo (dbt) file is. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \mbox{\hyperlink{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}{e\+Get\+Double}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable double value. \end{DoxyCompactList}\item
+xb\+Int32 \mbox{\hyperlink{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}{e\+Get\+Int32}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable long value. \end{DoxyCompactList}\item
+xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}{e\+Get\+UInt32}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable unsigned long value. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}{e\+Get\+Int16}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable short value. \end{DoxyCompactList}\item
+xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}{e\+Get\+UInt16}} (const char $\ast$p) const
+\begin{DoxyCompactList}\small\item\em Get a portable unsigned short value. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}{e\+Put\+Double}} (char $\ast$p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
+\begin{DoxyCompactList}\small\item\em Write a portable double value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}{e\+Put\+Int32}} (char $\ast$p, xb\+Int32 l)
+\begin{DoxyCompactList}\small\item\em Write a portable long value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}{e\+Put\+UInt32}} (char $\ast$p, xb\+UInt32 ul)
+\begin{DoxyCompactList}\small\item\em Write a portable unsigned long value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}{e\+Put\+Int16}} (char $\ast$p, xb\+Int16 s)
+\begin{DoxyCompactList}\small\item\em Write a portable short value to memory location. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}{e\+Put\+UInt16}} (char $\ast$p, xb\+UInt16 s)
+\begin{DoxyCompactList}\small\item\em Write a portable unsigned short value to memory location. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}{File\+Exists}} () const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}{File\+Exists}} (xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
+\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}{File\+Is\+Open}} () const
+\begin{DoxyCompactList}\small\item\em Determines if file is open. \end{DoxyCompactList}\item
xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a638e14262410a1627819f016a16cdce2}{Get\+Block\+Size}} () const
\begin{DoxyCompactList}\small\item\em Get the block size. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}{Set\+Block\+Size}} (xb\+UInt32 ul\+Block\+Size)
-\begin{DoxyCompactList}\small\item\em Set the block size. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}{Get\+Open\+Mode}} () const
-\begin{DoxyCompactList}\small\item\em Get the open mode of the file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}{Get\+Share\+Mode}} () const
-\begin{DoxyCompactList}\small\item\em Get the share mode of the file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a60c53998e3d1b694134b20a87bc9bf5a}{Get\+File\+Dir\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
\begin{DoxyCompactList}\small\item\em Get the directory part of the file name. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5127c92892816e9bbc5c19653c4147a}{Get\+File\+Dir\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Dir\+Part\+Out) const
@@ -56,62 +74,44 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a57a9222e5cbb51019d4eeb2c3ac89fa2}{
\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab289b6ffe955321160c1f90220c22e25}{Get\+File\+Ext\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Ext\+Part\+Out) const
\begin{DoxyCompactList}\small\item\em Get the extension part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}{Get\+File\+Mtime}} (time\+\_\+t \&mtime)
+\begin{DoxyCompactList}\small\item\em Get the time of last file modification timestamp as reported by the OS. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a81422b3dd52763d2cc6c77237ec9af0a}{Get\+File\+Name\+Part}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6110763c5ae996b72c7a62c15bdecc73}{Get\+File\+Name\+Part}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Complete\+File\+Name\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name\+Part\+Out) const
\begin{DoxyCompactList}\small\item\em Get the name part of the file name. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}{Get\+File\+Size}} (xb\+UInt64 \&ull\+File\+Size)
+\begin{DoxyCompactList}\small\item\em Get the size of the file as reported by the OS. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5548236d38d43b89ae29b9a015b1f678}{Get\+File\+Type}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Type) const
\begin{DoxyCompactList}\small\item\em Get the file type aka Capitalized file extension. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a3c500dc9dac22c49496e4b29386b2dd3}{Get\+Open\+Mode}} () const
+\begin{DoxyCompactList}\small\item\em Get the open mode of the file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}{Get\+Share\+Mode}} () const
+\begin{DoxyCompactList}\small\item\em Get the share mode of the file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aaf2e697751a0beff41432a66bb83fb5e}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 \&i\+Version)
\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte)
\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a78aebdd21d3de46a450d5f835e3027f6}{Get\+Xbase\+File\+Type\+Byte}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, unsigned char \&c\+File\+Type\+Byte, xb\+Int16 \&i\+Version)
\begin{DoxyCompactList}\small\item\em Get the file type byte and version of the dbf file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ae2b6ac26018dc28f77afbb3f008c3f66}{Determine\+Xbase\+Table\+Version}} (unsigned char c\+File\+Type\+Byte) const
-\begin{DoxyCompactList}\small\item\em Determine xbase dbf version. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5a740033664c9ad2611c90e2a6d0c2d3}{Determine\+Xbase\+Memo\+Version}} (unsigned char c\+File\+Type\+Byte) const
-\begin{DoxyCompactList}\small\item\em Determine which version the memo (dbt) file is. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a78bd8a11dce102647095baf3aff2b006}{File\+Exists}} () const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a174d8a6aabc9cfcd32fedbd1e5b13ddd}{File\+Exists}} (xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a61130b4fbf4cf9d5972dcb4993de2f94}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a0592168f39a10f2a401a88ef781f6148}{File\+Exists}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines if a file exists. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbFile_a7fa837938a32dc9ca3fbc81cbaf50f59}{File\+Is\+Open}} () const
-\begin{DoxyCompactList}\small\item\em Determines if file is open. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}{Name\+Suffix\+Missing}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
+\begin{DoxyCompactList}\small\item\em Determines status of file extension. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aa1bb80340abc7a5c22f87f878e9dc825}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t read\+Size, void $\ast$buf)
\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_aef696b1c4c0ef5338e818599f695d485}{Read\+Block}} (xb\+UInt32 ul\+Block\+No, xb\+UInt32 ul\+Block\+Size, size\+\_\+t read\+Size, void $\ast$buf)
\begin{DoxyCompactList}\small\item\em Read a block of data from file. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a991c5676a6f38fa752435390989f413e}{Set\+Block\+Size}} (xb\+UInt32 ul\+Block\+Size)
+\begin{DoxyCompactList}\small\item\em Set the block size. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_ae78a85255488bc78964c16946dbaead3}{Set\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_a5419eb27e56822f828b2b88a9502a636}{Set\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name)
+\begin{DoxyCompactList}\small\item\em Set the filename. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbFile_aee832fa11db2077a532f49e1329bd05a}{Set\+Fq\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fq\+Name)
+\begin{DoxyCompactList}\small\item\em Set the fully qualifed filename. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a060acbfaa8d528f86cb59301814b414a}{Set\+Home\+Folders}} ()
+\begin{DoxyCompactList}\small\item\em Set Home Folders. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}{Write\+Block}} (xb\+UInt32 ul\+Block\+No, size\+\_\+t write\+Size, void $\ast$buf)
\begin{DoxyCompactList}\small\item\em Write a block of data to file. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a50b63c39e49d44e52078038027b24cc5}{Get\+File\+Size}} (xb\+UInt64 \&ull\+File\+Size)
-\begin{DoxyCompactList}\small\item\em Get the size of the file as reported by the OS. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a02df78f4c90313243f508fc56b95aba8}{Get\+File\+Mtime}} (time\+\_\+t \&mtime)
-\begin{DoxyCompactList}\small\item\em Get the time of last file modification timestamp as reported by the OS. \end{DoxyCompactList}\item
-\mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} \mbox{\hyperlink{classxb_1_1xbFile_ab14e4a11427f5efb81cba1dd32bd1aa1}{e\+Get\+Double}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable double value. \end{DoxyCompactList}\item
-xb\+Int32 \mbox{\hyperlink{classxb_1_1xbFile_a60b24a5afc984c586bf384c7e915ba0d}{e\+Get\+Int32}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable long value. \end{DoxyCompactList}\item
-xb\+UInt32 \mbox{\hyperlink{classxb_1_1xbFile_a78f052529d39a18deaface5a0d47d0b0}{e\+Get\+UInt32}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable unsigned long value. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ac40c991110ddc6fb30a72d90f4652762}{e\+Get\+Int16}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable short value. \end{DoxyCompactList}\item
-xb\+UInt16 \mbox{\hyperlink{classxb_1_1xbFile_a936ade458e6d5e6d29f9b5031888d189}{e\+Get\+UInt16}} (const char $\ast$p) const
-\begin{DoxyCompactList}\small\item\em Get a portable unsigned short value. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a98b6ff533ae93f90c977a2ba23eeb105}{e\+Put\+Double}} (char $\ast$p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xb\+Double}} d)
-\begin{DoxyCompactList}\small\item\em Write a portable double value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a19c37f76a2ccbb45019cb0fc373d3f46}{e\+Put\+Int32}} (char $\ast$p, xb\+Int32 l)
-\begin{DoxyCompactList}\small\item\em Write a portable long value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_aa3f6ceae4b96f24875d86848bf13a173}{e\+Put\+UInt32}} (char $\ast$p, xb\+UInt32 ul)
-\begin{DoxyCompactList}\small\item\em Write a portable unsigned long value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a29130f12739ac8fa837f4eaedf1338b2}{e\+Put\+Int16}} (char $\ast$p, xb\+Int16 s)
-\begin{DoxyCompactList}\small\item\em Write a portable short value to memory location. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbFile_a65e9839f92b96eac7b0d071fac3bbe40}{e\+Put\+UInt16}} (char $\ast$p, xb\+UInt16 s)
-\begin{DoxyCompactList}\small\item\em Write a portable unsigned short value to memory location. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a18830b5755d74818f60d9c7ce38ddf2d}{xb\+Fclose}} ()
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fclose. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_af5b6356832d2a67212070a1aa605f170}{xb\+Feof}} ()
@@ -122,6 +122,8 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afb1c584d2895ffb7834df80aea7eb1e4}{
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5ee229bda4d7d6695e122200e581e7a6}{xb\+Fgetc}} (char \&c)
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgetc. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}{xb\+Fgets}} (size\+\_\+t l\+Size, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Line)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgets. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xb\+Fopen}} (xb\+Int16 i\+Open\+Mode)
\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a0548cedf0f26b7d8ac221f75b0cd048c}{xb\+Fopen}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Open\+Mode, xb\+Int16 i\+Share\+Mode)
@@ -138,16 +140,12 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a698f3b40216778562e639e6ca1a47573}{
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fputs. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ab4f6afaa1f77539f27a4f05c26e54e2f}{xb\+Fread}} (void $\ast$ptr, size\+\_\+t size, size\+\_\+t nmemb)
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fread. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_ad245955ace26e5dde85fd4373b30d026}{xb\+Fgets}} (size\+\_\+t l\+Size, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Line)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fgets. \end{DoxyCompactList}\item
-size\+\_\+t \mbox{\hyperlink{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}{xb\+Ftell}} ()
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary ftell. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a5337ab8918df240910c0d19b4f298e3d}{xb\+Fseek}} (xb\+Int64 ll\+Offset, xb\+Int32 whence)
\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fseek. \end{DoxyCompactList}\item
+size\+\_\+t \mbox{\hyperlink{classxb_1_1xbFile_a0e1c06aedfa7fbcb92e117f891edd13b}{xb\+Ftell}} ()
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary ftell. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbFile_a9891b792f585a696f38a5cf959e30918}{xb\+FTurn\+Off\+File\+Buffering}} ()
\begin{DoxyCompactList}\small\item\em Turn off file buffering. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}{xb\+Fwrite}} (const void $\ast$ptr, size\+\_\+t l\+Size, size\+\_\+t l\+Nmemb)
-\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fwrite. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a08463f506f425c2385acbe1a561506e9}{xb\+Read\+Until}} (const char c\+Delim, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Out)
\begin{DoxyCompactList}\small\item\em Read file until a particular character is encountered on input stream. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6d919366c2ec95e529906bf8842cbf07}{xb\+Remove}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option)
@@ -160,24 +158,32 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_afc8ce113aa72611a278233f9bb170012}{
\begin{DoxyCompactList}\small\item\em Rename file. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbFile_a7996b6e084665c37c3892faea64b3505}{xb\+Rewind}} ()
\begin{DoxyCompactList}\small\item\em Xbase wrapper for rewind. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a6aadd871d1782944703fed773d44b85f}{xb\+Fwrite}} (const void $\ast$ptr, size\+\_\+t l\+Size, size\+\_\+t l\+Nmemb)
+\begin{DoxyCompactList}\small\item\em Xbase wrapper for standard libary fwrite. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a518bfcbfa3699d883cf89affee383296}{xb\+Truncate}} (xb\+Int64 ll\+Size)
\begin{DoxyCompactList}\small\item\em Xbase wrapper for ftruncate. \end{DoxyCompactList}\item
-xb\+Int16 \mbox{\hyperlink{classxb_1_1xbFile_a361e3cc318bbf1c4d10f069e0800a24e}{Name\+Suffix\+Missing}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+File\+Name, xb\+Int16 i\+Option) const
-\begin{DoxyCompactList}\small\item\em Determines status of file extension. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Display\+Error}} (xb\+Int16 Error\+Code) const
\begin{DoxyCompactList}\small\item\em Display error message on console for a given error number. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a6fbb9c3a550ab0b3378f9586a57791d2}{Get\+Default\+Date\+Format}} () const
\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
@@ -188,14 +194,14 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+D
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
@@ -294,11 +300,11 @@ Check a bit in a one byte field and see if it is set.
xb\+True Bit is set~\newline
xb\+False Bit is not set
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}\label{classxb_1_1xbFile_aae9a2ddb0adb8165b4ac2b6a28a932f7}}
+\mbox{\Hypertarget{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}\label{classxb_1_1xbFile_ad39797624a752b9d62533d00fad9feff}}
\index{xb::xbFile@{xb::xbFile}!CreateUniqueFileName@{CreateUniqueFileName}}
\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out }\end{DoxyParamCaption})}
+\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out, }\item[{xb\+Int16}]{i\+Option = {\ttfamily 0} }\end{DoxyParamCaption})}
@@ -316,17 +322,9 @@ Given a directory and file extension as inputs, create a unique file name.
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
-\href{xbretcod_8h.html}{\texttt{ Return Codes}}
+\href{xbretcod_8h.html}{\texttt{ Return Codes}}
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}\label{classxb_1_1xbFile_ae5ffabde2c88ea58324f27e471f6bfc0}}
-\index{xb::xbFile@{xb::xbFile}!CreateUniqueFileName@{CreateUniqueFileName}}
-\index{CreateUniqueFileName@{CreateUniqueFileName}!xb::xbFile@{xb::xbFile}}
-\doxysubsubsection{\texorpdfstring{CreateUniqueFileName()}{CreateUniqueFileName()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
-{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+File\+::\+Create\+Unique\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out, }\item[{xb\+Int16}]{i\+Option }\end{DoxyParamCaption})}
-
-
-
-Create a unique file name.
+Create a unique file name.
Given a directory and file extension as inputs, create a unique file name.
@@ -1026,9 +1024,6 @@ Get home directory.
{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
\hline
\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
\index{xb::xbFile@{xb::xbFile}!GetLogDirectory@{GetLogDirectory}}
\index{GetLogDirectory@{GetLogDirectory}!xb::xbFile@{xb::xbFile}}
@@ -1072,6 +1067,19 @@ XB\+\_\+\+READ~\newline
XB\+\_\+\+WRITE~\newline
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbFile@{xb::xbFile}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}\label{classxb_1_1xbFile_a9b63e05b77f477ff6109ff7b9432c1b6}}
\index{xb::xbFile@{xb::xbFile}!GetShareMode@{GetShareMode}}
\index{GetShareMode@{GetShareMode}!xb::xbFile@{xb::xbFile}}
@@ -1087,6 +1095,19 @@ XB\+\_\+\+SINGLE\+\_\+\+USER -\/ (file buffering on\texorpdfstring{$>$}{>}~\newl
XB\+\_\+\+MULTI\+\_\+\+USER -\/ (file buffering off)~\newline
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbFile@{xb::xbFile}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}\label{classxb_1_1xbFile_a7af337808919680b90710ad5e8a99232}}
\index{xb::xbFile@{xb::xbFile}!GetXbaseFileTypeByte@{GetXbaseFileTypeByte}}
\index{GetXbaseFileTypeByte@{GetXbaseFileTypeByte}!xb::xbFile@{xb::xbFile}}
@@ -1259,7 +1280,7 @@ Set the data directory.
\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
+{\em s\+Data\+Directory} & Set the data directory. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
@@ -1364,9 +1385,9 @@ Set the fully qualifed filename.
-Create Home Folders.
+Set Home Folders.
-Create xbase64 log and data folders in the home directory for current usre.
+Create xbase64 log, data and temp folders in the home directory for current usre.
\begin{DoxyReturn}{Returns}
\href{xbretcod_8h.html}{\texttt{ Return Codes}}
@@ -1377,6 +1398,12 @@ Create xbase64 log and data folders in the home directory for current usre.
\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbFile@{xb::xbFile}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
\index{xb::xbFile@{xb::xbFile}!SetMultiUser@{SetMultiUser}}
\index{SetMultiUser@{SetMultiUser}!xb::xbFile@{xb::xbFile}}
@@ -1394,6 +1421,21 @@ Get the multi user setting.
\\
\hline
\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbFile@{xb::xbFile}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbFile@{xb::xbFile}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}\label{classxb_1_1xbFile_a5d871dcfecc2b4338f7a13722aab766c}}
\index{xb::xbFile@{xb::xbFile}!WriteBlock@{WriteBlock}}
\index{WriteBlock@{WriteBlock}!xb::xbFile@{xb::xbFile}}
@@ -1907,5 +1949,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.\+1.\+0/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbSsv.pdf b/docs/doxygen/latex/classxb_1_1xbSsv.pdf
index 4677f70..526c8c1 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 8abcbcb..b98b436 100644
--- a/docs/doxygen/latex/classxb_1_1xbSsv.tex
+++ b/docs/doxygen/latex/classxb_1_1xbSsv.tex
@@ -26,14 +26,22 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Displa
\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
@@ -44,14 +52,14 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+D
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
@@ -234,9 +242,6 @@ Get home directory.
{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
\hline
\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
\index{xb::xbSsv@{xb::xbSsv}!GetLogDirectory@{GetLogDirectory}}
\index{GetLogDirectory@{GetLogDirectory}!xb::xbSsv@{xb::xbSsv}}
@@ -264,6 +269,32 @@ xb\+True -\/ Multi user mode turned on.~\newline
xb\+False -\/ Multi user mode turned off.~\newline
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbSsv@{xb::xbSsv}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbSsv@{xb::xbSsv}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}\label{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}}
\index{xb::xbSsv@{xb::xbSsv}!SetDataDirectory@{SetDataDirectory}}
\index{SetDataDirectory@{SetDataDirectory}!xb::xbSsv@{xb::xbSsv}}
@@ -276,7 +307,7 @@ Set the data directory.
\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
+{\em s\+Data\+Directory} & Set the data directory. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
@@ -329,6 +360,12 @@ This routine determines the Endian-\/ness at run time instead of compile time as
\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbSsv@{xb::xbSsv}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})}
+
\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
\index{xb::xbSsv@{xb::xbSsv}!SetMultiUser@{SetMultiUser}}
\index{SetMultiUser@{SetMultiUser}!xb::xbSsv@{xb::xbSsv}}
@@ -346,6 +383,21 @@ Get the multi user setting.
\\
\hline
\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbSsv@{xb::xbSsv}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbSsv@{xb::xbSsv}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
\doxysubsection{Field Documentation}
@@ -371,5 +423,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.\+1.\+0/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbString.tex b/docs/doxygen/latex/classxb_1_1xbString.tex
index 9cec303..d589549 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_ac6afd224dfbe439ce083c8dd1ad3246c}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 pos, xb\+UInt32 l\+Copy\+Len)
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a430119df844bd80d67c23c48b045af30}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 ul\+Start\+Pos, xb\+UInt32 l\+Copy\+Len)
\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
-\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a4f1d709d9f6c56959e8549157b4ee68c}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 l\+Copy\+Len)
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a97df314be5b3b2611be11ff50a19533d}{Assign}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, xb\+UInt32 ul\+Start\+Pos)
\begin{DoxyCompactList}\small\item\em Assign portion of string. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \mbox{\hyperlink{classxb_1_1xbString_ac7a8466b03c04df838bd182ef244f792}{Copy}} () const
\begin{DoxyCompactList}\small\item\em Copy a string. \end{DoxyCompactList}\item
@@ -104,6 +104,8 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_a1528b30b84a41c3564ef31d1f4496b15
\begin{DoxyCompactList}\small\item\em Convert string to xb\+UInt64 number. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbString_ae3ab18365e132323f8ae4c99eb72181c}{Cvt\+Long\+Long}} (xb\+Int64 \&ll\+Out)
\begin{DoxyCompactList}\small\item\em Convert string to xb\+Int64 number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a6b33a8df49cdcb76033cbce5d8dc59d7}{Extract\+Element}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s, char delim, xb\+UInt32 i\+Cnt, xb\+Int16 i\+Opt=0)
+\begin{DoxyCompactList}\small\item\em Extract an element out of a delimited string. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbString_a77195fc4957952625cb33bb503517a3e}{Extract\+Element}} (const char $\ast$src, char delim, xb\+UInt32 i\+Cnt, xb\+Int16 i\+Opt=0)
\begin{DoxyCompactList}\small\item\em Extract an element out of a delimited string. \end{DoxyCompactList}\item
char \mbox{\hyperlink{classxb_1_1xbString_a685187a5f8401b322fc61f3fbe56330d}{Get\+Character}} (xb\+UInt32 l\+Pos) const
@@ -384,7 +386,8 @@ Append data to string.
\begin{DoxyParams}{Parameters}
-{\em s} & String data to append. \\
+{\em s} & String data to append. ~\newline
+ \\
\hline
{\em ul\+Byte\+Count} & Maximum number of bytes to append. \\
\hline
@@ -452,7 +455,7 @@ Assign portion of string.
\begin{DoxyReturn}{Returns}
Reference to this string.
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_a4f1d709d9f6c56959e8549157b4ee68c}\label{classxb_1_1xbString_a4f1d709d9f6c56959e8549157b4ee68c}}
+\mbox{\Hypertarget{classxb_1_1xbString_a97df314be5b3b2611be11ff50a19533d}\label{classxb_1_1xbString_a97df314be5b3b2611be11ff50a19533d}}
\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
@@ -472,7 +475,7 @@ Assign portion of string.
\begin{DoxyReturn}{Returns}
Reference to this string.
\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbString_ac6afd224dfbe439ce083c8dd1ad3246c}\label{classxb_1_1xbString_ac6afd224dfbe439ce083c8dd1ad3246c}}
+\mbox{\Hypertarget{classxb_1_1xbString_a430119df844bd80d67c23c48b045af30}\label{classxb_1_1xbString_a430119df844bd80d67c23c48b045af30}}
\index{xb::xbString@{xb::xbString}!Assign@{Assign}}
\index{Assign@{Assign}!xb::xbString@{xb::xbString}}
\doxysubsubsection{\texorpdfstring{Assign()}{Assign()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
@@ -627,7 +630,7 @@ XB\+\_\+\+NO\+\_\+\+ERROR
\mbox{\Hypertarget{classxb_1_1xbString_a77195fc4957952625cb33bb503517a3e}\label{classxb_1_1xbString_a77195fc4957952625cb33bb503517a3e}}
\index{xb::xbString@{xb::xbString}!ExtractElement@{ExtractElement}}
\index{ExtractElement@{ExtractElement}!xb::xbString@{xb::xbString}}
-\doxysubsubsection{\texorpdfstring{ExtractElement()}{ExtractElement()}}
+\doxysubsubsection{\texorpdfstring{ExtractElement()}{ExtractElement()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Extract\+Element (\begin{DoxyParamCaption}\item[{const char $\ast$}]{p\+Src, }\item[{char}]{c\+Delim, }\item[{xb\+UInt32}]{l\+Skip\+Cnt, }\item[{xb\+Int16}]{i\+Opt = {\ttfamily 0} }\end{DoxyParamCaption})}
@@ -649,6 +652,31 @@ Extract an element out of a delimited string.
\begin{DoxyReturn}{Returns}
Reference to string extracted from element.
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbString_a6b33a8df49cdcb76033cbce5d8dc59d7}\label{classxb_1_1xbString_a6b33a8df49cdcb76033cbce5d8dc59d7}}
+\index{xb::xbString@{xb::xbString}!ExtractElement@{ExtractElement}}
+\index{ExtractElement@{ExtractElement}!xb::xbString@{xb::xbString}}
+\doxysubsubsection{\texorpdfstring{ExtractElement()}{ExtractElement()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+String\+::\+Extract\+Element (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Src, }\item[{char}]{c\+Delim, }\item[{xb\+UInt32}]{l\+Skip\+Cnt, }\item[{xb\+Int16}]{i\+Opt = {\ttfamily 0} }\end{DoxyParamCaption})}
+
+
+
+Extract an element out of a delimited string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Src} & Source string. \\
+\hline
+{\em c\+Delim} & Delimiter. \\
+\hline
+{\em l\+Skip\+Cnt} & Number of delimiters to skip. \\
+\hline
+{\em i\+Opt} & 0 -\/ ignore single and double quotes.~\newline
+ 1 -\/ ignore delimiters between single or double quotes. \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Reference to string extracted from element.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbString_a685187a5f8401b322fc61f3fbe56330d}\label{classxb_1_1xbString_a685187a5f8401b322fc61f3fbe56330d}}
\index{xb::xbString@{xb::xbString}!GetCharacter@{GetCharacter}}
\index{GetCharacter@{GetCharacter}!xb::xbString@{xb::xbString}}
@@ -713,7 +741,7 @@ Last position of character in the string.
Get the path separator out of the string.
-\begin{DoxyReturn}{Returns}
+This method assumes the string is a valid path name. If it is, it returns either / or . \begin{DoxyReturn}{Returns}
Char value containing either / or \textbackslash{} depending on OS.
\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbString_a6c33e73659f8e98819289d2661c7271c}\label{classxb_1_1xbString_a6c33e73659f8e98819289d2661c7271c}}
@@ -1744,5 +1772,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.\+1.\+0/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf b/docs/doxygen/latex/classxb_1_1xbTblMgr.pdf
index 96c128e..f31039e 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 72d1d08..bbf8bbf 100644
--- a/docs/doxygen/latex/classxb_1_1xbTblMgr.tex
+++ b/docs/doxygen/latex/classxb_1_1xbTblMgr.tex
@@ -41,14 +41,22 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Displa
\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
@@ -59,14 +67,14 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+D
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
@@ -274,9 +282,6 @@ Get home directory.
{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
\hline
\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
\index{xb::xbTblMgr@{xb::xbTblMgr}!GetLogDirectory@{GetLogDirectory}}
\index{GetLogDirectory@{GetLogDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
@@ -310,12 +315,38 @@ 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_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}\label{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}}
\index{xb::xbTblMgr@{xb::xbTblMgr}!GetTblListEntry@{GetTblListEntry}}
\index{GetTblListEntry@{GetTblListEntry}!xb::xbTblMgr@{xb::xbTblMgr}}
\doxysubsubsection{\texorpdfstring{GetTblListEntry()}{GetTblListEntry()}}
{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Tbl\+List\+Entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}\label{classxb_1_1xbTblMgr_ac8eaef41acf08911b90f900aac8e70af}}
\index{xb::xbTblMgr@{xb::xbTblMgr}!RemoveTblFromTblList@{RemoveTblFromTblList}}
\index{RemoveTblFromTblList@{RemoveTblFromTblList}!xb::xbTblMgr@{xb::xbTblMgr}}
@@ -340,7 +371,7 @@ Set the data directory.
\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
+{\em s\+Data\+Directory} & Set the data directory. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
@@ -393,6 +424,12 @@ This routine determines the Endian-\/ness at run time instead of compile time as
\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetLogFileName@{SetLogFileName}}
+\index{SetLogFileName@{SetLogFileName}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
\mbox{\Hypertarget{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}\label{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}}
\index{xb::xbTblMgr@{xb::xbTblMgr}!SetMultiUser@{SetMultiUser}}
\index{SetMultiUser@{SetMultiUser}!xb::xbTblMgr@{xb::xbTblMgr}}
@@ -410,6 +447,21 @@ Get the multi user setting.
\\
\hline
\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbTblMgr@{xb::xbTblMgr}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbTblMgr@{xb::xbTblMgr}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
\doxysubsection{Field Documentation}
@@ -435,5 +487,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.\+1.\+0/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/classxb_1_1xbXBase.pdf b/docs/doxygen/latex/classxb_1_1xbXBase.pdf
index 1e5d6fd..e2b00e7 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 7159134..420cffe 100644
--- a/docs/doxygen/latex/classxb_1_1xbXBase.tex
+++ b/docs/doxygen/latex/classxb_1_1xbXBase.tex
@@ -24,16 +24,14 @@ Inheritance diagram for xb\+::xb\+XBase\+:\begin{figure}[H]
\begin{DoxyCompactList}\small\item\em Class Deconstructor. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_afccb552ca0daff779c0500ff20d22c2b}{Close\+All\+Tables}} ()
\begin{DoxyCompactList}\small\item\em Close all tables / files. \end{DoxyCompactList}\item
+xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_aa41240d920b604dcbd91dce7eecb78e1}{Create\+Fqn}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Dir\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Name\+In, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Ext\+In, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Fqfn\+Out)
+\begin{DoxyCompactList}\small\item\em Fully qualified file name from a directory, filename and extension. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbXBase_ae357fac4fdebdf49e46563cf611caf65}{Disable\+Msg\+Logging}} ()
\item
void \mbox{\hyperlink{classxb_1_1xbXBase_a470e6eb0ed0be60338f9b40976d3ad48}{Enable\+Msg\+Logging}} ()
\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a5a5ecaed9777978344902446c9ae3b8e}{Flush\+Log}} ()
\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbXBase_a51d49b4d699740194b28c6ec0d0ee07b}{Get\+Log\+Directory}} () const
-\item
-const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbXBase_ac0744edf9e4aa959d8cf2daa874376af}{Get\+Log\+File\+Name}} () const
-\item
const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbXBase_ab5d63cd7d9137eba8a1d4d9c3df522b7}{Get\+Log\+Fq\+File\+Name}} () const
\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbXBase_ade34cd72c2a7e70fb55429a8a6f6c028}{Get\+Log\+Status}} () const
@@ -46,12 +44,10 @@ xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_afa7bbac08a4601f49cd53b457196ee0e}
\begin{DoxyCompactList}\small\item\em Open highest qualified class available for dbf file. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$ \mbox{\hyperlink{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}{Open}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Table\+Name, const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Alias, xb\+Int16 i\+Open\+Mode, xb\+Int16 i\+Share\+Mode, xb\+Int16 i\+Version, xb\+Int16 \&i\+Rc)
\begin{DoxyCompactList}\small\item\em Open highest qualified class available for dbf file. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbXBase_a48d82dbe298c6f4cf68a63ac82dd8292}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Directory)
-\item
-void \mbox{\hyperlink{classxb_1_1xbXBase_a94010b88a309315ef980715eb581336c}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
-\item
void \mbox{\hyperlink{classxb_1_1xbXBase_a666a0cb5b76ec7a9a3677d339e0c6b42}{Set\+Log\+Size}} (size\+\_\+t l\+Size)
\item
+size\+\_\+t \mbox{\hyperlink{classxb_1_1xbXBase_aedb4c2aa2c90e4529915198a2305b355}{Get\+Log\+Size}} () const
+\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a9ca5be73abffd0fdd18bdc799877272a}{Write\+Log\+Message}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Message, xb\+Int16 i\+Output\+Opt=0)
\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbXBase_a0dff00b9ee3c288841e137ca01168116}{Write\+Log\+Bytes}} (xb\+UInt32 l\+Cnt, const char $\ast$p)
@@ -86,14 +82,22 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_a97dfa59ab9a8e9f17454da0faceb023d}{Displa
\begin{DoxyCompactList}\small\item\em Get the default date format. \end{DoxyCompactList}\item
\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a1d803a4bfc8ba0561267a0bf9e51f7d9}{Get\+Data\+Directory}} () const
\begin{DoxyCompactList}\small\item\em Get the current data directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}{Get\+Temp\+Directory}} () const
+\begin{DoxyCompactList}\small\item\em Get the current temp directory. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
+\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
xb\+Int16 \mbox{\hyperlink{classxb_1_1xbSsv_a49cd162f066eef2b829ba7c9f6620243}{Get\+Endian\+Type}} () const
\begin{DoxyCompactList}\small\item\em Get the Endian type. \end{DoxyCompactList}\item
const char $\ast$ \mbox{\hyperlink{classxb_1_1xbSsv_a56961d2a67b8e7470098626ac4dac7e4}{Get\+Error\+Message}} (xb\+Int16 Error\+Code) const
\begin{DoxyCompactList}\small\item\em Get an error message. \end{DoxyCompactList}\item
+char \mbox{\hyperlink{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}{Get\+Path\+Separator}} () const
+\begin{DoxyCompactList}\small\item\em Get the OS dependent path separator. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a57caaaadfbd089d9a58ecfcb50c88a6c}{Set\+Data\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Data\+Directory)
\begin{DoxyCompactList}\small\item\em Set the data directory. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a5f74db23f8902846d581935c7db73f9c}{Set\+Default\+Date\+Format}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Default\+Date\+Format)
\begin{DoxyCompactList}\small\item\em Set the default date format. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}{Set\+Temp\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Temp\+Directory)
+\begin{DoxyCompactList}\small\item\em Set the temp directory. \end{DoxyCompactList}\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_a62e4fd0a5888665c76bbbad962794e72}{Bit\+Set}} (unsigned char c, xb\+Int16 i\+Bit\+No) const
\begin{DoxyCompactList}\small\item\em Check a bit in a one byte field and see if it is set. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a8551b15a3ce4fa2a40d698db01f4a9ae}{Bit\+Dump}} (unsigned char c) const
@@ -104,8 +108,14 @@ void \mbox{\hyperlink{classxb_1_1xbSsv_aba1395b8e4c7f28c3614061de6e49190}{Bit\+D
\begin{DoxyCompactList}\small\item\em Get the default auto commit setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}{Set\+Default\+Auto\+Commit}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Default\+Auto\+Commit)
\begin{DoxyCompactList}\small\item\em Set the default auto commit. \end{DoxyCompactList}\item
-void \mbox{\hyperlink{classxb_1_1xbSsv_abc9c06c95d71fbad8294e1ae8862cea9}{Get\+Home\+Dir}} (\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Home\+Dir\+Out)
-\begin{DoxyCompactList}\small\item\em Get home directory. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}{Get\+Log\+Directory}} () const
+\item
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& \mbox{\hyperlink{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}{Get\+Log\+File\+Name}} () const
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}{Set\+Log\+Directory}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+Directory)
+\item
+void \mbox{\hyperlink{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}{Set\+Log\+File\+Name}} (const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Log\+File\+Name)
+\item
\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} \mbox{\hyperlink{classxb_1_1xbSsv_abd58031c5f1c3766c24d47a82e6fd9c5}{Get\+Multi\+User}} () const
\begin{DoxyCompactList}\small\item\em Get the multi user setting. \end{DoxyCompactList}\item
void \mbox{\hyperlink{classxb_1_1xbSsv_aba6e59512f7172dd55dcf92059e5928c}{Set\+Multi\+User}} (\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Multi\+User)
@@ -227,9 +237,35 @@ xb\+True Bit is set~\newline
Close all tables / files.
-This closes everything. \begin{DoxyReturn}{Returns}
+This closes everything and deletes references to the associated \mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} objects. \begin{DoxyReturn}{Returns}
\href{xbretcod_8h.html}{\texttt{ Return Codes}}
\end{DoxyReturn}
+\mbox{\Hypertarget{classxb_1_1xbXBase_aa41240d920b604dcbd91dce7eecb78e1}\label{classxb_1_1xbXBase_aa41240d920b604dcbd91dce7eecb78e1}}
+\index{xb::xbXBase@{xb::xbXBase}!CreateFqn@{CreateFqn}}
+\index{CreateFqn@{CreateFqn}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{CreateFqn()}{CreateFqn()}}
+{\footnotesize\ttfamily xb\+Int16 xb\+::xb\+XBase\+::\+Create\+Fqn (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Dir\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Name\+In, }\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Ext\+In, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Fqn\+Out }\end{DoxyParamCaption})}
+
+
+
+Fully qualified file name from a directory, filename and extension.
+
+Given a directory, file name and file extension as inputs, create a fully qualified file name.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Dir\+In} & Directory \\
+\hline
+{\em s\+File\+In} & File Name \\
+\hline
+{\em s\+Ext\+In} & File Extension \\
+\hline
+{\em s\+Fqn\+Out} & A fully qualifed unique file name as output \\
+\hline
+\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+XB\+\_\+\+INVALIED\+\_\+\+PARAMETER or XB\+\_\+\+NO\+\_\+\+ERROR
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbXBase_ae357fac4fdebdf49e46563cf611caf65}\label{classxb_1_1xbXBase_ae357fac4fdebdf49e46563cf611caf65}}
\index{xb::xbXBase@{xb::xbXBase}!DisableMsgLogging@{DisableMsgLogging}}
\index{DisableMsgLogging@{DisableMsgLogging}!xb::xbXBase@{xb::xbXBase}}
@@ -427,20 +463,17 @@ Get home directory.
{\em s\+Home\+Dir\+Out} & -\/ Output home directory for current user. \\
\hline
\end{DoxyParams}
-\begin{DoxyReturn}{Returns}
-void
-\end{DoxyReturn}
-\mbox{\Hypertarget{classxb_1_1xbXBase_a51d49b4d699740194b28c6ec0d0ee07b}\label{classxb_1_1xbXBase_a51d49b4d699740194b28c6ec0d0ee07b}}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}\label{classxb_1_1xbSsv_a4822315bded3969b59aeeb683c373051}}
\index{xb::xbXBase@{xb::xbXBase}!GetLogDirectory@{GetLogDirectory}}
\index{GetLogDirectory@{GetLogDirectory}!xb::xbXBase@{xb::xbXBase}}
\doxysubsubsection{\texorpdfstring{GetLogDirectory()}{GetLogDirectory()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+XBase\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
-\mbox{\Hypertarget{classxb_1_1xbXBase_ac0744edf9e4aa959d8cf2daa874376af}\label{classxb_1_1xbXBase_ac0744edf9e4aa959d8cf2daa874376af}}
+\mbox{\Hypertarget{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}\label{classxb_1_1xbSsv_afaef09435be73b3111f5edbd7091d861}}
\index{xb::xbXBase@{xb::xbXBase}!GetLogFileName@{GetLogFileName}}
\index{GetLogFileName@{GetLogFileName}!xb::xbXBase@{xb::xbXBase}}
\doxysubsubsection{\texorpdfstring{GetLogFileName()}{GetLogFileName()}}
-{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+XBase\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Log\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
\mbox{\Hypertarget{classxb_1_1xbXBase_ab5d63cd7d9137eba8a1d4d9c3df522b7}\label{classxb_1_1xbXBase_ab5d63cd7d9137eba8a1d4d9c3df522b7}}
\index{xb::xbXBase@{xb::xbXBase}!GetLogFqFileName@{GetLogFqFileName}}
@@ -448,6 +481,12 @@ void
\doxysubsubsection{\texorpdfstring{GetLogFqFileName()}{GetLogFqFileName()}}
{\footnotesize\ttfamily const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+XBase\+::\+Get\+Log\+Fq\+File\+Name (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+\mbox{\Hypertarget{classxb_1_1xbXBase_aedb4c2aa2c90e4529915198a2305b355}\label{classxb_1_1xbXBase_aedb4c2aa2c90e4529915198a2305b355}}
+\index{xb::xbXBase@{xb::xbXBase}!GetLogSize@{GetLogSize}}
+\index{GetLogSize@{GetLogSize}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetLogSize()}{GetLogSize()}}
+{\footnotesize\ttfamily size\+\_\+t xb\+::xb\+XBase\+::\+Get\+Log\+Size (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
\mbox{\Hypertarget{classxb_1_1xbXBase_ade34cd72c2a7e70fb55429a8a6f6c028}\label{classxb_1_1xbXBase_ade34cd72c2a7e70fb55429a8a6f6c028}}
\index{xb::xbXBase@{xb::xbXBase}!GetLogStatus@{GetLogStatus}}
\index{GetLogStatus@{GetLogStatus}!xb::xbXBase@{xb::xbXBase}}
@@ -475,12 +514,38 @@ 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_1xbSsv_a63cee13b473ee13970e93b11837b9e35}\label{classxb_1_1xbSsv_a63cee13b473ee13970e93b11837b9e35}}
+\index{xb::xbXBase@{xb::xbXBase}!GetPathSeparator@{GetPathSeparator}}
+\index{GetPathSeparator@{GetPathSeparator}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetPathSeparator()}{GetPathSeparator()}}
+{\footnotesize\ttfamily char xb\+::xb\+Ssv\+::\+Get\+Path\+Separator (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the OS dependent path separator.
+
+\begin{DoxyReturn}{Returns}
+Returns \textquotesingle{}\textbackslash{}\textquotesingle{} for windows environment, otherwise returns \textquotesingle{}/\textquotesingle{}.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}\label{classxb_1_1xbTblMgr_acbf148ddba4297021cfb980a161ebef9}}
\index{xb::xbXBase@{xb::xbXBase}!GetTblListEntry@{GetTblListEntry}}
\index{GetTblListEntry@{GetTblListEntry}!xb::xbXBase@{xb::xbXBase}}
\doxysubsubsection{\texorpdfstring{GetTblListEntry()}{GetTblListEntry()}}
{\footnotesize\ttfamily \mbox{\hyperlink{structxb_1_1xbTblList}{xb\+Tbl\+List}} $\ast$ xb\+::xb\+Tbl\+Mgr\+::\+Get\+Tbl\+List\+Entry (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbDbf}{xb\+Dbf}} $\ast$}]{d }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+\mbox{\Hypertarget{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}\label{classxb_1_1xbSsv_abfaeef85935331073d213465bb362a61}}
+\index{xb::xbXBase@{xb::xbXBase}!GetTempDirectory@{GetTempDirectory}}
+\index{GetTempDirectory@{GetTempDirectory}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{GetTempDirectory()}{GetTempDirectory()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \& xb\+::xb\+Ssv\+::\+Get\+Temp\+Directory (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Get the current temp directory.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} containing the current data directory where the database files are stored.
+\end{DoxyReturn}
\mbox{\Hypertarget{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}\label{classxb_1_1xbXBase_ab35cec5ac8f0fa95f10653ca7ac817f6}}
\index{xb::xbXBase@{xb::xbXBase}!Open@{Open}}
\index{Open@{Open}!xb::xbXBase@{xb::xbXBase}}
@@ -560,7 +625,7 @@ Set the data directory.
\begin{DoxyParams}{Parameters}
-{\em s\+Data\+Directory} & Set the data direcroty. \\
+{\em s\+Data\+Directory} & Set the data directory. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}\label{classxb_1_1xbSsv_a25542afadaaf39b4fb5a1772a29cc0bd}}
@@ -607,17 +672,17 @@ Set the default date format.
Set the endian type.
-This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbXBase_a48d82dbe298c6f4cf68a63ac82dd8292}\label{classxb_1_1xbXBase_a48d82dbe298c6f4cf68a63ac82dd8292}}
+This routine determines the Endian-\/ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program. \mbox{\Hypertarget{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}\label{classxb_1_1xbSsv_a7b992ed97281bf25b5b66f5df686225e}}
\index{xb::xbXBase@{xb::xbXBase}!SetLogDirectory@{SetLogDirectory}}
\index{SetLogDirectory@{SetLogDirectory}!xb::xbXBase@{xb::xbXBase}}
\doxysubsubsection{\texorpdfstring{SetLogDirectory()}{SetLogDirectory()}}
-{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Directory }\end{DoxyParamCaption})}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
-\mbox{\Hypertarget{classxb_1_1xbXBase_a94010b88a309315ef980715eb581336c}\label{classxb_1_1xbXBase_a94010b88a309315ef980715eb581336c}}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}\label{classxb_1_1xbSsv_a7f05738e7dfd759e89990242ef503544}}
\index{xb::xbXBase@{xb::xbXBase}!SetLogFileName@{SetLogFileName}}
\index{SetLogFileName@{SetLogFileName}!xb::xbXBase@{xb::xbXBase}}
\doxysubsubsection{\texorpdfstring{SetLogFileName()}{SetLogFileName()}}
-{\footnotesize\ttfamily void xb\+::xb\+XBase\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Log\+File\+Name (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Log\+File\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
\mbox{\Hypertarget{classxb_1_1xbXBase_a666a0cb5b76ec7a9a3677d339e0c6b42}\label{classxb_1_1xbXBase_a666a0cb5b76ec7a9a3677d339e0c6b42}}
\index{xb::xbXBase@{xb::xbXBase}!SetLogSize@{SetLogSize}}
@@ -642,6 +707,21 @@ Get the multi user setting.
\\
\hline
\end{DoxyParams}
+\mbox{\Hypertarget{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}\label{classxb_1_1xbSsv_a17c229a20ef9ab4034df8f9cd657adb2}}
+\index{xb::xbXBase@{xb::xbXBase}!SetTempDirectory@{SetTempDirectory}}
+\index{SetTempDirectory@{SetTempDirectory}!xb::xbXBase@{xb::xbXBase}}
+\doxysubsubsection{\texorpdfstring{SetTempDirectory()}{SetTempDirectory()}}
+{\footnotesize\ttfamily void xb\+::xb\+Ssv\+::\+Set\+Temp\+Directory (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Temp\+Directory }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inherited]}}
+
+
+
+Set the temp directory.
+
+
+\begin{DoxyParams}{Parameters}
+{\em s\+Temp\+Directory} & Set the data direcroty. \\
+\hline
+\end{DoxyParams}
\mbox{\Hypertarget{classxb_1_1xbXBase_a0dff00b9ee3c288841e137ca01168116}\label{classxb_1_1xbXBase_a0dff00b9ee3c288841e137ca01168116}}
\index{xb::xbXBase@{xb::xbXBase}!WriteLogBytes@{WriteLogBytes}}
\index{WriteLogBytes@{WriteLogBytes}!xb::xbXBase@{xb::xbXBase}}
@@ -733,5 +813,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.\+1.\+0/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}}\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}}\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex b/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
index 94a598e..640eef3 100644
--- a/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
+++ b/docs/doxygen/latex/dir_25b94c3afce00ed38231227d8141f932.tex
@@ -1,16 +1,14 @@
-\hypertarget{dir_25b94c3afce00ed38231227d8141f932}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql Directory Reference}
-\label{dir_25b94c3afce00ed38231227d8141f932}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql Directory Reference}}
+\hypertarget{dir_25b94c3afce00ed38231227d8141f932}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql Directory Reference}
+\label{dir_25b94c3afce00ed38231227d8141f932}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
file \mbox{\hyperlink{xbalttbl_8cpp}{xbalttbl.\+cpp}}
\item
-file \mbox{\hyperlink{xbcrix_8cpp}{xbcrix.\+cpp}}
+file \mbox{\hyperlink{sql_2xbcrix_8cpp}{xbcrix.\+cpp}}
\item
file \mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}}
\item
-file \mbox{\hyperlink{xbcrtbl_8save_8cpp}{xbcrtbl.\+save.\+cpp}}
-\item
file \mbox{\hyperlink{xbdelete_8cpp}{xbdelete.\+cpp}}
\item
file \mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}}
diff --git a/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex b/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
index 4668464..a9d4086 100644
--- a/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
+++ b/docs/doxygen/latex/dir_313caf1132e152dd9b58bea13a4052ca.tex
@@ -1,5 +1,5 @@
-\hypertarget{dir_313caf1132e152dd9b58bea13a4052ca}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils Directory Reference}
-\label{dir_313caf1132e152dd9b58bea13a4052ca}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils Directory Reference}}
+\hypertarget{dir_313caf1132e152dd9b58bea13a4052ca}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils Directory Reference}
+\label{dir_313caf1132e152dd9b58bea13a4052ca}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
@@ -17,6 +17,8 @@ file \mbox{\hyperlink{xb__dumprecs_8cpp}{xb\+\_\+dumprecs.\+cpp}}
\item
file \mbox{\hyperlink{xb__execsql_8cpp}{xb\+\_\+execsql.\+cpp}}
\item
+file \mbox{\hyperlink{xb__import_8cpp}{xb\+\_\+import.\+cpp}}
+\item
file \mbox{\hyperlink{xb__pack_8cpp}{xb\+\_\+pack.\+cpp}}
\item
file \mbox{\hyperlink{xb__tblinfo_8cpp}{xb\+\_\+tblinfo.\+cpp}}
diff --git a/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex b/docs/doxygen/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex
index 935234e..134f23a 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.1.0/src Directory Reference}
-\label{dir_68267d1309a1af8e8297ef4c3efbcdba}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src Directory Reference}}
+\hypertarget{dir_68267d1309a1af8e8297ef4c3efbcdba}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src Directory Reference}
+\label{dir_68267d1309a1af8e8297ef4c3efbcdba}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src Directory Reference}}
\doxysubsection*{Directories}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex b/docs/doxygen/latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex
index 85ce0c9..7dcdd4d 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.1.0/src/core Directory Reference}
-\label{dir_aebb8dcc11953d78e620bbef0b9e2183}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core Directory Reference}}
+\hypertarget{dir_aebb8dcc11953d78e620bbef0b9e2183}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core Directory Reference}
+\label{dir_aebb8dcc11953d78e620bbef0b9e2183}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
@@ -33,6 +33,8 @@ file \mbox{\hyperlink{xbixmdx_8cpp}{xbixmdx.\+cpp}}
\item
file \mbox{\hyperlink{xbixndx_8cpp}{xbixndx.\+cpp}}
\item
+file \mbox{\hyperlink{xbixtdx_8cpp}{xbixtdx.\+cpp}}
+\item
file \mbox{\hyperlink{xblog_8cpp}{xblog.\+cpp}}
\item
file \mbox{\hyperlink{xbmemo_8cpp}{xbmemo.\+cpp}}
diff --git a/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex b/docs/doxygen/latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex
index 539439f..48ddc2a 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.1.0/src/include Directory Reference}
-\label{dir_b0856f6b0d80ccb263b2f415c91f9e17}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include Directory Reference}}
+\hypertarget{dir_b0856f6b0d80ccb263b2f415c91f9e17}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include Directory Reference}
+\label{dir_b0856f6b0d80ccb263b2f415c91f9e17}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
@@ -9,6 +9,8 @@ file \mbox{\hyperlink{xbbcd_8h}{xbbcd.\+h}}
\item
file \mbox{\hyperlink{xbblkread_8h}{xbblkread.\+h}}
\item
+file \mbox{\hyperlink{include_2xbcrix_8cpp}{xbcrix.\+cpp}}
+\item
file \mbox{\hyperlink{xbdate_8h}{xbdate.\+h}}
\item
file \mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}
diff --git a/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex b/docs/doxygen/latex/dir_d93a1d4020dea85bb71b237545b5e722.tex
index 1fceb7c..5534e90 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.1.0/src/tests Directory Reference}
-\label{dir_d93a1d4020dea85bb71b237545b5e722}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests Directory Reference}}
+\hypertarget{dir_d93a1d4020dea85bb71b237545b5e722}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests Directory Reference}
+\label{dir_d93a1d4020dea85bb71b237545b5e722}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
@@ -47,6 +47,8 @@ file \mbox{\hyperlink{xb__test__string_8cpp}{xb\+\_\+test\+\_\+string.\+cpp}}
\item
file \mbox{\hyperlink{xb__test__tblmgr_8cpp}{xb\+\_\+test\+\_\+tblmgr.\+cpp}}
\item
+file \mbox{\hyperlink{xb__test__tdx_8cpp}{xb\+\_\+test\+\_\+tdx.\+cpp}}
+\item
file \mbox{\hyperlink{xb__test__uda_8cpp}{xb\+\_\+test\+\_\+uda.\+cpp}}
\item
file \mbox{\hyperlink{xb__test__xbase_8cpp}{xb\+\_\+test\+\_\+xbase.\+cpp}}
diff --git a/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex b/docs/doxygen/latex/dir_e931c1a3f0014e624d0645a271726ad2.tex
index 6d87543..f1faa43 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.1.0/src/examples Directory Reference}
-\label{dir_e931c1a3f0014e624d0645a271726ad2}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples Directory Reference}}
+\hypertarget{dir_e931c1a3f0014e624d0645a271726ad2}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples Directory Reference}
+\label{dir_e931c1a3f0014e624d0645a271726ad2}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples Directory Reference@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples Directory Reference}}
\doxysubsection*{Files}
\begin{DoxyCompactItemize}
\item
@@ -7,6 +7,8 @@ file \mbox{\hyperlink{xb__ex__date_8cpp}{xb\+\_\+ex\+\_\+date.\+cpp}}
\item
file \mbox{\hyperlink{xb__ex__expression_8cpp}{xb\+\_\+ex\+\_\+expression.\+cpp}}
\item
+file \mbox{\hyperlink{xb__ex__log_8cpp}{xb\+\_\+ex\+\_\+log.\+cpp}}
+\item
file \mbox{\hyperlink{xb__ex__sql_8cpp}{xb\+\_\+ex\+\_\+sql.\+cpp}}
\item
file \mbox{\hyperlink{xb__ex__ssv_8cpp}{xb\+\_\+ex\+\_\+ssv.\+cpp}}
diff --git a/docs/doxygen/latex/files.tex b/docs/doxygen/latex/files.tex
index aae1da4..cfb7be3 100644
--- a/docs/doxygen/latex/files.tex
+++ b/docs/doxygen/latex/files.tex
@@ -1,107 +1,111 @@
\doxysection{File List}
Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbbcd_8cpp}{xbbcd.\+cpp}} }{\pageref{xbbcd_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbblockread_8cpp}{xbblockread.\+cpp}} }{\pageref{xbblockread_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}} }{\pageref{xbdate_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}} }{\pageref{xbdbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdbf3_8cpp}{xbdbf3.\+cpp}} }{\pageref{xbdbf3_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbdbf4_8cpp}{xbdbf4.\+cpp}} }{\pageref{xbdbf4_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbexp_8cpp}{xbexp.\+cpp}} }{\pageref{xbexp_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbexpnode_8cpp}{xbexpnode.\+cpp}} }{\pageref{xbexpnode_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}} }{\pageref{xbfields_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}} }{\pageref{xbfile_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfilter_8cpp}{xbfilter.\+cpp}} }{\pageref{xbfilter_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbfuncs_8cpp}{xbfuncs.\+cpp}} }{\pageref{xbfuncs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbixbase_8cpp}{xbixbase.\+cpp}} }{\pageref{xbixbase_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbixmdx_8cpp}{xbixmdx.\+cpp}} }{\pageref{xbixmdx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbixndx_8cpp}{xbixndx.\+cpp}} }{\pageref{xbixndx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xblog_8cpp}{xblog.\+cpp}} }{\pageref{xblog_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbmemo_8cpp}{xbmemo.\+cpp}} }{\pageref{xbmemo_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbmemo3_8cpp}{xbmemo3.\+cpp}} }{\pageref{xbmemo3_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbmemo4_8cpp}{xbmemo4.\+cpp}} }{\pageref{xbmemo4_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}} }{\pageref{xbssv_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}} }{\pageref{xbstring_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbtag_8cpp}{xbtag.\+cpp}} }{\pageref{xbtag_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}} }{\pageref{xbtblmgr_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbuda_8cpp}{xbuda.\+cpp}} }{\pageref{xbuda_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}} }{\pageref{xbxbase_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__date_8cpp}{xb\+\_\+ex\+\_\+date.\+cpp}} }{\pageref{xb__ex__date_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__expression_8cpp}{xb\+\_\+ex\+\_\+expression.\+cpp}} }{\pageref{xb__ex__expression_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__sql_8cpp}{xb\+\_\+ex\+\_\+sql.\+cpp}} }{\pageref{xb__ex__sql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__ssv_8cpp}{xb\+\_\+ex\+\_\+ssv.\+cpp}} }{\pageref{xb__ex__ssv_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__string_8cpp}{xb\+\_\+ex\+\_\+string.\+cpp}} }{\pageref{xb__ex__string_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v3__create__dbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__v3__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v3__upd__dbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v4__create__dbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/examples/\mbox{\hyperlink{xb__ex__v4__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v4__upd__dbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbase_8h}{xbase.\+h}} }{\pageref{xbase_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbbcd_8h}{xbbcd.\+h}} }{\pageref{xbbcd_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbblkread_8h}{xbblkread.\+h}} }{\pageref{xbblkread_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}} }{\pageref{xbdate_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}} }{\pageref{xbdbf_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbexp_8h}{xbexp.\+h}} }{\pageref{xbexp_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.\+h}} }{\pageref{xbexpnode_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}} }{\pageref{xbfile_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbfilter_8h}{xbfilter.\+h}} }{\pageref{xbfilter_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbindex_8h}{xbindex.\+h}} }{\pageref{xbindex_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xblnklst_8h}{xblnklst.\+h}} }{\pageref{xblnklst_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.\+h}} }{\pageref{xblnklstord_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xblnknod_8h}{xblnknod.\+h}} }{\pageref{xblnknod_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xblog_8h}{xblog.\+h}} }{\pageref{xblog_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbmemo_8h}{xbmemo.\+h}} }{\pageref{xbmemo_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbretcod_8h}{xbretcod.\+h}} }{\pageref{xbretcod_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbsql_8h}{xbsql.\+h}} }{\pageref{xbsql_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}} }{\pageref{xbssv_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}} }{\pageref{xbstring_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbtag_8h}{xbtag.\+h}} }{\pageref{xbtag_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}} }{\pageref{xbtblmgr_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbtypes_8h}{xbtypes.\+h}} }{\pageref{xbtypes_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbuda_8h}{xbuda.\+h}} }{\pageref{xbuda_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}} }{\pageref{xbxbase_8h}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbalttbl_8cpp}{xbalttbl.\+cpp}} }{\pageref{xbalttbl_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbcrix_8cpp}{xbcrix.\+cpp}} }{\pageref{xbcrix_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}} }{\pageref{xbcrtbl_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbcrtbl_8save_8cpp}{xbcrtbl.\+save.\+cpp}} }{\pageref{xbcrtbl_8save_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbdelete_8cpp}{xbdelete.\+cpp}} }{\pageref{xbdelete_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}} }{\pageref{xbdrpix_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbdrptbl_8cpp}{xbdrptbl.\+cpp}} }{\pageref{xbdrptbl_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbinsert_8cpp}{xbinsert.\+cpp}} }{\pageref{xbinsert_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbselect_8cpp}{xbselect.\+cpp}} }{\pageref{xbselect_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbset_8cpp}{xbset.\+cpp}} }{\pageref{xbset_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbsql_8cpp}{xbsql.\+cpp}} }{\pageref{xbsql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/sql/\mbox{\hyperlink{xbstmt_8cpp}{xbstmt.\+cpp}} }{\pageref{xbstmt_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{tstfuncs_8cpp}{tstfuncs.\+cpp}} }{\pageref{tstfuncs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__bcd_8cpp}{xb\+\_\+test\+\_\+bcd.\+cpp}} }{\pageref{xb__test__bcd_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__blockread_8cpp}{xb\+\_\+test\+\_\+blockread.\+cpp}} }{\pageref{xb__test__blockread_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__date_8cpp}{xb\+\_\+test\+\_\+date.\+cpp}} }{\pageref{xb__test__date_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__dbf__v3__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.\+cpp}} }{\pageref{xb__test__dbf__v3__memos_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__dbf__v3__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.\+cpp}} }{\pageref{xb__test__dbf__v3__nomemos_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__dbf__v4__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.\+cpp}} }{\pageref{xb__test__dbf__v4__memos_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__dbf__v4__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.\+cpp}} }{\pageref{xb__test__dbf__v4__nomemos_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__expnode_8cpp}{xb\+\_\+test\+\_\+expnode.\+cpp}} }{\pageref{xb__test__expnode_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__expression_8cpp}{xb\+\_\+test\+\_\+expression.\+cpp}} }{\pageref{xb__test__expression_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__file_8cpp}{xb\+\_\+test\+\_\+file.\+cpp}} }{\pageref{xb__test__file_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__filter_8cpp}{xb\+\_\+test\+\_\+filter.\+cpp}} }{\pageref{xb__test__filter_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__funcs_8cpp}{xb\+\_\+test\+\_\+funcs.\+cpp}} }{\pageref{xb__test__funcs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__linklist_8cpp}{xb\+\_\+test\+\_\+linklist.\+cpp}} }{\pageref{xb__test__linklist_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__lock_8cpp}{xb\+\_\+test\+\_\+lock.\+cpp}} }{\pageref{xb__test__lock_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__lock2_8cpp}{xb\+\_\+test\+\_\+lock2.\+cpp}} }{\pageref{xb__test__lock2_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__log_8cpp}{xb\+\_\+test\+\_\+log.\+cpp}} }{\pageref{xb__test__log_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__mdx_8cpp}{xb\+\_\+test\+\_\+mdx.\+cpp}} }{\pageref{xb__test__mdx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__ndx_8cpp}{xb\+\_\+test\+\_\+ndx.\+cpp}} }{\pageref{xb__test__ndx_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__sql_8cpp}{xb\+\_\+test\+\_\+sql.\+cpp}} }{\pageref{xb__test__sql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__string_8cpp}{xb\+\_\+test\+\_\+string.\+cpp}} }{\pageref{xb__test__string_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__tblmgr_8cpp}{xb\+\_\+test\+\_\+tblmgr.\+cpp}} }{\pageref{xb__test__tblmgr_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__uda_8cpp}{xb\+\_\+test\+\_\+uda.\+cpp}} }{\pageref{xb__test__uda_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/tests/\mbox{\hyperlink{xb__test__xbase_8cpp}{xb\+\_\+test\+\_\+xbase.\+cpp}} }{\pageref{xb__test__xbase_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__cfg__check_8cpp}{xb\+\_\+cfg\+\_\+check.\+cpp}} }{\pageref{xb__cfg__check_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__copydbf_8cpp}{xb\+\_\+copydbf.\+cpp}} }{\pageref{xb__copydbf_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__dbfutil_8cpp}{xb\+\_\+dbfutil.\+cpp}} }{\pageref{xb__dbfutil_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__deletall_8cpp}{xb\+\_\+deletall.\+cpp}} }{\pageref{xb__deletall_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__dumpdbt_8cpp}{xb\+\_\+dumpdbt.\+cpp}} }{\pageref{xb__dumpdbt_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__dumprecs_8cpp}{xb\+\_\+dumprecs.\+cpp}} }{\pageref{xb__dumprecs_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__execsql_8cpp}{xb\+\_\+execsql.\+cpp}} }{\pageref{xb__execsql_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__pack_8cpp}{xb\+\_\+pack.\+cpp}} }{\pageref{xb__pack_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__tblinfo_8cpp}{xb\+\_\+tblinfo.\+cpp}} }{\pageref{xb__tblinfo_8cpp}}{}
-\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/utils/\mbox{\hyperlink{xb__undelall_8cpp}{xb\+\_\+undelall.\+cpp}} }{\pageref{xb__undelall_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbbcd_8cpp}{xbbcd.\+cpp}} }{\pageref{xbbcd_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbblockread_8cpp}{xbblockread.\+cpp}} }{\pageref{xbblockread_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdate_8cpp}{xbdate.\+cpp}} }{\pageref{xbdate_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdbf_8cpp}{xbdbf.\+cpp}} }{\pageref{xbdbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdbf3_8cpp}{xbdbf3.\+cpp}} }{\pageref{xbdbf3_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbdbf4_8cpp}{xbdbf4.\+cpp}} }{\pageref{xbdbf4_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbexp_8cpp}{xbexp.\+cpp}} }{\pageref{xbexp_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbexpnode_8cpp}{xbexpnode.\+cpp}} }{\pageref{xbexpnode_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfields_8cpp}{xbfields.\+cpp}} }{\pageref{xbfields_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfile_8cpp}{xbfile.\+cpp}} }{\pageref{xbfile_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfilter_8cpp}{xbfilter.\+cpp}} }{\pageref{xbfilter_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbfuncs_8cpp}{xbfuncs.\+cpp}} }{\pageref{xbfuncs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbixbase_8cpp}{xbixbase.\+cpp}} }{\pageref{xbixbase_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbixmdx_8cpp}{xbixmdx.\+cpp}} }{\pageref{xbixmdx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbixndx_8cpp}{xbixndx.\+cpp}} }{\pageref{xbixndx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbixtdx_8cpp}{xbixtdx.\+cpp}} }{\pageref{xbixtdx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xblog_8cpp}{xblog.\+cpp}} }{\pageref{xblog_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbmemo_8cpp}{xbmemo.\+cpp}} }{\pageref{xbmemo_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbmemo3_8cpp}{xbmemo3.\+cpp}} }{\pageref{xbmemo3_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbmemo4_8cpp}{xbmemo4.\+cpp}} }{\pageref{xbmemo4_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbssv_8cpp}{xbssv.\+cpp}} }{\pageref{xbssv_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbstring_8cpp}{xbstring.\+cpp}} }{\pageref{xbstring_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbtag_8cpp}{xbtag.\+cpp}} }{\pageref{xbtag_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbtblmgr_8cpp}{xbtblmgr.\+cpp}} }{\pageref{xbtblmgr_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbuda_8cpp}{xbuda.\+cpp}} }{\pageref{xbuda_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/core/\mbox{\hyperlink{xbxbase_8cpp}{xbxbase.\+cpp}} }{\pageref{xbxbase_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__date_8cpp}{xb\+\_\+ex\+\_\+date.\+cpp}} }{\pageref{xb__ex__date_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__expression_8cpp}{xb\+\_\+ex\+\_\+expression.\+cpp}} }{\pageref{xb__ex__expression_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__log_8cpp}{xb\+\_\+ex\+\_\+log.\+cpp}} }{\pageref{xb__ex__log_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__sql_8cpp}{xb\+\_\+ex\+\_\+sql.\+cpp}} }{\pageref{xb__ex__sql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__ssv_8cpp}{xb\+\_\+ex\+\_\+ssv.\+cpp}} }{\pageref{xb__ex__ssv_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__string_8cpp}{xb\+\_\+ex\+\_\+string.\+cpp}} }{\pageref{xb__ex__string_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__v3__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v3__create__dbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__v3__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v3__upd__dbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__v4__create__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v4__create__dbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/examples/\mbox{\hyperlink{xb__ex__v4__upd__dbf_8cpp}{xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.\+cpp}} }{\pageref{xb__ex__v4__upd__dbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbase_8h}{xbase.\+h}} }{\pageref{xbase_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbbcd_8h}{xbbcd.\+h}} }{\pageref{xbbcd_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbblkread_8h}{xbblkread.\+h}} }{\pageref{xbblkread_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{include_2xbcrix_8cpp}{xbcrix.\+cpp}} }{\pageref{include_2xbcrix_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbdate_8h}{xbdate.\+h}} }{\pageref{xbdate_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}} }{\pageref{xbdbf_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbexp_8h}{xbexp.\+h}} }{\pageref{xbexp_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbexpnode_8h}{xbexpnode.\+h}} }{\pageref{xbexpnode_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbfile_8h}{xbfile.\+h}} }{\pageref{xbfile_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbfilter_8h}{xbfilter.\+h}} }{\pageref{xbfilter_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbindex_8h}{xbindex.\+h}} }{\pageref{xbindex_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xblnklst_8h}{xblnklst.\+h}} }{\pageref{xblnklst_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xblnklstord_8h}{xblnklstord.\+h}} }{\pageref{xblnklstord_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xblnknod_8h}{xblnknod.\+h}} }{\pageref{xblnknod_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xblog_8h}{xblog.\+h}} }{\pageref{xblog_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbmemo_8h}{xbmemo.\+h}} }{\pageref{xbmemo_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbretcod_8h}{xbretcod.\+h}} }{\pageref{xbretcod_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbsql_8h}{xbsql.\+h}} }{\pageref{xbsql_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbssv_8h}{xbssv.\+h}} }{\pageref{xbssv_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbstring_8h}{xbstring.\+h}} }{\pageref{xbstring_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbtag_8h}{xbtag.\+h}} }{\pageref{xbtag_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}} }{\pageref{xbtblmgr_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbtypes_8h}{xbtypes.\+h}} }{\pageref{xbtypes_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbuda_8h}{xbuda.\+h}} }{\pageref{xbuda_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/include/\mbox{\hyperlink{xbxbase_8h}{xbxbase.\+h}} }{\pageref{xbxbase_8h}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbalttbl_8cpp}{xbalttbl.\+cpp}} }{\pageref{xbalttbl_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{sql_2xbcrix_8cpp}{xbcrix.\+cpp}} }{\pageref{sql_2xbcrix_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbcrtbl_8cpp}{xbcrtbl.\+cpp}} }{\pageref{xbcrtbl_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbdelete_8cpp}{xbdelete.\+cpp}} }{\pageref{xbdelete_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbdrpix_8cpp}{xbdrpix.\+cpp}} }{\pageref{xbdrpix_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbdrptbl_8cpp}{xbdrptbl.\+cpp}} }{\pageref{xbdrptbl_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbinsert_8cpp}{xbinsert.\+cpp}} }{\pageref{xbinsert_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbselect_8cpp}{xbselect.\+cpp}} }{\pageref{xbselect_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbset_8cpp}{xbset.\+cpp}} }{\pageref{xbset_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbsql_8cpp}{xbsql.\+cpp}} }{\pageref{xbsql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/sql/\mbox{\hyperlink{xbstmt_8cpp}{xbstmt.\+cpp}} }{\pageref{xbstmt_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{tstfuncs_8cpp}{tstfuncs.\+cpp}} }{\pageref{tstfuncs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__bcd_8cpp}{xb\+\_\+test\+\_\+bcd.\+cpp}} }{\pageref{xb__test__bcd_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__blockread_8cpp}{xb\+\_\+test\+\_\+blockread.\+cpp}} }{\pageref{xb__test__blockread_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__date_8cpp}{xb\+\_\+test\+\_\+date.\+cpp}} }{\pageref{xb__test__date_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__dbf__v3__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.\+cpp}} }{\pageref{xb__test__dbf__v3__memos_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__dbf__v3__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.\+cpp}} }{\pageref{xb__test__dbf__v3__nomemos_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__dbf__v4__memos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.\+cpp}} }{\pageref{xb__test__dbf__v4__memos_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__dbf__v4__nomemos_8cpp}{xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.\+cpp}} }{\pageref{xb__test__dbf__v4__nomemos_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__expnode_8cpp}{xb\+\_\+test\+\_\+expnode.\+cpp}} }{\pageref{xb__test__expnode_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__expression_8cpp}{xb\+\_\+test\+\_\+expression.\+cpp}} }{\pageref{xb__test__expression_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__file_8cpp}{xb\+\_\+test\+\_\+file.\+cpp}} }{\pageref{xb__test__file_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__filter_8cpp}{xb\+\_\+test\+\_\+filter.\+cpp}} }{\pageref{xb__test__filter_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__funcs_8cpp}{xb\+\_\+test\+\_\+funcs.\+cpp}} }{\pageref{xb__test__funcs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__linklist_8cpp}{xb\+\_\+test\+\_\+linklist.\+cpp}} }{\pageref{xb__test__linklist_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__lock_8cpp}{xb\+\_\+test\+\_\+lock.\+cpp}} }{\pageref{xb__test__lock_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__lock2_8cpp}{xb\+\_\+test\+\_\+lock2.\+cpp}} }{\pageref{xb__test__lock2_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__log_8cpp}{xb\+\_\+test\+\_\+log.\+cpp}} }{\pageref{xb__test__log_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__mdx_8cpp}{xb\+\_\+test\+\_\+mdx.\+cpp}} }{\pageref{xb__test__mdx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__ndx_8cpp}{xb\+\_\+test\+\_\+ndx.\+cpp}} }{\pageref{xb__test__ndx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__sql_8cpp}{xb\+\_\+test\+\_\+sql.\+cpp}} }{\pageref{xb__test__sql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__string_8cpp}{xb\+\_\+test\+\_\+string.\+cpp}} }{\pageref{xb__test__string_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__tblmgr_8cpp}{xb\+\_\+test\+\_\+tblmgr.\+cpp}} }{\pageref{xb__test__tblmgr_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__tdx_8cpp}{xb\+\_\+test\+\_\+tdx.\+cpp}} }{\pageref{xb__test__tdx_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__uda_8cpp}{xb\+\_\+test\+\_\+uda.\+cpp}} }{\pageref{xb__test__uda_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/tests/\mbox{\hyperlink{xb__test__xbase_8cpp}{xb\+\_\+test\+\_\+xbase.\+cpp}} }{\pageref{xb__test__xbase_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__cfg__check_8cpp}{xb\+\_\+cfg\+\_\+check.\+cpp}} }{\pageref{xb__cfg__check_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__copydbf_8cpp}{xb\+\_\+copydbf.\+cpp}} }{\pageref{xb__copydbf_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__dbfutil_8cpp}{xb\+\_\+dbfutil.\+cpp}} }{\pageref{xb__dbfutil_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__deletall_8cpp}{xb\+\_\+deletall.\+cpp}} }{\pageref{xb__deletall_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__dumpdbt_8cpp}{xb\+\_\+dumpdbt.\+cpp}} }{\pageref{xb__dumpdbt_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__dumprecs_8cpp}{xb\+\_\+dumprecs.\+cpp}} }{\pageref{xb__dumprecs_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__execsql_8cpp}{xb\+\_\+execsql.\+cpp}} }{\pageref{xb__execsql_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__import_8cpp}{xb\+\_\+import.\+cpp}} }{\pageref{xb__import_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__pack_8cpp}{xb\+\_\+pack.\+cpp}} }{\pageref{xb__pack_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__tblinfo_8cpp}{xb\+\_\+tblinfo.\+cpp}} }{\pageref{xb__tblinfo_8cpp}}{}
+\item\contentsline{section}{/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__undelall_8cpp}{xb\+\_\+undelall.\+cpp}} }{\pageref{xb__undelall_8cpp}}{}
\end{DoxyCompactList}
diff --git a/docs/doxygen/latex/hierarchy.tex b/docs/doxygen/latex/hierarchy.tex
index 01c2aa7..3e597ac 100644
--- a/docs/doxygen/latex/hierarchy.tex
+++ b/docs/doxygen/latex/hierarchy.tex
@@ -1,5 +1,6 @@
\doxysection{Class Hierarchy}
This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList}
+\item \contentsline{section}{s\+Fld\+Map}{\pageref{structsFldMap}}{}
\item \contentsline{section}{xb\+::xb\+Schema}{\pageref{structxb_1_1xbSchema}}{}
\item \contentsline{section}{xb\+::xb\+Ssv}{\pageref{classxb_1_1xbSsv}}{}
\begin{DoxyCompactList}
diff --git a/docs/doxygen/latex/include_2xbcrix_8cpp.tex b/docs/doxygen/latex/include_2xbcrix_8cpp.tex
new file mode 100644
index 0000000..80208b7
--- /dev/null
+++ b/docs/doxygen/latex/include_2xbcrix_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{include_2xbcrix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbcrix.cpp File Reference}
+\label{include_2xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbcrix.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/refman.tex b/docs/doxygen/latex/refman.tex
index 541e8e0..76e319a 100644
--- a/docs/doxygen/latex/refman.tex
+++ b/docs/doxygen/latex/refman.tex
@@ -186,6 +186,7 @@
\chapter{Namespace Documentation}
\input{namespacexb}
\chapter{Data Structure Documentation}
+\input{structsFldMap}
\input{classxb_1_1xbDate}
\input{classxb_1_1xbDbf}
\input{classxb_1_1xbFile}
@@ -211,6 +212,7 @@
\input{xbixbase_8cpp}
\input{xbixmdx_8cpp}
\input{xbixndx_8cpp}
+\input{xbixtdx_8cpp}
\input{xblog_8cpp}
\input{xbmemo_8cpp}
\input{xbmemo3_8cpp}
@@ -223,6 +225,7 @@
\input{xbxbase_8cpp}
\input{xb__ex__date_8cpp}
\input{xb__ex__expression_8cpp}
+\input{xb__ex__log_8cpp}
\input{xb__ex__sql_8cpp}
\input{xb__ex__ssv_8cpp}
\input{xb__ex__string_8cpp}
@@ -236,6 +239,8 @@
\input{xbbcd_8h_source}
\input{xbblkread_8h}
\input{xbblkread_8h_source}
+\input{include_2xbcrix_8cpp}
+\input{sql_2xbcrix_8cpp}
\input{xbdate_8h}
\input{xbdate_8h_source}
\input{xbdbf_8h}
@@ -279,9 +284,7 @@
\input{xbxbase_8h}
\input{xbxbase_8h_source}
\input{xbalttbl_8cpp}
-\input{xbcrix_8cpp}
\input{xbcrtbl_8cpp}
-\input{xbcrtbl_8save_8cpp}
\input{xbdelete_8cpp}
\input{xbdrpix_8cpp}
\input{xbdrptbl_8cpp}
@@ -312,6 +315,7 @@
\input{xb__test__sql_8cpp}
\input{xb__test__string_8cpp}
\input{xb__test__tblmgr_8cpp}
+\input{xb__test__tdx_8cpp}
\input{xb__test__uda_8cpp}
\input{xb__test__xbase_8cpp}
\input{xb__cfg__check_8cpp}
@@ -321,6 +325,7 @@
\input{xb__dumpdbt_8cpp}
\input{xb__dumprecs_8cpp}
\input{xb__execsql_8cpp}
+\input{xb__import_8cpp}
\input{xb__pack_8cpp}
\input{xb__tblinfo_8cpp}
\input{xb__undelall_8cpp}
diff --git a/docs/doxygen/latex/sql_2xbcrix_8cpp.tex b/docs/doxygen/latex/sql_2xbcrix_8cpp.tex
new file mode 100644
index 0000000..da0bd97
--- /dev/null
+++ b/docs/doxygen/latex/sql_2xbcrix_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{sql_2xbcrix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrix.cpp File Reference}
+\label{sql_2xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrix.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/structsFldMap.tex b/docs/doxygen/latex/structsFldMap.tex
new file mode 100644
index 0000000..84b0861
--- /dev/null
+++ b/docs/doxygen/latex/structsFldMap.tex
@@ -0,0 +1,45 @@
+\hypertarget{structsFldMap}{}\doxysection{s\+Fld\+Map Struct Reference}
+\label{structsFldMap}\index{sFldMap@{sFldMap}}
+\doxysubsection*{Data Fields}
+\begin{DoxyCompactItemize}
+\item
+xb\+UInt32 \mbox{\hyperlink{structsFldMap_a02facce45c24ebecc13975c17fd52b8f}{i\+Rec\+Pos}}
+\item
+xb\+Int16 \mbox{\hyperlink{structsFldMap_a42eb801a85d8b60f06c4fe1be13ca723}{i\+Fld\+No}}
+\item
+char \mbox{\hyperlink{structsFldMap_af89b26b2d4bc6e26c597f8c48b97b1a3}{c\+Fld\+Type}}
+\item
+\mbox{\hyperlink{structsFldMap}{s\+Fld\+Map}} $\ast$ \mbox{\hyperlink{structsFldMap_a16eaff8fc09adc3faf453bfaa0d3baaa}{next}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Field Documentation}
+\mbox{\Hypertarget{structsFldMap_af89b26b2d4bc6e26c597f8c48b97b1a3}\label{structsFldMap_af89b26b2d4bc6e26c597f8c48b97b1a3}}
+\index{sFldMap@{sFldMap}!cFldType@{cFldType}}
+\index{cFldType@{cFldType}!sFldMap@{sFldMap}}
+\doxysubsubsection{\texorpdfstring{cFldType}{cFldType}}
+{\footnotesize\ttfamily char s\+Fld\+Map\+::c\+Fld\+Type}
+
+\mbox{\Hypertarget{structsFldMap_a42eb801a85d8b60f06c4fe1be13ca723}\label{structsFldMap_a42eb801a85d8b60f06c4fe1be13ca723}}
+\index{sFldMap@{sFldMap}!iFldNo@{iFldNo}}
+\index{iFldNo@{iFldNo}!sFldMap@{sFldMap}}
+\doxysubsubsection{\texorpdfstring{iFldNo}{iFldNo}}
+{\footnotesize\ttfamily xb\+Int16 s\+Fld\+Map\+::i\+Fld\+No}
+
+\mbox{\Hypertarget{structsFldMap_a02facce45c24ebecc13975c17fd52b8f}\label{structsFldMap_a02facce45c24ebecc13975c17fd52b8f}}
+\index{sFldMap@{sFldMap}!iRecPos@{iRecPos}}
+\index{iRecPos@{iRecPos}!sFldMap@{sFldMap}}
+\doxysubsubsection{\texorpdfstring{iRecPos}{iRecPos}}
+{\footnotesize\ttfamily xb\+UInt32 s\+Fld\+Map\+::i\+Rec\+Pos}
+
+\mbox{\Hypertarget{structsFldMap_a16eaff8fc09adc3faf453bfaa0d3baaa}\label{structsFldMap_a16eaff8fc09adc3faf453bfaa0d3baaa}}
+\index{sFldMap@{sFldMap}!next@{next}}
+\index{next@{next}!sFldMap@{sFldMap}}
+\doxysubsubsection{\texorpdfstring{next}{next}}
+{\footnotesize\ttfamily \mbox{\hyperlink{structsFldMap}{s\+Fld\+Map}}$\ast$ s\+Fld\+Map\+::next}
+
+
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/src/utils/\mbox{\hyperlink{xb__import_8cpp}{xb\+\_\+import.\+cpp}}\end{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/structxb_1_1xbSchema.tex b/docs/doxygen/latex/structxb_1_1xbSchema.tex
index dd920fc..74cc2bc 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.\+1.\+0/src/include/\mbox{\hyperlink{xbdbf_8h}{xbdbf.\+h}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/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 795d36e..5984665 100644
--- a/docs/doxygen/latex/structxb_1_1xbTblList.tex
+++ b/docs/doxygen/latex/structxb_1_1xbTblList.tex
@@ -54,4 +54,4 @@
The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
\item
-/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+0/src/include/\mbox{\hyperlink{xbtblmgr_8h}{xbtblmgr.\+h}}\end{DoxyCompactItemize}
+/mnt/1\+Tdata/xbase/xbase64-\/4.\+1.\+4/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 276c1fe..86ee7de 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.1.0/src/tests/tstfuncs.cpp File Reference}
-\label{tstfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/tstfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/tstfuncs.cpp}}
+\hypertarget{tstfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/tstfuncs.cpp File Reference}
+\label{tstfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/tstfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/tstfuncs.cpp}}
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xb__cfg__check_8cpp.tex b/docs/doxygen/latex/xb__cfg__check_8cpp.tex
index edcc405..89a9502 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.1.0/src/utils/xb\+\_\+cfg\+\_\+check.cpp File Reference}
-\label{xb__cfg__check_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_cfg\_check.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_cfg\_check.cpp}}
+\hypertarget{xb__cfg__check_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+cfg\+\_\+check.cpp File Reference}
+\label{xb__cfg__check_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_cfg\_check.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_cfg\_check.cpp}}
{\ttfamily \#include $<$stdio.\+h$>$}\newline
{\ttfamily \#include $<$stdlib.\+h$>$}\newline
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xb__copydbf_8cpp.tex b/docs/doxygen/latex/xb__copydbf_8cpp.tex
index da6fb80..f16df05 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.1.0/src/utils/xb\+\_\+copydbf.cpp File Reference}
-\label{xb__copydbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_copydbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_copydbf.cpp}}
+\hypertarget{xb__copydbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+copydbf.cpp File Reference}
+\label{xb__copydbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_copydbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_copydbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__dbfutil_8cpp.tex b/docs/doxygen/latex/xb__dbfutil_8cpp.tex
index a7f0538..1d05027 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.1.0/src/utils/xb\+\_\+dbfutil.cpp File Reference}
-\label{xb__dbfutil_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dbfutil.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dbfutil.cpp}}
+\hypertarget{xb__dbfutil_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+dbfutil.cpp File Reference}
+\label{xb__dbfutil_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dbfutil.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dbfutil.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__deletall_8cpp.tex b/docs/doxygen/latex/xb__deletall_8cpp.tex
index fce1850..4cdfbc0 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.1.0/src/utils/xb\+\_\+deletall.cpp File Reference}
-\label{xb__deletall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_deletall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_deletall.cpp}}
+\hypertarget{xb__deletall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+deletall.cpp File Reference}
+\label{xb__deletall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_deletall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_deletall.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__dumpdbt_8cpp.tex b/docs/doxygen/latex/xb__dumpdbt_8cpp.tex
index 4d46b1d..391ee23 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.1.0/src/utils/xb\+\_\+dumpdbt.cpp File Reference}
-\label{xb__dumpdbt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dumpdbt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dumpdbt.cpp}}
+\hypertarget{xb__dumpdbt_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+dumpdbt.cpp File Reference}
+\label{xb__dumpdbt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dumpdbt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dumpdbt.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__dumprecs_8cpp.tex b/docs/doxygen/latex/xb__dumprecs_8cpp.tex
index a0ef3d8..eb00bb6 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.1.0/src/utils/xb\+\_\+dumprecs.cpp File Reference}
-\label{xb__dumprecs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dumprecs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_dumprecs.cpp}}
+\hypertarget{xb__dumprecs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+dumprecs.cpp File Reference}
+\label{xb__dumprecs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dumprecs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_dumprecs.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__date_8cpp.tex b/docs/doxygen/latex/xb__ex__date_8cpp.tex
index ed93914..4aa2f8f 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.1.0/src/examples/xb\+\_\+ex\+\_\+date.cpp File Reference}
-\label{xb__ex__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_date.cpp}}
+\hypertarget{xb__ex__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+date.cpp File Reference}
+\label{xb__ex__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_date.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__expression_8cpp.tex b/docs/doxygen/latex/xb__ex__expression_8cpp.tex
index 3b0cb70..403730f 100644
--- a/docs/doxygen/latex/xb__ex__expression_8cpp.tex
+++ b/docs/doxygen/latex/xb__ex__expression_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__ex__expression_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+expression.cpp File Reference}
-\label{xb__ex__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_expression.cpp}}
+\hypertarget{xb__ex__expression_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+expression.cpp File Reference}
+\label{xb__ex__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_expression.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__log_8cpp.tex b/docs/doxygen/latex/xb__ex__log_8cpp.tex
new file mode 100644
index 0000000..2309d5b
--- /dev/null
+++ b/docs/doxygen/latex/xb__ex__log_8cpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{xb__ex__log_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+log.cpp File Reference}
+\label{xb__ex__log_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_log.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_log.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__ex__log_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__ex__log_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__ex__log_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_ex\_log.cpp@{xb\_ex\_log.cpp}!main@{main}}
+\index{main@{main}!xb\_ex\_log.cpp@{xb\_ex\_log.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/docs/doxygen/latex/xb__ex__sql_8cpp.tex b/docs/doxygen/latex/xb__ex__sql_8cpp.tex
index 256aedc..8d616c1 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.1.0/src/examples/xb\+\_\+ex\+\_\+sql.cpp File Reference}
-\label{xb__ex__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_sql.cpp}}
+\hypertarget{xb__ex__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+sql.cpp File Reference}
+\label{xb__ex__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_sql.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__ex__ssv_8cpp.tex b/docs/doxygen/latex/xb__ex__ssv_8cpp.tex
index badcd47..8afd63a 100644
--- a/docs/doxygen/latex/xb__ex__ssv_8cpp.tex
+++ b/docs/doxygen/latex/xb__ex__ssv_8cpp.tex
@@ -1,17 +1,17 @@
-\hypertarget{xb__ex__ssv_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\+\_\+ex\+\_\+ssv.cpp File Reference}
-\label{xb__ex__ssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_ssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_ssv.cpp}}
+\hypertarget{xb__ex__ssv_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+ssv.cpp File Reference}
+\label{xb__ex__ssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_ssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_ssv.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item
-int \mbox{\hyperlink{xb__ex__ssv_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
+int \mbox{\hyperlink{xb__ex__ssv_8cpp_a6438fb6826a353355708e08b4395d689}{main}} (int, char $\ast$$\ast$av)
\end{DoxyCompactItemize}
\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__ex__ssv_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{xb__ex__ssv_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
+\mbox{\Hypertarget{xb__ex__ssv_8cpp_a6438fb6826a353355708e08b4395d689}\label{xb__ex__ssv_8cpp_a6438fb6826a353355708e08b4395d689}}
\index{xb\_ex\_ssv.cpp@{xb\_ex\_ssv.cpp}!main@{main}}
\index{main@{main}!xb\_ex\_ssv.cpp@{xb\_ex\_ssv.cpp}}
\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
diff --git a/docs/doxygen/latex/xb__ex__string_8cpp.tex b/docs/doxygen/latex/xb__ex__string_8cpp.tex
index d6d7d33..1e9b704 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.1.0/src/examples/xb\+\_\+ex\+\_\+string.cpp File Reference}
-\label{xb__ex__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_string.cpp}}
+\hypertarget{xb__ex__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+string.cpp File Reference}
+\label{xb__ex__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_string.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
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 0993233..f5dcd9d 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.1.0/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v3__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v3\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v3\_create\_dbf.cpp}}
+\hypertarget{xb__ex__v3__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+create\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v3__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v3\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v3\_create\_dbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
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 0018c35..8b088aa 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.1.0/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v3__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v3\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v3\_upd\_dbf.cpp}}
+\hypertarget{xb__ex__v3__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+v3\+\_\+upd\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v3__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v3\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v3\_upd\_dbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
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 7597cf4..8ebb219 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.1.0/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v4__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v4\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v4\_create\_dbf.cpp}}
+\hypertarget{xb__ex__v4__create__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+create\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v4__create__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v4\_create\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v4\_create\_dbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
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 49c36ab..020f2a9 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.1.0/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.cpp File Reference}
-\label{xb__ex__v4__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v4\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/examples/xb\_ex\_v4\_upd\_dbf.cpp}}
+\hypertarget{xb__ex__v4__upd__dbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\+\_\+ex\+\_\+v4\+\_\+upd\+\_\+dbf.cpp File Reference}
+\label{xb__ex__v4__upd__dbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v4\_upd\_dbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/examples/xb\_ex\_v4\_upd\_dbf.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__execsql_8cpp.tex b/docs/doxygen/latex/xb__execsql_8cpp.tex
index 370198d..3c77216 100644
--- a/docs/doxygen/latex/xb__execsql_8cpp.tex
+++ b/docs/doxygen/latex/xb__execsql_8cpp.tex
@@ -1,25 +1,41 @@
-\hypertarget{xb__execsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\+\_\+execsql.cpp File Reference}
-\label{xb__execsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_execsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_execsql.cpp}}
+\hypertarget{xb__execsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+execsql.cpp File Reference}
+\label{xb__execsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_execsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_execsql.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item
-xb\+Int16 \mbox{\hyperlink{xb__execsql_8cpp_af888ba5e7e94d92c2165362b87f1ea0e}{Get\+Next\+Sql\+Cmd}} (\mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} \&f, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Cmd)
+void \mbox{\hyperlink{xb__execsql_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
\item
-int \mbox{\hyperlink{xb__execsql_8cpp_a0c99d968a34e803d378692bde2e3f18f}{main}} (int ac, char $\ast$$\ast$av)
+void \mbox{\hyperlink{xb__execsql_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+xb\+Int16 \mbox{\hyperlink{xb__execsql_8cpp_adb176b752e38521fdb334b4976965945}{Get\+Next\+Sql\+Cmd}} (\mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} \&f, \mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&s\+Cmd, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}} b\+Quiet)
+\item
+int \mbox{\hyperlink{xb__execsql_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
\end{DoxyCompactItemize}
\doxysubsection{Function Documentation}
-\mbox{\Hypertarget{xb__execsql_8cpp_af888ba5e7e94d92c2165362b87f1ea0e}\label{xb__execsql_8cpp_af888ba5e7e94d92c2165362b87f1ea0e}}
+\mbox{\Hypertarget{xb__execsql_8cpp_adb176b752e38521fdb334b4976965945}\label{xb__execsql_8cpp_adb176b752e38521fdb334b4976965945}}
\index{xb\_execsql.cpp@{xb\_execsql.cpp}!GetNextSqlCmd@{GetNextSqlCmd}}
\index{GetNextSqlCmd@{GetNextSqlCmd}!xb\_execsql.cpp@{xb\_execsql.cpp}}
\doxysubsubsection{\texorpdfstring{GetNextSqlCmd()}{GetNextSqlCmd()}}
-{\footnotesize\ttfamily xb\+Int16 Get\+Next\+Sql\+Cmd (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} \&}]{f, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Cmd }\end{DoxyParamCaption})}
+{\footnotesize\ttfamily xb\+Int16 Get\+Next\+Sql\+Cmd (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classxb_1_1xbFile}{xb\+File}} \&}]{f, }\item[{\mbox{\hyperlink{classxb_1_1xbString}{xb\+String}} \&}]{s\+Cmd, }\item[{\mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xb\+Bool}}}]{b\+Quiet }\end{DoxyParamCaption})}
-\mbox{\Hypertarget{xb__execsql_8cpp_a0c99d968a34e803d378692bde2e3f18f}\label{xb__execsql_8cpp_a0c99d968a34e803d378692bde2e3f18f}}
+\mbox{\Hypertarget{xb__execsql_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__execsql_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
\index{xb\_execsql.cpp@{xb\_execsql.cpp}!main@{main}}
\index{main@{main}!xb\_execsql.cpp@{xb\_execsql.cpp}}
\doxysubsubsection{\texorpdfstring{main()}{main()}}
-{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{ac, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__execsql_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__execsql_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_execsql.cpp@{xb\_execsql.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_execsql.cpp@{xb\_execsql.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__execsql_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__execsql_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_execsql.cpp@{xb\_execsql.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_execsql.cpp@{xb\_execsql.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
diff --git a/docs/doxygen/latex/xb__import_8cpp.tex b/docs/doxygen/latex/xb__import_8cpp.tex
new file mode 100644
index 0000000..7d6cfd5
--- /dev/null
+++ b/docs/doxygen/latex/xb__import_8cpp.tex
@@ -0,0 +1,38 @@
+\hypertarget{xb__import_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+import.cpp File Reference}
+\label{xb__import_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_import.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_import.cpp}}
+{\ttfamily \#include $<$xbase.\+h$>$}\newline
+\doxysubsection*{Data Structures}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structsFldMap}{s\+Fld\+Map}}
+\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{xb__import_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}{Print\+Help}} ()
+\item
+void \mbox{\hyperlink{xb__import_8cpp_a1fae5968f70747445d63f63065fb7ef3}{Print\+Version}} ()
+\item
+int \mbox{\hyperlink{xb__import_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__import_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\label{xb__import_8cpp_a0ddf1224851353fc92bfbff6f499fa97}}
+\index{xb\_import.cpp@{xb\_import.cpp}!main@{main}}
+\index{main@{main}!xb\_import.cpp@{xb\_import.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{argc, }\item[{char $\ast$}]{argv\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__import_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}\label{xb__import_8cpp_ae964ff8411b4fdcaf65cb5529aea4bef}}
+\index{xb\_import.cpp@{xb\_import.cpp}!PrintHelp@{PrintHelp}}
+\index{PrintHelp@{PrintHelp}!xb\_import.cpp@{xb\_import.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintHelp()}{PrintHelp()}}
+{\footnotesize\ttfamily void Print\+Help (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\mbox{\Hypertarget{xb__import_8cpp_a1fae5968f70747445d63f63065fb7ef3}\label{xb__import_8cpp_a1fae5968f70747445d63f63065fb7ef3}}
+\index{xb\_import.cpp@{xb\_import.cpp}!PrintVersion@{PrintVersion}}
+\index{PrintVersion@{PrintVersion}!xb\_import.cpp@{xb\_import.cpp}}
+\doxysubsubsection{\texorpdfstring{PrintVersion()}{PrintVersion()}}
+{\footnotesize\ttfamily void Print\+Version (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
diff --git a/docs/doxygen/latex/xb__pack_8cpp.tex b/docs/doxygen/latex/xb__pack_8cpp.tex
index a227ef4..0161316 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.1.0/src/utils/xb\+\_\+pack.cpp File Reference}
-\label{xb__pack_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_pack.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_pack.cpp}}
+\hypertarget{xb__pack_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+pack.cpp File Reference}
+\label{xb__pack_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_pack.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_pack.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__tblinfo_8cpp.tex b/docs/doxygen/latex/xb__tblinfo_8cpp.tex
index 2bcdfdc..6faf127 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.1.0/src/utils/xb\+\_\+tblinfo.cpp File Reference}
-\label{xb__tblinfo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_tblinfo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_tblinfo.cpp}}
+\hypertarget{xb__tblinfo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+tblinfo.cpp File Reference}
+\label{xb__tblinfo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_tblinfo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_tblinfo.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xb__test__bcd_8cpp.tex b/docs/doxygen/latex/xb__test__bcd_8cpp.tex
index fd14f5d..f807898 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.1.0/src/tests/xb\+\_\+test\+\_\+bcd.cpp File Reference}
-\label{xb__test__bcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_bcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_bcd.cpp}}
+\hypertarget{xb__test__bcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+bcd.cpp File Reference}
+\label{xb__test__bcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_bcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_bcd.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__blockread_8cpp.tex b/docs/doxygen/latex/xb__test__blockread_8cpp.tex
index 77e2ca0..7881514 100644
--- a/docs/doxygen/latex/xb__test__blockread_8cpp.tex
+++ b/docs/doxygen/latex/xb__test__blockread_8cpp.tex
@@ -1,5 +1,5 @@
-\hypertarget{xb__test__blockread_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\+\_\+test\+\_\+blockread.cpp File Reference}
-\label{xb__test__blockread_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_blockread.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_blockread.cpp}}
+\hypertarget{xb__test__blockread_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+blockread.cpp File Reference}
+\label{xb__test__blockread_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_blockread.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_blockread.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__date_8cpp.tex b/docs/doxygen/latex/xb__test__date_8cpp.tex
index cb48e54..f8ee6ba 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.1.0/src/tests/xb\+\_\+test\+\_\+date.cpp File Reference}
-\label{xb__test__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_date.cpp}}
+\hypertarget{xb__test__date_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+date.cpp File Reference}
+\label{xb__test__date_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_date.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_date.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
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 bf7fc6c..5da1b42 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.1.0/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.cpp File Reference}
-\label{xb__test__dbf__v3__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v3\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v3\_memos.cpp}}
+\hypertarget{xb__test__dbf__v3__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+memos.cpp File Reference}
+\label{xb__test__dbf__v3__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v3\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v3\_memos.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
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 a79890b..faff200 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.1.0/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.cpp File Reference}
-\label{xb__test__dbf__v3__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp}}
+\hypertarget{xb__test__dbf__v3__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v3\+\_\+nomemos.cpp File Reference}
+\label{xb__test__dbf__v3__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v3\_nomemos.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
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 7812871..fead1df 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.1.0/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.cpp File Reference}
-\label{xb__test__dbf__v4__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v4\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v4\_memos.cpp}}
+\hypertarget{xb__test__dbf__v4__memos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+memos.cpp File Reference}
+\label{xb__test__dbf__v4__memos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v4\_memos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v4\_memos.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
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 a6c65b1..feac4e8 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.1.0/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.cpp File Reference}
-\label{xb__test__dbf__v4__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp}}
+\hypertarget{xb__test__dbf__v4__nomemos_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+dbf\+\_\+v4\+\_\+nomemos.cpp File Reference}
+\label{xb__test__dbf__v4__nomemos_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_dbf\_v4\_nomemos.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__expnode_8cpp.tex b/docs/doxygen/latex/xb__test__expnode_8cpp.tex
index 6c6a884..defbe12 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.1.0/src/tests/xb\+\_\+test\+\_\+expnode.cpp File Reference}
-\label{xb__test__expnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_expnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_expnode.cpp}}
+\hypertarget{xb__test__expnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+expnode.cpp File Reference}
+\label{xb__test__expnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_expnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_expnode.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__expression_8cpp.tex b/docs/doxygen/latex/xb__test__expression_8cpp.tex
index 7921c70..c8c37e8 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.1.0/src/tests/xb\+\_\+test\+\_\+expression.cpp File Reference}
-\label{xb__test__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_expression.cpp}}
+\hypertarget{xb__test__expression_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+expression.cpp File Reference}
+\label{xb__test__expression_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_expression.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_expression.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__file_8cpp.tex b/docs/doxygen/latex/xb__test__file_8cpp.tex
index 504a6b6..182d123 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.1.0/src/tests/xb\+\_\+test\+\_\+file.cpp File Reference}
-\label{xb__test__file_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_file.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_file.cpp}}
+\hypertarget{xb__test__file_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+file.cpp File Reference}
+\label{xb__test__file_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_file.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_file.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__filter_8cpp.tex b/docs/doxygen/latex/xb__test__filter_8cpp.tex
index 3c229cb..47053c9 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.1.0/src/tests/xb\+\_\+test\+\_\+filter.cpp File Reference}
-\label{xb__test__filter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_filter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_filter.cpp}}
+\hypertarget{xb__test__filter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+filter.cpp File Reference}
+\label{xb__test__filter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_filter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_filter.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__funcs_8cpp.tex b/docs/doxygen/latex/xb__test__funcs_8cpp.tex
index 5ea715f..1b406c1 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.1.0/src/tests/xb\+\_\+test\+\_\+funcs.cpp File Reference}
-\label{xb__test__funcs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_funcs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_funcs.cpp}}
+\hypertarget{xb__test__funcs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+funcs.cpp File Reference}
+\label{xb__test__funcs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_funcs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_funcs.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__linklist_8cpp.tex b/docs/doxygen/latex/xb__test__linklist_8cpp.tex
index 434f405..77b113d 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.1.0/src/tests/xb\+\_\+test\+\_\+linklist.cpp File Reference}
-\label{xb__test__linklist_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_linklist.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_linklist.cpp}}
+\hypertarget{xb__test__linklist_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+linklist.cpp File Reference}
+\label{xb__test__linklist_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_linklist.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_linklist.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__lock2_8cpp.tex b/docs/doxygen/latex/xb__test__lock2_8cpp.tex
index 03ddf28..16889dd 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.1.0/src/tests/xb\+\_\+test\+\_\+lock2.cpp File Reference}
-\label{xb__test__lock2_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_lock2.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_lock2.cpp}}
+\hypertarget{xb__test__lock2_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+lock2.cpp File Reference}
+\label{xb__test__lock2_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_lock2.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_lock2.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__lock_8cpp.tex b/docs/doxygen/latex/xb__test__lock_8cpp.tex
index 4507a0f..ccbf3ef 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.1.0/src/tests/xb\+\_\+test\+\_\+lock.cpp File Reference}
-\label{xb__test__lock_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_lock.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_lock.cpp}}
+\hypertarget{xb__test__lock_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+lock.cpp File Reference}
+\label{xb__test__lock_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_lock.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_lock.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__log_8cpp.tex b/docs/doxygen/latex/xb__test__log_8cpp.tex
index 7bde740..e0fdd31 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.1.0/src/tests/xb\+\_\+test\+\_\+log.cpp File Reference}
-\label{xb__test__log_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_log.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_log.cpp}}
+\hypertarget{xb__test__log_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+log.cpp File Reference}
+\label{xb__test__log_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_log.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_log.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__mdx_8cpp.tex b/docs/doxygen/latex/xb__test__mdx_8cpp.tex
index 63e6d5b..81fb465 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.1.0/src/tests/xb\+\_\+test\+\_\+mdx.cpp File Reference}
-\label{xb__test__mdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_mdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_mdx.cpp}}
+\hypertarget{xb__test__mdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+mdx.cpp File Reference}
+\label{xb__test__mdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_mdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_mdx.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__ndx_8cpp.tex b/docs/doxygen/latex/xb__test__ndx_8cpp.tex
index 7ad9cab..dc9782c 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.1.0/src/tests/xb\+\_\+test\+\_\+ndx.cpp File Reference}
-\label{xb__test__ndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_ndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_ndx.cpp}}
+\hypertarget{xb__test__ndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+ndx.cpp File Reference}
+\label{xb__test__ndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_ndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_ndx.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__sql_8cpp.tex b/docs/doxygen/latex/xb__test__sql_8cpp.tex
index 7c641e5..4d7441a 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.1.0/src/tests/xb\+\_\+test\+\_\+sql.cpp File Reference}
-\label{xb__test__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_sql.cpp}}
+\hypertarget{xb__test__sql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+sql.cpp File Reference}
+\label{xb__test__sql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_sql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_sql.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__string_8cpp.tex b/docs/doxygen/latex/xb__test__string_8cpp.tex
index fb5ecd2..cf8c6ed 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.1.0/src/tests/xb\+\_\+test\+\_\+string.cpp File Reference}
-\label{xb__test__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_string.cpp}}
+\hypertarget{xb__test__string_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+string.cpp File Reference}
+\label{xb__test__string_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_string.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_string.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Macros}
diff --git a/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex b/docs/doxygen/latex/xb__test__tblmgr_8cpp.tex
index cd9df27..a7405f7 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.1.0/src/tests/xb\+\_\+test\+\_\+tblmgr.cpp File Reference}
-\label{xb__test__tblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_tblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_tblmgr.cpp}}
+\hypertarget{xb__test__tblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+tblmgr.cpp File Reference}
+\label{xb__test__tblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_tblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_tblmgr.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__tdx_8cpp.tex b/docs/doxygen/latex/xb__test__tdx_8cpp.tex
new file mode 100644
index 0000000..49086da
--- /dev/null
+++ b/docs/doxygen/latex/xb__test__tdx_8cpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{xb__test__tdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+tdx.cpp File Reference}
+\label{xb__test__tdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_tdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_tdx.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{xb__test__tdx_8cpp_a1470527971db41f828c26074cde7e15a}{main}} (int arg\+Cnt, char $\ast$$\ast$av)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{xb__test__tdx_8cpp_a1470527971db41f828c26074cde7e15a}\label{xb__test__tdx_8cpp_a1470527971db41f828c26074cde7e15a}}
+\index{xb\_test\_tdx.cpp@{xb\_test\_tdx.cpp}!main@{main}}
+\index{main@{main}!xb\_test\_tdx.cpp@{xb\_test\_tdx.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}\item[{int}]{arg\+Cnt, }\item[{char $\ast$$\ast$}]{av }\end{DoxyParamCaption})}
+
diff --git a/docs/doxygen/latex/xb__test__uda_8cpp.tex b/docs/doxygen/latex/xb__test__uda_8cpp.tex
index bb0bc3e..c59eb0b 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.1.0/src/tests/xb\+\_\+test\+\_\+uda.cpp File Reference}
-\label{xb__test__uda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_uda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_uda.cpp}}
+\hypertarget{xb__test__uda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+uda.cpp File Reference}
+\label{xb__test__uda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_uda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_uda.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__test__xbase_8cpp.tex b/docs/doxygen/latex/xb__test__xbase_8cpp.tex
index c436f00..c90dfb0 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.1.0/src/tests/xb\+\_\+test\+\_\+xbase.cpp File Reference}
-\label{xb__test__xbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_xbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/tests/xb\_test\_xbase.cpp}}
+\hypertarget{xb__test__xbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\+\_\+test\+\_\+xbase.cpp File Reference}
+\label{xb__test__xbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_xbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/tests/xb\_test\_xbase.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include \char`\"{}tstfuncs.\+cpp\char`\"{}}\newline
\doxysubsection*{Functions}
diff --git a/docs/doxygen/latex/xb__undelall_8cpp.tex b/docs/doxygen/latex/xb__undelall_8cpp.tex
index d7b2682..1d8b7c5 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.1.0/src/utils/xb\+\_\+undelall.cpp File Reference}
-\label{xb__undelall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_undelall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/utils/xb\_undelall.cpp}}
+\hypertarget{xb__undelall_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\+\_\+undelall.cpp File Reference}
+\label{xb__undelall_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_undelall.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/utils/xb\_undelall.cpp}}
{\ttfamily \#include $<$xbase.\+h$>$}\newline
\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbalttbl_8cpp.tex b/docs/doxygen/latex/xbalttbl_8cpp.tex
index 8643874..f28e58f 100644
--- a/docs/doxygen/latex/xbalttbl_8cpp.tex
+++ b/docs/doxygen/latex/xbalttbl_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbalttbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbalttbl.cpp File Reference}
-\label{xbalttbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbalttbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbalttbl.cpp}}
+\hypertarget{xbalttbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbalttbl.cpp File Reference}
+\label{xbalttbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbalttbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbalttbl.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbase_8h.tex b/docs/doxygen/latex/xbase_8h.tex
index e1b3c3b..9d9620a 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.1.0/src/include/xbase.h File Reference}
-\label{xbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbase.h}}
+\hypertarget{xbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h File Reference}
+\label{xbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h}}
{\ttfamily \#include $<$xbconfig.\+h$>$}\newline
{\ttfamily \#include $<$stdio.\+h$>$}\newline
{\ttfamily \#include $<$errno.\+h$>$}\newline
diff --git a/docs/doxygen/latex/xbase_8h_source.tex b/docs/doxygen/latex/xbase_8h_source.tex
index 2d90229..29b6992 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.1.0/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbase.h}}
+\label{xbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbase.h}}
\mbox{\hyperlink{xbase_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbase.h}}
diff --git a/docs/doxygen/latex/xbbcd_8cpp.tex b/docs/doxygen/latex/xbbcd_8cpp.tex
index 5236b17..82db089 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.1.0/src/core/xbbcd.cpp File Reference}
-\label{xbbcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbbcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbbcd.cpp}}
+\hypertarget{xbbcd_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbbcd.cpp File Reference}
+\label{xbbcd_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbbcd.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbbcd.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbbcd_8h.tex b/docs/doxygen/latex/xbbcd_8h.tex
index a914997..fde0b26 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.1.0/src/include/xbbcd.h File Reference}
-\label{xbbcd_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbbcd.h}}
+\hypertarget{xbbcd_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h File Reference}
+\label{xbbcd_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h}}
diff --git a/docs/doxygen/latex/xbbcd_8h_source.tex b/docs/doxygen/latex/xbbcd_8h_source.tex
index 8084dcd..a771647 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.1.0/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbbcd.h}}
+\label{xbbcd_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbbcd.h}}
\mbox{\hyperlink{xbbcd_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbbcd.h}}
diff --git a/docs/doxygen/latex/xbblkread_8h.tex b/docs/doxygen/latex/xbblkread_8h.tex
index e92d03e..b1c8544 100644
--- a/docs/doxygen/latex/xbblkread_8h.tex
+++ b/docs/doxygen/latex/xbblkread_8h.tex
@@ -1,5 +1,5 @@
-\hypertarget{xbblkread_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h File Reference}
-\label{xbblkread_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h}}
+\hypertarget{xbblkread_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h File Reference}
+\label{xbblkread_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h}}
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbblkread_8h_source.tex b/docs/doxygen/latex/xbblkread_8h_source.tex
index 75dd9c4..ab6cc57 100644
--- a/docs/doxygen/latex/xbblkread_8h_source.tex
+++ b/docs/doxygen/latex/xbblkread_8h_source.tex
@@ -1,5 +1,5 @@
\hypertarget{xbblkread_8h_source}{}\doxysection{xbblkread.\+h}
-\label{xbblkread_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbblkread.h}}
+\label{xbblkread_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbblkread.h}}
\mbox{\hyperlink{xbblkread_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbblkread.h}}
diff --git a/docs/doxygen/latex/xbblockread_8cpp.tex b/docs/doxygen/latex/xbblockread_8cpp.tex
index 81bae84..2cf0efe 100644
--- a/docs/doxygen/latex/xbblockread_8cpp.tex
+++ b/docs/doxygen/latex/xbblockread_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbblockread_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/core/xbblockread.cpp File Reference}
-\label{xbblockread_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbblockread.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbblockread.cpp}}
+\hypertarget{xbblockread_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbblockread.cpp File Reference}
+\label{xbblockread_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbblockread.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbblockread.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbcrix_8cpp.tex b/docs/doxygen/latex/xbcrix_8cpp.tex
index 93a2bf2..a354cfa 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.1.0/src/sql/xbcrix.cpp File Reference}
-\label{xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrix.cpp}}
+\hypertarget{xbcrix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrix.cpp File Reference}
+\label{xbcrix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrix.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbcrtbl_8cpp.tex b/docs/doxygen/latex/xbcrtbl_8cpp.tex
index 51f8351..f91094a 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.1.0/src/sql/xbcrtbl.cpp File Reference}
-\label{xbcrtbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.cpp}}
+\hypertarget{xbcrtbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrtbl.cpp File Reference}
+\label{xbcrtbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrtbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbcrtbl.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbcrtbl_8save2_8cpp.tex b/docs/doxygen/latex/xbcrtbl_8save2_8cpp.tex
new file mode 100644
index 0000000..9ea8f2f
--- /dev/null
+++ b/docs/doxygen/latex/xbcrtbl_8save2_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbcrtbl_8save2_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save2.\+cpp File Reference}
+\label{xbcrtbl_8save2_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save2.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save2.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex b/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex
index 5964451..8113b76 100644
--- a/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex
+++ b/docs/doxygen/latex/xbcrtbl_8save_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbcrtbl_8save_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.save.\+cpp File Reference}
-\label{xbcrtbl_8save_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.save.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbcrtbl.save.cpp}}
+\hypertarget{xbcrtbl_8save_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save.\+cpp File Reference}
+\label{xbcrtbl_8save_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.2/src/sql/xbcrtbl.save.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdate_8cpp.tex b/docs/doxygen/latex/xbdate_8cpp.tex
index c0808b1..a70d185 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.1.0/src/core/xbdate.cpp File Reference}
-\label{xbdate_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdate.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdate.cpp}}
+\hypertarget{xbdate_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbdate.cpp File Reference}
+\label{xbdate_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdate.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdate.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
{\ttfamily \#include $<$time.\+h$>$}\newline
\doxysubsection*{Namespaces}
diff --git a/docs/doxygen/latex/xbdate_8h.tex b/docs/doxygen/latex/xbdate_8h.tex
index ad386cd..478b326 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.1.0/src/include/xbdate.h File Reference}
-\label{xbdate_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdate.h}}
+\hypertarget{xbdate_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h File Reference}
+\label{xbdate_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbdate_8h_source.tex b/docs/doxygen/latex/xbdate_8h_source.tex
index fbfa1fb..3478aea 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.1.0/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdate.h}}
+\label{xbdate_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdate.h}}
\mbox{\hyperlink{xbdate_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbdate.h}}
@@ -45,59 +45,62 @@
\DoxyCodeLine{66 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * Date8 );}
\DoxyCodeLine{67 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Date8 );}
\DoxyCodeLine{68 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( xbInt32 lJulDate );}
-\DoxyCodeLine{69 \mbox{\hyperlink{classxb_1_1xbDate}{\string~xbDate}}();}
-\DoxyCodeLine{70 }
-\DoxyCodeLine{71 \textcolor{keywordtype}{void} operator=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&d );}
-\DoxyCodeLine{72 \textcolor{keywordtype}{void} operator+=( xbInt32 i );}
-\DoxyCodeLine{73 \textcolor{keywordtype}{void} operator-\/=( xbInt32 i );}
-\DoxyCodeLine{74 \textcolor{keywordtype}{void} operator++( xbInt32 i );}
-\DoxyCodeLine{75 \textcolor{keywordtype}{void} operator-\/-\/( xbInt32 i );}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 xbInt32 operator-\/( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{78 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * operator-\/( xbInt32 i );}
-\DoxyCodeLine{79 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * operator+( xbInt32 i );}
-\DoxyCodeLine{80 }
-\DoxyCodeLine{81 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator==( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{82 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator!=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{83 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator< ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{84 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator> ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{85 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator<=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{86 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator>=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
-\DoxyCodeLine{87 }
-\DoxyCodeLine{88 xbInt16 CalcRollingCenturyForYear( xbInt16 year ) \textcolor{keyword}{const};}
-\DoxyCodeLine{89 xbInt16 CenturyOf() \textcolor{keyword}{const};}
-\DoxyCodeLine{90 xbInt16 CharDayOf( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutCharDay );}
-\DoxyCodeLine{91 xbInt16 CharMonthOf( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutCharMonth );}
-\DoxyCodeLine{92 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} DateIsValid ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDate8 ) \textcolor{keyword}{const};}
-\DoxyCodeLine{93 xbInt16 DayOf( xbInt16 iFormat ) \textcolor{keyword}{const};}
-\DoxyCodeLine{94 xbInt16 CTOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCtodInDate );}
-\DoxyCodeLine{95 xbInt16 FormatDate( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmtOut );}
-\DoxyCodeLine{96 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
-\DoxyCodeLine{97 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeapYear( xbInt16 iYear ) \textcolor{keyword}{const};}
-\DoxyCodeLine{98 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeapYear() \textcolor{keyword}{const};}
-\DoxyCodeLine{99 xbInt32 JulianDays() \textcolor{keyword}{const};}
-\DoxyCodeLine{100 xbInt16 JulToDate8( xbInt32 lJulDate );}
-\DoxyCodeLine{101 xbInt16 LastDayOfMonth();}
-\DoxyCodeLine{102 xbInt16 MonthOf() \textcolor{keyword}{const};}
-\DoxyCodeLine{103 xbInt16 Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Date8 );}
-\DoxyCodeLine{104 xbInt16 Sysdate();}
-\DoxyCodeLine{105 xbInt16 YearOf() \textcolor{keyword}{const};}
-\DoxyCodeLine{106 }
-\DoxyCodeLine{107 \textcolor{preprocessor}{\#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{108 \textcolor{keywordtype}{void} Dump( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * title );}
-\DoxyCodeLine{109 \textcolor{keywordtype}{void} DumpDateTables();}
-\DoxyCodeLine{110 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{111 }
-\DoxyCodeLine{112 \textcolor{keyword}{private}:}
-\DoxyCodeLine{113 \textcolor{keywordtype}{void} SetDateTables();}
-\DoxyCodeLine{114 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDate8; \textcolor{comment}{/* CCYYMMDD date format ie; 20140718 */}}
-\DoxyCodeLine{115 }
-\DoxyCodeLine{116 \textcolor{keyword}{static} \textcolor{keywordtype}{int} iAggregatedDaysInMonths[2][13];}
-\DoxyCodeLine{117 \textcolor{keyword}{static} \textcolor{keywordtype}{int} iDaysInMonths[2][13];}
-\DoxyCodeLine{118 \};}
-\DoxyCodeLine{119 }
-\DoxyCodeLine{120 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{121 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/*\_\_XB\_XBDATE\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{69 \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}}( xbUInt16 iInit ); \textcolor{comment}{// Constructor used to set the static variables, also defaults to sysdate}}
+\DoxyCodeLine{70 \mbox{\hyperlink{classxb_1_1xbDate}{\string~xbDate}}();}
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 \textcolor{keywordtype}{void} operator=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&d );}
+\DoxyCodeLine{73 \textcolor{keywordtype}{void} operator+=( xbInt32 i );}
+\DoxyCodeLine{74 \textcolor{keywordtype}{void} operator-\/=( xbInt32 i );}
+\DoxyCodeLine{75 \textcolor{keywordtype}{void} operator++( xbInt32 i );}
+\DoxyCodeLine{76 \textcolor{keywordtype}{void} operator-\/-\/( xbInt32 i );}
+\DoxyCodeLine{77 }
+\DoxyCodeLine{78 xbInt32 operator-\/( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{79 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * operator-\/( xbInt32 i );}
+\DoxyCodeLine{80 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * operator+( xbInt32 i );}
+\DoxyCodeLine{81 }
+\DoxyCodeLine{82 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator==( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{83 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator!=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{84 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator< ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{85 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator> ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{86 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator<=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{87 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} operator>=( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \& ) \textcolor{keyword}{const};}
+\DoxyCodeLine{88 }
+\DoxyCodeLine{89 xbInt16 CalcRollingCenturyForYear( xbInt16 year ) \textcolor{keyword}{const};}
+\DoxyCodeLine{90 xbInt16 CenturyOf() \textcolor{keyword}{const};}
+\DoxyCodeLine{91 xbInt16 CharDayOf( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutCharDay );}
+\DoxyCodeLine{92 xbInt16 CharMonthOf( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutCharMonth );}
+\DoxyCodeLine{93 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} DateIsValid ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDate8 ) \textcolor{keyword}{const};}
+\DoxyCodeLine{94 xbInt16 DayOf( xbInt16 iFormat ) \textcolor{keyword}{const};}
+\DoxyCodeLine{95 xbInt16 CTOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCtodInDate );}
+\DoxyCodeLine{96 xbInt16 FormatDate( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmtOut );}
+\DoxyCodeLine{97 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
+\DoxyCodeLine{98 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeapYear( xbInt16 iYear ) \textcolor{keyword}{const};}
+\DoxyCodeLine{99 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeapYear() \textcolor{keyword}{const};}
+\DoxyCodeLine{100 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNull() \textcolor{keyword}{const};}
+\DoxyCodeLine{101 xbInt32 JulianDays() \textcolor{keyword}{const};}
+\DoxyCodeLine{102 xbInt16 JulToDate8( xbInt32 lJulDate );}
+\DoxyCodeLine{103 xbInt16 LastDayOfMonth();}
+\DoxyCodeLine{104 xbInt16 MonthOf() \textcolor{keyword}{const};}
+\DoxyCodeLine{105 xbInt16 Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Date8 );}
+\DoxyCodeLine{106 xbInt16 Sysdate();}
+\DoxyCodeLine{107 xbInt16 YearOf() \textcolor{keyword}{const};}
+\DoxyCodeLine{108 }
+\DoxyCodeLine{109 \textcolor{preprocessor}{\#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{110 \textcolor{keywordtype}{void} Dump( \textcolor{keyword}{const} \textcolor{keywordtype}{char} * title );}
+\DoxyCodeLine{111 \textcolor{keywordtype}{void} DumpDateTables();}
+\DoxyCodeLine{112 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{113 }
+\DoxyCodeLine{114 \textcolor{keyword}{private}:}
+\DoxyCodeLine{115 \textcolor{keywordtype}{void} SetDateTables();}
+\DoxyCodeLine{116 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDate8; \textcolor{comment}{// CCYYMMDD date format ie; 20140718}}
+\DoxyCodeLine{117 \textcolor{comment}{// Null date is identified by sDate.Len() < 8}}
+\DoxyCodeLine{118 }
+\DoxyCodeLine{119 \textcolor{keyword}{static} \textcolor{keywordtype}{int} iAggregatedDaysInMonths[2][13];}
+\DoxyCodeLine{120 \textcolor{keyword}{static} \textcolor{keywordtype}{int} iDaysInMonths[2][13];}
+\DoxyCodeLine{121 \};}
\DoxyCodeLine{122 }
+\DoxyCodeLine{123 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{124 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/*\_\_XB\_XBDATE\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{125 }
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbdbf3_8cpp.tex b/docs/doxygen/latex/xbdbf3_8cpp.tex
index 158b426..ed9be8b 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.1.0/src/core/xbdbf3.cpp File Reference}
-\label{xbdbf3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf3.cpp}}
+\hypertarget{xbdbf3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf3.cpp File Reference}
+\label{xbdbf3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf3.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdbf4_8cpp.tex b/docs/doxygen/latex/xbdbf4_8cpp.tex
index 5b06efb..db4c64e 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.1.0/src/core/xbdbf4.cpp File Reference}
-\label{xbdbf4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf4.cpp}}
+\hypertarget{xbdbf4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf4.cpp File Reference}
+\label{xbdbf4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf4.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdbf_8cpp.tex b/docs/doxygen/latex/xbdbf_8cpp.tex
index 42f926d..a96b643 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.1.0/src/core/xbdbf.cpp File Reference}
-\label{xbdbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbdbf.cpp}}
+\hypertarget{xbdbf_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf.cpp File Reference}
+\label{xbdbf_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbdbf.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbdbf_8h.tex b/docs/doxygen/latex/xbdbf_8h.tex
index 59ea13f..3efbf47 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.1.0/src/include/xbdbf.h File Reference}
-\label{xbdbf_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdbf.h}}
+\hypertarget{xbdbf_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h File Reference}
+\label{xbdbf_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbdbf_8h_source.tex b/docs/doxygen/latex/xbdbf_8h_source.tex
index 0bf6c91..d982681 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.1.0/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbdbf.h}}
+\label{xbdbf_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbdbf.h}}
\mbox{\hyperlink{xbdbf_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbdbf.h}}
@@ -126,7 +126,7 @@
\DoxyCodeLine{164 \textcolor{keyword}{virtual} xbInt16 DeleteAll ( xbInt16 iOption );}
\DoxyCodeLine{165 \textcolor{keyword}{virtual} xbInt16 DeleteAllRecords ();}
\DoxyCodeLine{166 \textcolor{keyword}{virtual} xbInt16 DeleteRecord ();}
-\DoxyCodeLine{167 \textcolor{keyword}{virtual} xbInt16 DumpHeader ( xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{167 \textcolor{keyword}{virtual} xbInt16 DumpHeader ( xbInt16 iOption );}
\DoxyCodeLine{168 \textcolor{keyword}{virtual} xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );}
\DoxyCodeLine{169 \textcolor{keyword}{virtual} xbInt16 GetAutoCommit () \textcolor{keyword}{const};}
\DoxyCodeLine{170 \textcolor{keyword}{virtual} xbInt16 GetAutoCommit ( xbInt16 iOption ) \textcolor{keyword}{const};}
@@ -148,7 +148,7 @@
\DoxyCodeLine{186 \textcolor{keyword}{virtual} xbInt16 GetPrevRecord ( xbInt16 iOption );}
\DoxyCodeLine{187 \textcolor{keyword}{virtual} xbInt16 GetRecord ( xbUInt32 ulRecNo );}
\DoxyCodeLine{188 }
-\DoxyCodeLine{189 \textcolor{keyword}{virtual} xbUInt32 GetRecordCount ();}
+\DoxyCodeLine{189 \textcolor{comment}{// virtual xbUInt32 GetRecordCount ();}}
\DoxyCodeLine{190 \textcolor{keyword}{virtual} xbInt16 GetRecordCnt ( xbUInt32 \& ulRecCnt );}
\DoxyCodeLine{191 }
\DoxyCodeLine{192 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} * GetRecordBuf ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
@@ -169,7 +169,7 @@
\DoxyCodeLine{207 }
\DoxyCodeLine{208 \textcolor{keyword}{virtual} xbInt16 PutRecord (); \textcolor{comment}{// Put record to current location}}
\DoxyCodeLine{209 \textcolor{keyword}{virtual} xbInt16 PutRecord ( xbUInt32 ulRecNo );}
-\DoxyCodeLine{210 \textcolor{keyword}{virtual} xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );}
+\DoxyCodeLine{210 \textcolor{comment}{// virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );}}
\DoxyCodeLine{211 \textcolor{keyword}{virtual} xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) \textcolor{keyword}{const};}
\DoxyCodeLine{212 \textcolor{keyword}{virtual} xbInt16 \mbox{\hyperlink{classxb_1_1xbDbf_aeeeb2eb5fabcd0f91d457df07b0e0708}{Rename}} ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sNewName ) = 0;}
\DoxyCodeLine{213 }
@@ -213,7 +213,7 @@
\DoxyCodeLine{251 \textcolor{keyword}{virtual} xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
\DoxyCodeLine{252 \textcolor{keyword}{virtual} xbInt16 GetLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt32 \&lFieldValue ) \textcolor{keyword}{const};}
\DoxyCodeLine{253 \textcolor{keyword}{virtual} xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );}
-\DoxyCodeLine{254 \textcolor{keyword}{virtual} xbInt16 PutLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldNo, xbInt32 lFieldValue );}
+\DoxyCodeLine{254 \textcolor{keyword}{virtual} xbInt16 PutLongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbInt32 lFieldValue );}
\DoxyCodeLine{255 }
\DoxyCodeLine{256 \textcolor{keyword}{virtual} xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
\DoxyCodeLine{257 \textcolor{keyword}{virtual} xbInt16 GetULongField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, xbUInt32 \&lFieldValue ) \textcolor{keyword}{const};}
@@ -236,276 +236,286 @@
\DoxyCodeLine{274 \textcolor{keyword}{virtual} xbInt16 PutDateField( xbInt16 iFieldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt );}
\DoxyCodeLine{275 \textcolor{keyword}{virtual} xbInt16 PutDateField( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dt );}
\DoxyCodeLine{276 }
-\DoxyCodeLine{277 }
-\DoxyCodeLine{278 }
-\DoxyCodeLine{279 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{280 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldCnt () \textcolor{keyword}{const};}
-\DoxyCodeLine{281 \textcolor{keyword}{virtual} xbMemo *GetMemoPtr ();}
-\DoxyCodeLine{282 \textcolor{keyword}{virtual} xbUInt32 GetCreateMemoBlockSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{283 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{284 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{285 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 \&ullMemoFieldLen );}
-\DoxyCodeLine{286 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, xbUInt32 \&ulMemoFieldLen );}
-\DoxyCodeLine{287 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( xbInt16 iFieldNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{288 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{289 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;}
-\DoxyCodeLine{290 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{291 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
-\DoxyCodeLine{292 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{293 }
-\DoxyCodeLine{294 }
-\DoxyCodeLine{295 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{296 \textcolor{keyword}{virtual} xbInt16 LockTable ( xbInt16 iLockFunction );}
-\DoxyCodeLine{297 \textcolor{keyword}{virtual} xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );}
-\DoxyCodeLine{298 \textcolor{keyword}{virtual} xbInt16 LockAppend ( xbInt16 iLockFunction );}
-\DoxyCodeLine{299 \textcolor{keyword}{virtual} xbInt16 LockHeader ( xbInt16 iLockFunction );}
-\DoxyCodeLine{300 }
-\DoxyCodeLine{301 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{302 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
-\DoxyCodeLine{303 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const}; }
-\DoxyCodeLine{304 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_LOCK}}
-\DoxyCodeLine{305 }
-\DoxyCodeLine{306 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{307 \textcolor{keyword}{virtual} xbInt16 LockIndices ( xbInt16 iLockFunction );}
-\DoxyCodeLine{308 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{277 \textcolor{keyword}{virtual} xbInt16 GetNullSts( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bIsNull ) \textcolor{keyword}{const};}
+\DoxyCodeLine{278 \textcolor{keyword}{virtual} xbInt16 GetNullSts( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bIsNull ) \textcolor{keyword}{const};}
+\DoxyCodeLine{279 \textcolor{keyword}{virtual} xbInt16 GetNullSts( xbInt16 iFieldNo, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bIsNull, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{280 }
+\DoxyCodeLine{281 }
+\DoxyCodeLine{282 }
+\DoxyCodeLine{283 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{284 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldCnt () \textcolor{keyword}{const};}
+\DoxyCodeLine{285 \textcolor{keyword}{virtual} xbMemo *GetMemoPtr ();}
+\DoxyCodeLine{286 \textcolor{keyword}{virtual} xbUInt32 GetCreateMemoBlockSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{287 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( xbInt16 iFldNo, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{288 \textcolor{keyword}{virtual} xbInt16 GetMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{289 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 \&ulMemoFieldLen );}
+\DoxyCodeLine{290 \textcolor{keyword}{virtual} xbInt16 GetMemoFieldLen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, xbUInt32 \&ulMemoFieldLen );}
+\DoxyCodeLine{291 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( xbInt16 iFieldNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{292 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} MemoFieldExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFieldName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{293 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;}
+\DoxyCodeLine{294 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( xbInt16 iFldNo, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{295 \textcolor{keyword}{virtual} xbInt16 UpdateMemoField ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sFldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMemoData );}
+\DoxyCodeLine{296 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{297 }
+\DoxyCodeLine{298 }
+\DoxyCodeLine{299 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{300 \textcolor{keyword}{virtual} xbInt16 LockTable ( xbInt16 iLockFunction );}
+\DoxyCodeLine{301 \textcolor{keyword}{virtual} xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );}
+\DoxyCodeLine{302 \textcolor{keyword}{virtual} xbInt16 LockAppend ( xbInt16 iLockFunction );}
+\DoxyCodeLine{303 \textcolor{keyword}{virtual} xbInt16 LockHeader ( xbInt16 iLockFunction );}
+\DoxyCodeLine{304 }
+\DoxyCodeLine{305 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{306 \textcolor{keyword}{virtual} xbInt16 LockMemo ( xbInt16 iLockFunction );}
+\DoxyCodeLine{307 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMemoLocked () \textcolor{keyword}{const}; }
+\DoxyCodeLine{308 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MEMO\_LOCK}}
\DoxyCodeLine{309 }
-\DoxyCodeLine{310 xbInt16 GetAutoLock () \textcolor{keyword}{const};}
-\DoxyCodeLine{311 \textcolor{keywordtype}{void} SetAutoLock ( xbInt16 iAutoLock );}
-\DoxyCodeLine{312 xbInt16 GetLockFlavor () \textcolor{keyword}{const};}
-\DoxyCodeLine{313 \textcolor{keywordtype}{void} SetLockFlavor ( xbInt16 iLockFlavor );}
-\DoxyCodeLine{314 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetTableLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{315 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetHeaderLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{316 xbUInt32 GetAppendLocked () \textcolor{keyword}{const};}
-\DoxyCodeLine{317 xbLinkListNode<xbUInt32> * GetFirstRecLock () \textcolor{keyword}{const};}
-\DoxyCodeLine{318 }
-\DoxyCodeLine{319 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{320 \textcolor{keywordtype}{void} DumpTableLockStatus() \textcolor{keyword}{const};}
-\DoxyCodeLine{321 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{322 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{323 }
-\DoxyCodeLine{324 }
-\DoxyCodeLine{325 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{326 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );}
-\DoxyCodeLine{327 \textcolor{keyword}{virtual} xbInt16 CloseIndexFile( xbIx *pIx );}
-\DoxyCodeLine{328 \textcolor{keyword}{virtual} xbInt16 CreateTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFilter, }
-\DoxyCodeLine{329 xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, \textcolor{keywordtype}{void} **vpTagOut );}
-\DoxyCodeLine{330 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName );}
-\DoxyCodeLine{331 \textcolor{keyword}{virtual} xbInt16 DeleteAllIndexFiles();}
-\DoxyCodeLine{332 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey );}
-\DoxyCodeLine{333 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dtKey );}
-\DoxyCodeLine{334 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dKey );}
-\DoxyCodeLine{335 \textcolor{keyword}{virtual} xbIx *GetCurIx() \textcolor{keyword}{const};}
-\DoxyCodeLine{336 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetCurTag() \textcolor{keyword}{const};}
-\DoxyCodeLine{337 }
-\DoxyCodeLine{338 \textcolor{keyword}{virtual} xbInt16 GetFirstKey();}
-\DoxyCodeLine{339 \textcolor{keyword}{virtual} xbInt16 GetNextKey();}
-\DoxyCodeLine{340 \textcolor{keyword}{virtual} xbInt16 GetPrevKey();}
-\DoxyCodeLine{341 \textcolor{keyword}{virtual} xbInt16 GetLastKey();}
-\DoxyCodeLine{342 }
-\DoxyCodeLine{343 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurIxType() \textcolor{keyword}{const};}
-\DoxyCodeLine{344 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurTagName() \textcolor{keyword}{const};}
-\DoxyCodeLine{345 \textcolor{keyword}{virtual} xbIxList *GetIxList() \textcolor{keyword}{const};}
-\DoxyCodeLine{346 \textcolor{keyword}{virtual} xbInt32 GetPhysicalIxCnt () \textcolor{keyword}{const};}
-\DoxyCodeLine{347 xbLinkListNode<xbTag *> *GetTagList () \textcolor{keyword}{const};}
-\DoxyCodeLine{348 }
-\DoxyCodeLine{349 \textcolor{keyword}{virtual} xbInt16 OpenIndex( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIndexName );}
-\DoxyCodeLine{350 \textcolor{keyword}{virtual} xbInt16 Reindex( xbInt16 iTagOpt );}
-\DoxyCodeLine{351 \textcolor{keyword}{virtual} xbInt16 SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTagName );}
-\DoxyCodeLine{352 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, xbIx *pIx, \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{353 }
-\DoxyCodeLine{354 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{355 }
-\DoxyCodeLine{356 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
-\DoxyCodeLine{357 \textcolor{keyword}{virtual} xbInt16 AssociateIndex( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName, xbInt16 iOption );}
-\DoxyCodeLine{358 xbLinkListNode<xbString> *GetInfList() \textcolor{keyword}{const};}
-\DoxyCodeLine{359 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
-\DoxyCodeLine{360 }
-\DoxyCodeLine{361 \textcolor{comment}{//\#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{362 \textcolor{comment}{//virtual xbInt16 GetCreateMdxBlockSize() const;}}
-\DoxyCodeLine{363 \textcolor{comment}{//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}}
-\DoxyCodeLine{364 \textcolor{comment}{//\#endif}}
-\DoxyCodeLine{365 }
-\DoxyCodeLine{366 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{367 xbInt16 DisableBlockReadProcessing();}
-\DoxyCodeLine{368 xbInt16 EnableBlockReadProcessing();}
-\DoxyCodeLine{369 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetBlockReadStatus() \textcolor{keyword}{const};}
-\DoxyCodeLine{370 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{371 }
-\DoxyCodeLine{372 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{373 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{374 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIx;}
-\DoxyCodeLine{375 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIxMdx;}
-\DoxyCodeLine{376 }
-\DoxyCodeLine{377 xbInt16 AddIndex( xbIx *ix, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmt );}
-\DoxyCodeLine{378 \textcolor{keywordtype}{void} ClearTagList();}
-\DoxyCodeLine{379 xbInt16 RemoveIndex( xbIx * ix );}
-\DoxyCodeLine{380 \textcolor{keywordtype}{void} UpdateSchemaIxFlag( xbInt16 iFldNo, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVal );}
-\DoxyCodeLine{381 \textcolor{keyword}{virtual} xbInt16 UpdateTagList ();}
-\DoxyCodeLine{382 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{383 }
-\DoxyCodeLine{384 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
-\DoxyCodeLine{385 \textcolor{keyword}{virtual} xbInt16 GetInfFileName( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNdxIdxFileName );}
-\DoxyCodeLine{386 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
+\DoxyCodeLine{310 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{311 \textcolor{keyword}{virtual} xbInt16 LockIndices ( xbInt16 iLockFunction );}
+\DoxyCodeLine{312 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{313 }
+\DoxyCodeLine{314 xbInt16 GetAutoLock () \textcolor{keyword}{const};}
+\DoxyCodeLine{315 \textcolor{keywordtype}{void} SetAutoLock ( xbInt16 iAutoLock );}
+\DoxyCodeLine{316 xbInt16 GetLockFlavor () \textcolor{keyword}{const};}
+\DoxyCodeLine{317 \textcolor{keywordtype}{void} SetLockFlavor ( xbInt16 iLockFlavor );}
+\DoxyCodeLine{318 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetTableLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{319 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetHeaderLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{320 xbUInt32 GetAppendLocked () \textcolor{keyword}{const};}
+\DoxyCodeLine{321 xbLinkListNode<xbUInt32> * GetFirstRecLock () \textcolor{keyword}{const};}
+\DoxyCodeLine{322 }
+\DoxyCodeLine{323 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{324 \textcolor{keywordtype}{void} DumpTableLockStatus() \textcolor{keyword}{const};}
+\DoxyCodeLine{325 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{326 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{327 }
+\DoxyCodeLine{328 }
+\DoxyCodeLine{329 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{330 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );}
+\DoxyCodeLine{331 \textcolor{keyword}{virtual} xbInt16 CloseIndexFile( xbIx *pIx );}
+\DoxyCodeLine{332 \textcolor{keyword}{virtual} xbInt16 CreateTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFilter, }
+\DoxyCodeLine{333 xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, \textcolor{keywordtype}{void} **vpTagOut );}
+\DoxyCodeLine{334 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName );}
+\DoxyCodeLine{335 \textcolor{keyword}{virtual} xbInt16 DeleteAllIndexFiles();}
+\DoxyCodeLine{336 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sKey );}
+\DoxyCodeLine{337 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dtKey );}
+\DoxyCodeLine{338 \textcolor{keyword}{virtual} xbInt16 Find( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dKey );}
+\DoxyCodeLine{339 \textcolor{keyword}{virtual} xbIx *GetCurIx() \textcolor{keyword}{const};}
+\DoxyCodeLine{340 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetCurTag() \textcolor{keyword}{const};}
+\DoxyCodeLine{341 }
+\DoxyCodeLine{342 \textcolor{keyword}{virtual} xbInt16 GetFirstKey();}
+\DoxyCodeLine{343 \textcolor{keyword}{virtual} xbInt16 GetNextKey();}
+\DoxyCodeLine{344 \textcolor{keyword}{virtual} xbInt16 GetPrevKey();}
+\DoxyCodeLine{345 \textcolor{keyword}{virtual} xbInt16 GetLastKey();}
+\DoxyCodeLine{346 }
+\DoxyCodeLine{347 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurIxType() \textcolor{keyword}{const};}
+\DoxyCodeLine{348 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetCurTagName() \textcolor{keyword}{const};}
+\DoxyCodeLine{349 \textcolor{keyword}{virtual} xbIxList *GetIxList() \textcolor{keyword}{const};}
+\DoxyCodeLine{350 \textcolor{keyword}{virtual} xbInt32 GetPhysicalIxCnt () \textcolor{keyword}{const};}
+\DoxyCodeLine{351 xbLinkListNode<xbTag *> *GetTagList () \textcolor{keyword}{const};}
+\DoxyCodeLine{352 }
+\DoxyCodeLine{353 \textcolor{keyword}{virtual} xbInt16 OpenIndex( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIndexName );}
+\DoxyCodeLine{354 \textcolor{keyword}{virtual} xbInt16 Reindex( xbInt16 iTagOpt = 0, xbInt16 iErrorOpt = 1, xbIx **pIx = NULL, \textcolor{keywordtype}{void} **vpTag = NULL );}
+\DoxyCodeLine{355 \textcolor{keyword}{virtual} xbInt16 SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTagName );}
+\DoxyCodeLine{356 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIxType, xbIx *pIx, \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{357 }
+\DoxyCodeLine{358 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{359 }
+\DoxyCodeLine{360 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{361 \textcolor{keyword}{virtual} xbInt16 AssociateIndex( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sType, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sName, xbInt16 iOption );}
+\DoxyCodeLine{362 xbLinkListNode<xbString> *GetInfList() \textcolor{keyword}{const};}
+\DoxyCodeLine{363 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
+\DoxyCodeLine{364 }
+\DoxyCodeLine{365 \textcolor{comment}{//\#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{366 \textcolor{comment}{//virtual xbInt16 GetCreateMdxBlockSize() const;}}
+\DoxyCodeLine{367 \textcolor{comment}{//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}}
+\DoxyCodeLine{368 \textcolor{comment}{//\#endif}}
+\DoxyCodeLine{369 }
+\DoxyCodeLine{370 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{371 xbInt16 DisableBlockReadProcessing();}
+\DoxyCodeLine{372 xbInt16 EnableBlockReadProcessing();}
+\DoxyCodeLine{373 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetBlockReadStatus() \textcolor{keyword}{const};}
+\DoxyCodeLine{374 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{375 }
+\DoxyCodeLine{376 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{377 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{378 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIx;}
+\DoxyCodeLine{379 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIxMdx;}
+\DoxyCodeLine{380 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbIxTdx;}
+\DoxyCodeLine{381 }
+\DoxyCodeLine{382 xbInt16 AddIndex( xbIx *ix, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFmt );}
+\DoxyCodeLine{383 \textcolor{keywordtype}{void} ClearTagList();}
+\DoxyCodeLine{384 xbInt16 RemoveIndex( xbIx * ix );}
+\DoxyCodeLine{385 \textcolor{keywordtype}{void} UpdateSchemaIxFlag( xbInt16 iFldNo, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVal );}
+\DoxyCodeLine{386 }
\DoxyCodeLine{387 }
-\DoxyCodeLine{388 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{389 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBlockRead;}
-\DoxyCodeLine{390 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{391 }
+\DoxyCodeLine{388 \textcolor{keyword}{virtual} xbInt16 UpdateTagList ();}
+\DoxyCodeLine{389 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{390 }
+\DoxyCodeLine{391 \textcolor{keyword}{virtual} xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );}
\DoxyCodeLine{392 }
-\DoxyCodeLine{393 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{394 \textcolor{keywordtype}{void} SetHeaderLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
-\DoxyCodeLine{395 \textcolor{keywordtype}{void} SetTableLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
-\DoxyCodeLine{396 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPORT}}
+\DoxyCodeLine{393 }
+\DoxyCodeLine{394 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{395 \textcolor{keyword}{virtual} xbInt16 GetInfFileName( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNdxIdxFileName );}
+\DoxyCodeLine{396 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
\DoxyCodeLine{397 }
-\DoxyCodeLine{398 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{399 xbInt16 iMemoFieldCnt; \textcolor{comment}{// Memo field cnt in the table}}
-\DoxyCodeLine{400 xbMemo *Memo; \textcolor{comment}{// Pointer to memo class}}
-\DoxyCodeLine{401 xbUInt32 ulCreateMemoBlockSize; \textcolor{comment}{// blocksize to use when creating dbt file}}
-\DoxyCodeLine{402 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{403 }
-\DoxyCodeLine{404 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
-\DoxyCodeLine{405 \textcolor{keyword}{virtual} xbInt16 DeleteInfData();}
-\DoxyCodeLine{406 \textcolor{keyword}{virtual} xbInt16 LoadInfData();}
-\DoxyCodeLine{407 \textcolor{keyword}{virtual} xbInt16 SaveInfData();}
-\DoxyCodeLine{408 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
-\DoxyCodeLine{409 }
-\DoxyCodeLine{410 \textcolor{comment}{/*}}
-\DoxyCodeLine{411 \textcolor{comment}{ \#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{412 \textcolor{comment}{ xbInt16 iCreateMdxBlockSize;}}
-\DoxyCodeLine{413 \textcolor{comment}{ \#endif // XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{414 \textcolor{comment}{*/}}
-\DoxyCodeLine{415 }
-\DoxyCodeLine{416 \textcolor{keyword}{virtual} xbInt16 GetRawField( xbInt16 iFieldNo, \textcolor{keywordtype}{char} *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
-\DoxyCodeLine{417 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} InitVars(); }
-\DoxyCodeLine{418 \textcolor{keyword}{virtual} xbInt16 SetVersion() = 0;}
-\DoxyCodeLine{419 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} * s ) = 0;}
-\DoxyCodeLine{420 xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );}
-\DoxyCodeLine{421 }
-\DoxyCodeLine{422 }
-\DoxyCodeLine{423 xbUInt32 ulCurRec; \textcolor{comment}{// Current record or zero}}
-\DoxyCodeLine{424 xbInt16 iAutoCommit; \textcolor{comment}{// Auto commit updates if not explicitly performed before moving off record?}}
-\DoxyCodeLine{425 \textcolor{comment}{// -\/1 -\/-\/> Use DBMS default}}
-\DoxyCodeLine{426 \textcolor{comment}{// 0 -\/-\/> No auto update on this table, regardless of DBMS setting}}
-\DoxyCodeLine{427 \textcolor{comment}{// 1 -\/-\/> Auto update on this table, regardless of DBMS setting}}
-\DoxyCodeLine{428 }
-\DoxyCodeLine{429 xbInt16 iFileVersion; \textcolor{comment}{// xBase file version -\/ which class is in play}}
-\DoxyCodeLine{430 }
+\DoxyCodeLine{398 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{399 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBlockRead;}
+\DoxyCodeLine{400 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{401 }
+\DoxyCodeLine{402 }
+\DoxyCodeLine{403 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{404 \textcolor{keywordtype}{void} SetHeaderLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
+\DoxyCodeLine{405 \textcolor{keywordtype}{void} SetTableLocked ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked );}
+\DoxyCodeLine{406 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPORT}}
+\DoxyCodeLine{407 }
+\DoxyCodeLine{408 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{409 xbInt16 iMemoFieldCnt; \textcolor{comment}{// Memo field cnt in the table}}
+\DoxyCodeLine{410 xbMemo *Memo; \textcolor{comment}{// Pointer to memo class}}
+\DoxyCodeLine{411 xbUInt32 ulCreateMemoBlockSize; \textcolor{comment}{// blocksize to use when creating dbt file}}
+\DoxyCodeLine{412 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{413 }
+\DoxyCodeLine{414 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{415 \textcolor{keyword}{virtual} xbInt16 DeleteInfData();}
+\DoxyCodeLine{416 \textcolor{keyword}{virtual} xbInt16 LoadInfData();}
+\DoxyCodeLine{417 \textcolor{keyword}{virtual} xbInt16 SaveInfData();}
+\DoxyCodeLine{418 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
+\DoxyCodeLine{419 }
+\DoxyCodeLine{420 \textcolor{comment}{/*}}
+\DoxyCodeLine{421 \textcolor{comment}{ \#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{422 \textcolor{comment}{ xbInt16 iCreateMdxBlockSize;}}
+\DoxyCodeLine{423 \textcolor{comment}{ \#endif // XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{424 \textcolor{comment}{*/}}
+\DoxyCodeLine{425 }
+\DoxyCodeLine{426 \textcolor{keyword}{virtual} xbInt16 GetRawField( xbInt16 iFieldNo, \textcolor{keywordtype}{char} *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw ) \textcolor{keyword}{const};}
+\DoxyCodeLine{427 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} InitVars(); }
+\DoxyCodeLine{428 \textcolor{keyword}{virtual} xbInt16 SetVersion() = 0;}
+\DoxyCodeLine{429 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} * s ) = 0;}
+\DoxyCodeLine{430 xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );}
\DoxyCodeLine{431 }
-\DoxyCodeLine{432 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sAlias; \textcolor{comment}{// table alias}}
-\DoxyCodeLine{433 xbInt16 iNoOfFields;}
-\DoxyCodeLine{434 xbInt16 iDbfStatus; \textcolor{comment}{// 0 = closed}}
-\DoxyCodeLine{435 \textcolor{comment}{// 1 = open}}
-\DoxyCodeLine{436 \textcolor{comment}{// 2 = updates pending}}
-\DoxyCodeLine{437 }
-\DoxyCodeLine{438 xbSchemaRec *SchemaPtr; \textcolor{comment}{// Pointer to field data}}
-\DoxyCodeLine{439 \textcolor{keywordtype}{char} *RecBuf; \textcolor{comment}{// Pointer to record buffer}}
-\DoxyCodeLine{440 \textcolor{keywordtype}{char} *RecBuf2; \textcolor{comment}{// Pointer to original rec buf allocation}}
+\DoxyCodeLine{432 }
+\DoxyCodeLine{433 xbUInt32 ulCurRec; \textcolor{comment}{// Current record or zero}}
+\DoxyCodeLine{434 xbInt16 iAutoCommit; \textcolor{comment}{// Auto commit updates if not explicitly performed before moving off record?}}
+\DoxyCodeLine{435 \textcolor{comment}{// -\/1 -\/-\/> Use DBMS default}}
+\DoxyCodeLine{436 \textcolor{comment}{// 0 -\/-\/> No auto update on this table, regardless of DBMS setting}}
+\DoxyCodeLine{437 \textcolor{comment}{// 1 -\/-\/> Auto update on this table, regardless of DBMS setting}}
+\DoxyCodeLine{438 }
+\DoxyCodeLine{439 xbInt16 iFileVersion; \textcolor{comment}{// xBase file version -\/ which class is in play}}
+\DoxyCodeLine{440 }
\DoxyCodeLine{441 }
-\DoxyCodeLine{442 }
-\DoxyCodeLine{443 \textcolor{comment}{/* Next several variables are database header fields, up through dbase V */}}
-\DoxyCodeLine{444 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVersion;}
-\DoxyCodeLine{445 \textcolor{keywordtype}{char} cUpdateYY;}
-\DoxyCodeLine{446 \textcolor{keywordtype}{char} cUpdateMM;}
-\DoxyCodeLine{447 \textcolor{keywordtype}{char} cUpdateDD;}
-\DoxyCodeLine{448 xbUInt32 ulNoOfRecs;}
-\DoxyCodeLine{449 xbUInt16 uiHeaderLen;}
-\DoxyCodeLine{450 xbUInt16 uiRecordLen;}
-\DoxyCodeLine{451 \textcolor{keywordtype}{char} cTransactionFlag;}
-\DoxyCodeLine{452 \textcolor{keywordtype}{char} cEncryptionFlag;}
-\DoxyCodeLine{453 \textcolor{keywordtype}{char} cIndexFlag;}
-\DoxyCodeLine{454 \textcolor{keywordtype}{char} cLangDriver; \textcolor{comment}{// dbase 7 sets to 1B}}
-\DoxyCodeLine{455 }
-\DoxyCodeLine{456 }
-\DoxyCodeLine{457 }
-\DoxyCodeLine{458 \textcolor{keyword}{private}:}
-\DoxyCodeLine{459 \textcolor{keywordtype}{void} ResetNoOfRecords(); }
-\DoxyCodeLine{460 }
-\DoxyCodeLine{461 }
-\DoxyCodeLine{462 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{463 xbInt16 iAutoLock; \textcolor{comment}{// 0 -\/ autolock off, 1 -\/ autolock on}}
-\DoxyCodeLine{464 xbInt16 iLockFlavor;}
-\DoxyCodeLine{465 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked; \textcolor{comment}{// is the table locked}}
-\DoxyCodeLine{466 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHeaderLocked; \textcolor{comment}{// is the header locked}}
-\DoxyCodeLine{467 xbUInt32 ulAppendLocked; \textcolor{comment}{// record number of the new record for the append lock operation}}
-\DoxyCodeLine{468 xbLinkListOrd<xbUInt32> lloRecLocks; \textcolor{comment}{// ordered link list of locked records}}
-\DoxyCodeLine{469 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{442 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sAlias; \textcolor{comment}{// table alias}}
+\DoxyCodeLine{443 xbInt16 iNoOfFields;}
+\DoxyCodeLine{444 xbInt16 iDbfStatus; \textcolor{comment}{// 0 = closed}}
+\DoxyCodeLine{445 \textcolor{comment}{// 1 = open}}
+\DoxyCodeLine{446 \textcolor{comment}{// 2 = updates pending}}
+\DoxyCodeLine{447 }
+\DoxyCodeLine{448 xbSchemaRec *SchemaPtr; \textcolor{comment}{// Pointer to field data}}
+\DoxyCodeLine{449 \textcolor{keywordtype}{char} *RecBuf; \textcolor{comment}{// Pointer to record buffer}}
+\DoxyCodeLine{450 \textcolor{keywordtype}{char} *RecBuf2; \textcolor{comment}{// Pointer to original rec buf allocation}}
+\DoxyCodeLine{451 }
+\DoxyCodeLine{452 }
+\DoxyCodeLine{453 \textcolor{comment}{/* Next several variables are database header fields, up through dbase V */}}
+\DoxyCodeLine{454 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cVersion;}
+\DoxyCodeLine{455 \textcolor{keywordtype}{char} cUpdateYY;}
+\DoxyCodeLine{456 \textcolor{keywordtype}{char} cUpdateMM;}
+\DoxyCodeLine{457 \textcolor{keywordtype}{char} cUpdateDD;}
+\DoxyCodeLine{458 xbUInt32 ulNoOfRecs;}
+\DoxyCodeLine{459 xbUInt16 uiHeaderLen;}
+\DoxyCodeLine{460 xbUInt16 uiRecordLen;}
+\DoxyCodeLine{461 \textcolor{keywordtype}{char} cTransactionFlag;}
+\DoxyCodeLine{462 \textcolor{keywordtype}{char} cEncryptionFlag;}
+\DoxyCodeLine{463 \textcolor{keywordtype}{char} cIndexFlag;}
+\DoxyCodeLine{464 \textcolor{keywordtype}{char} cLangDriver; \textcolor{comment}{// dbase 7 sets to 1B}}
+\DoxyCodeLine{465 }
+\DoxyCodeLine{466 }
+\DoxyCodeLine{467 }
+\DoxyCodeLine{468 \textcolor{keyword}{private}:}
+\DoxyCodeLine{469 \textcolor{keywordtype}{void} ResetNoOfRecords(); }
\DoxyCodeLine{470 }
-\DoxyCodeLine{471 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{472 xbIxList *ixList; \textcolor{comment}{// pointer to a list of indices associated with the table}}
-\DoxyCodeLine{473 xbIx *pCurIx; \textcolor{comment}{// Pointer to current index class}}
-\DoxyCodeLine{474 \textcolor{keywordtype}{void} *vpCurIxTag; \textcolor{comment}{// Pointer to current tag}}
-\DoxyCodeLine{475 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sCurIxType; \textcolor{comment}{// Current index type}}
-\DoxyCodeLine{476 xbLinkList<xbTag *> llTags; \textcolor{comment}{// linked list of open tags}}
-\DoxyCodeLine{477 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
-\DoxyCodeLine{478 }
-\DoxyCodeLine{479 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
-\DoxyCodeLine{480 xbLinkList<xbString> llInfData; \textcolor{comment}{// linked list of strings containing ndx file entries}}
-\DoxyCodeLine{481 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
-\DoxyCodeLine{482 }
-\DoxyCodeLine{483 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{484 xbBlockRead *pRb;}
-\DoxyCodeLine{485 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bBlockReadEnabled; \textcolor{comment}{// if true, then block read mode is on}}
-\DoxyCodeLine{486 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{487 }
+\DoxyCodeLine{471 }
+\DoxyCodeLine{472 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{473 xbInt16 iAutoLock; \textcolor{comment}{// 0 -\/ autolock off, 1 -\/ autolock on}}
+\DoxyCodeLine{474 xbInt16 iLockFlavor;}
+\DoxyCodeLine{475 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bTableLocked; \textcolor{comment}{// is the table locked}}
+\DoxyCodeLine{476 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHeaderLocked; \textcolor{comment}{// is the header locked}}
+\DoxyCodeLine{477 xbUInt32 ulAppendLocked; \textcolor{comment}{// record number of the new record for the append lock operation}}
+\DoxyCodeLine{478 xbLinkListOrd<xbUInt32> lloRecLocks; \textcolor{comment}{// ordered link list of locked records}}
+\DoxyCodeLine{479 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{480 }
+\DoxyCodeLine{481 \textcolor{preprocessor}{ \#ifdef XB\_INDEX\_SUPPORT}}
+\DoxyCodeLine{482 xbIxList *ixList; \textcolor{comment}{// pointer to a list of indices associated with the table}}
+\DoxyCodeLine{483 xbIx *pCurIx; \textcolor{comment}{// Pointer to current index class}}
+\DoxyCodeLine{484 \textcolor{keywordtype}{void} *vpCurIxTag; \textcolor{comment}{// Pointer to current tag}}
+\DoxyCodeLine{485 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sCurIxType; \textcolor{comment}{// Current index type}}
+\DoxyCodeLine{486 xbLinkList<xbTag *> llTags; \textcolor{comment}{// linked list of open tags}}
+\DoxyCodeLine{487 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INDEX\_SUPPORT}}
\DoxyCodeLine{488 }
-\DoxyCodeLine{489 }
-\DoxyCodeLine{490 \};}
-\DoxyCodeLine{491 }
+\DoxyCodeLine{489 \textcolor{preprocessor}{ \#ifdef XB\_INF\_SUPPORT}}
+\DoxyCodeLine{490 xbLinkList<xbString> llInfData; \textcolor{comment}{// linked list of strings containing ndx file entries}}
+\DoxyCodeLine{491 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_INF\_SUPPORT}}
\DoxyCodeLine{492 }
-\DoxyCodeLine{493 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
-\DoxyCodeLine{495 }
-\DoxyCodeLine{501 \textcolor{keyword}{class }XBDLLEXPORT xbDbf3 : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \{}
-\DoxyCodeLine{502 \textcolor{keyword}{public}:}
-\DoxyCodeLine{503 xbDbf3(\mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *x);}
-\DoxyCodeLine{504 \string~xbDbf3();}
-\DoxyCodeLine{505 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *, xbInt16 iOverlay, xbInt16 iShareMode );}
-\DoxyCodeLine{506 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
-\DoxyCodeLine{507 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
-\DoxyCodeLine{508 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sNewName );}
-\DoxyCodeLine{509 }
-\DoxyCodeLine{510 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{511 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
-\DoxyCodeLine{512 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{513 }
-\DoxyCodeLine{514 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{515 xbInt16 SetVersion ();}
-\DoxyCodeLine{516 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *s );}
-\DoxyCodeLine{517 }
-\DoxyCodeLine{518 \textcolor{keyword}{private}:}
+\DoxyCodeLine{493 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{494 xbBlockRead *pRb;}
+\DoxyCodeLine{495 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bBlockReadEnabled; \textcolor{comment}{// if true, then block read mode is on}}
+\DoxyCodeLine{496 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{497 }
+\DoxyCodeLine{498 }
+\DoxyCodeLine{499 }
+\DoxyCodeLine{500 \};}
+\DoxyCodeLine{501 }
+\DoxyCodeLine{502 }
+\DoxyCodeLine{503 \textcolor{preprocessor}{\#ifdef XB\_DBF3\_SUPPORT}}
+\DoxyCodeLine{505 }
+\DoxyCodeLine{511 \textcolor{keyword}{class }XBDLLEXPORT xbDbf3 : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \{}
+\DoxyCodeLine{512 \textcolor{keyword}{public}:}
+\DoxyCodeLine{513 xbDbf3(\mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *x);}
+\DoxyCodeLine{514 \string~xbDbf3();}
+\DoxyCodeLine{515 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *, xbInt16 iOverlay, xbInt16 iShareMode );}
+\DoxyCodeLine{516 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
+\DoxyCodeLine{517 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{518 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sNewName );}
\DoxyCodeLine{519 }
-\DoxyCodeLine{520 \};}
-\DoxyCodeLine{521 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF3\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{522 }
+\DoxyCodeLine{520 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{521 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
+\DoxyCodeLine{522 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{523 }
-\DoxyCodeLine{524 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
-\DoxyCodeLine{526 }
-\DoxyCodeLine{531 \textcolor{keyword}{class }XBDLLEXPORT xbDbf4 : \textcolor{keyword}{public} \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} \{}
-\DoxyCodeLine{532 \textcolor{keyword}{public}:}
-\DoxyCodeLine{533 xbDbf4( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
-\DoxyCodeLine{534 }
-\DoxyCodeLine{535 \string~xbDbf4();}
+\DoxyCodeLine{524 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{525 xbInt16 SetVersion ();}
+\DoxyCodeLine{526 \textcolor{keyword}{virtual} xbInt16 ValidateSchema( \mbox{\hyperlink{structxb_1_1xbSchema}{xbSchema}} *s );}
+\DoxyCodeLine{527 }
+\DoxyCodeLine{528 \textcolor{keyword}{private}:}
+\DoxyCodeLine{529 }
+\DoxyCodeLine{530 \};}
+\DoxyCodeLine{531 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF3\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{532 }
+\DoxyCodeLine{533 }
+\DoxyCodeLine{534 \textcolor{preprocessor}{\#ifdef XB\_DBF4\_SUPPORT}}
\DoxyCodeLine{536 }
-\DoxyCodeLine{537 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );}
-\DoxyCodeLine{538 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
-\DoxyCodeLine{539 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
-\DoxyCodeLine{540 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} xbString sNewName );}
-\DoxyCodeLine{541 }
-\DoxyCodeLine{542 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
-\DoxyCodeLine{543 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
-\DoxyCodeLine{544 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{545 }
-\DoxyCodeLine{546 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{547 \textcolor{comment}{// void InitVars ();}}
-\DoxyCodeLine{548 xbInt16 SetVersion();}
-\DoxyCodeLine{549 \textcolor{keyword}{virtual} xbInt16 ValidateSchema ( xbSchema *s );}
-\DoxyCodeLine{550 }
-\DoxyCodeLine{551 \textcolor{keyword}{private}:}
-\DoxyCodeLine{552 }
-\DoxyCodeLine{553 \};}
-\DoxyCodeLine{554 }
-\DoxyCodeLine{555 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF4\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{556 }
-\DoxyCodeLine{557 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{558 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBF\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{541 \textcolor{keyword}{class }XBDLLEXPORT xbDbf4 : \textcolor{keyword}{public} \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} \{}
+\DoxyCodeLine{542 \textcolor{keyword}{public}:}
+\DoxyCodeLine{543 xbDbf4( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *x );}
+\DoxyCodeLine{544 }
+\DoxyCodeLine{545 \string~xbDbf4();}
+\DoxyCodeLine{546 }
+\DoxyCodeLine{547 \textcolor{keyword}{virtual} xbInt16 CreateTable ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );}
+\DoxyCodeLine{548 \textcolor{keyword}{virtual} xbInt16 GetVersion () \textcolor{keyword}{const};}
+\DoxyCodeLine{549 \textcolor{keyword}{virtual} xbInt16 Open ( \textcolor{keyword}{const} xbString \&sTableName, \textcolor{keyword}{const} xbString \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{550 \textcolor{keyword}{virtual} xbInt16 Rename ( \textcolor{keyword}{const} xbString sNewName );}
+\DoxyCodeLine{551 }
+\DoxyCodeLine{552 \textcolor{preprocessor}{ \#ifdef XB\_MEMO\_SUPPORT}}
+\DoxyCodeLine{553 \textcolor{keyword}{virtual} xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );}
+\DoxyCodeLine{554 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{555 }
+\DoxyCodeLine{556 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{557 \textcolor{comment}{// void InitVars ();}}
+\DoxyCodeLine{558 xbInt16 SetVersion();}
+\DoxyCodeLine{559 \textcolor{keyword}{virtual} xbInt16 ValidateSchema ( xbSchema *s );}
+\DoxyCodeLine{560 }
+\DoxyCodeLine{561 \textcolor{keyword}{private}:}
+\DoxyCodeLine{562 }
+\DoxyCodeLine{563 \};}
+\DoxyCodeLine{564 }
+\DoxyCodeLine{565 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_DBF4\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{566 }
+\DoxyCodeLine{567 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{568 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBF\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbdelete_8cpp.tex b/docs/doxygen/latex/xbdelete_8cpp.tex
index f24ada6..739077c 100644
--- a/docs/doxygen/latex/xbdelete_8cpp.tex
+++ b/docs/doxygen/latex/xbdelete_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbdelete_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdelete.cpp File Reference}
-\label{xbdelete_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdelete.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdelete.cpp}}
+\hypertarget{xbdelete_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdelete.cpp File Reference}
+\label{xbdelete_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdelete.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdelete.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdrpix_8cpp.tex b/docs/doxygen/latex/xbdrpix_8cpp.tex
index 39be17f..595716d 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.1.0/src/sql/xbdrpix.cpp File Reference}
-\label{xbdrpix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrpix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrpix.cpp}}
+\hypertarget{xbdrpix_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrpix.cpp File Reference}
+\label{xbdrpix_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrpix.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrpix.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbdrptbl_8cpp.tex b/docs/doxygen/latex/xbdrptbl_8cpp.tex
index c31d938..dc9f5c3 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.1.0/src/sql/xbdrptbl.cpp File Reference}
-\label{xbdrptbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrptbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbdrptbl.cpp}}
+\hypertarget{xbdrptbl_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrptbl.cpp File Reference}
+\label{xbdrptbl_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrptbl.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbdrptbl.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbexp_8cpp.tex b/docs/doxygen/latex/xbexp_8cpp.tex
index 554b4cd..fa163fe 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.1.0/src/core/xbexp.cpp File Reference}
-\label{xbexp_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbexp.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbexp.cpp}}
+\hypertarget{xbexp_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbexp.cpp File Reference}
+\label{xbexp_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbexp.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbexp.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbexp_8h.tex b/docs/doxygen/latex/xbexp_8h.tex
index 4b3e7a7..bf47046 100644
--- a/docs/doxygen/latex/xbexp_8h.tex
+++ b/docs/doxygen/latex/xbexp_8h.tex
@@ -1,2 +1,16 @@
-\hypertarget{xbexp_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/include/xbexp.h File Reference}
-\label{xbexp_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexp.h}}
+\hypertarget{xbexp_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h File Reference}
+\label{xbexp_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h}}
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\#define \mbox{\hyperlink{xbexp_8h_a6e9d2ccba2b3ac6e44ab411ffda488c2}{XB\+\_\+\+NULL\+\_\+\+DATE}}~21474835648
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Macro Definition Documentation}
+\mbox{\Hypertarget{xbexp_8h_a6e9d2ccba2b3ac6e44ab411ffda488c2}\label{xbexp_8h_a6e9d2ccba2b3ac6e44ab411ffda488c2}}
+\index{xbexp.h@{xbexp.h}!XB\_NULL\_DATE@{XB\_NULL\_DATE}}
+\index{XB\_NULL\_DATE@{XB\_NULL\_DATE}!xbexp.h@{xbexp.h}}
+\doxysubsubsection{\texorpdfstring{XB\_NULL\_DATE}{XB\_NULL\_DATE}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+NULL\+\_\+\+DATE~21474835648}
+
diff --git a/docs/doxygen/latex/xbexp_8h_source.tex b/docs/doxygen/latex/xbexp_8h_source.tex
index 26b5f1a..af4609a 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.1.0/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexp.h}}
+\label{xbexp_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexp.h}}
\mbox{\hyperlink{xbexp_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbexp.h}}
@@ -26,139 +26,140 @@
\DoxyCodeLine{22 \textcolor{comment}{// \#pragma interface}}
\DoxyCodeLine{23 \textcolor{comment}{// \#endif}}
\DoxyCodeLine{24 }
-\DoxyCodeLine{25 }
+\DoxyCodeLine{25 \textcolor{preprocessor}{\#define XB\_NULL\_DATE 21474835648}}
\DoxyCodeLine{26 }
-\DoxyCodeLine{27 \textcolor{preprocessor}{\#ifdef XB\_FUNCTION\_SUPPORT}}
-\DoxyCodeLine{28 \textcolor{preprocessor}{\#define XB\_EXP\_CHAR 'C'}}
-\DoxyCodeLine{29 \textcolor{preprocessor}{\#define XB\_EXP\_DATE 'D'}}
-\DoxyCodeLine{30 \textcolor{preprocessor}{\#define XB\_EXP\_LOGICAL 'L'}}
-\DoxyCodeLine{31 \textcolor{preprocessor}{\#define XB\_EXP\_NUMERIC 'N'}}
-\DoxyCodeLine{32 \textcolor{preprocessor}{\#define XB\_EXP\_UNKNOWN 'U'}}
-\DoxyCodeLine{33 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{34 }
-\DoxyCodeLine{35 \textcolor{preprocessor}{\#ifdef XB\_EXPRESSION\_SUPPORT}}
-\DoxyCodeLine{36 }
-\DoxyCodeLine{37 \textcolor{preprocessor}{\#define XB\_EXP\_CONSTANT 'C'}}
-\DoxyCodeLine{38 \textcolor{preprocessor}{\#define XB\_EXP\_FUNCTION 'F'}}
-\DoxyCodeLine{39 \textcolor{preprocessor}{\#define XB\_EXP\_FIELD 'D'}}
-\DoxyCodeLine{40 \textcolor{preprocessor}{\#define XB\_EXP\_OPERATOR 'O'}}
-\DoxyCodeLine{41 \textcolor{preprocessor}{\#define XB\_EXP\_NOTROOT 'N' }\textcolor{comment}{// not root node, needs further parsing}}
-\DoxyCodeLine{42 \textcolor{preprocessor}{\#define XB\_EXP\_PRE\_OPERATOR 'B' }\textcolor{comment}{// (B)efore) pre increment, pre decrement}}
-\DoxyCodeLine{43 \textcolor{preprocessor}{\#define XB\_EXP\_POST\_OPERATOR 'A' }\textcolor{comment}{// (A)fter) post increment, pre decrement}}
-\DoxyCodeLine{44 }
-\DoxyCodeLine{45 \textcolor{preprocessor}{\#define XB\_END\_OF\_EXPRESSION -\/100}}
-\DoxyCodeLine{46 }
-\DoxyCodeLine{47 \textcolor{comment}{// \#define XB\_UNBALANCED\_PARENS -\/101}}
-\DoxyCodeLine{48 \textcolor{comment}{// \#define XB\_UNBALANCED\_QUOTES -\/102}}
-\DoxyCodeLine{49 }
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{preprocessor}{\#ifdef XB\_FUNCTION\_SUPPORT}}
+\DoxyCodeLine{29 \textcolor{preprocessor}{\#define XB\_EXP\_CHAR 'C'}}
+\DoxyCodeLine{30 \textcolor{preprocessor}{\#define XB\_EXP\_DATE 'D'}}
+\DoxyCodeLine{31 \textcolor{preprocessor}{\#define XB\_EXP\_LOGICAL 'L'}}
+\DoxyCodeLine{32 \textcolor{preprocessor}{\#define XB\_EXP\_NUMERIC 'N'}}
+\DoxyCodeLine{33 \textcolor{preprocessor}{\#define XB\_EXP\_UNKNOWN 'U'}}
+\DoxyCodeLine{34 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{36 \textcolor{preprocessor}{\#ifdef XB\_EXPRESSION\_SUPPORT}}
+\DoxyCodeLine{37 }
+\DoxyCodeLine{38 \textcolor{preprocessor}{\#define XB\_EXP\_CONSTANT 'C'}}
+\DoxyCodeLine{39 \textcolor{preprocessor}{\#define XB\_EXP\_FUNCTION 'F'}}
+\DoxyCodeLine{40 \textcolor{preprocessor}{\#define XB\_EXP\_FIELD 'D'}}
+\DoxyCodeLine{41 \textcolor{preprocessor}{\#define XB\_EXP\_OPERATOR 'O'}}
+\DoxyCodeLine{42 \textcolor{preprocessor}{\#define XB\_EXP\_NOTROOT 'N' }\textcolor{comment}{// not root node, needs further parsing}}
+\DoxyCodeLine{43 \textcolor{preprocessor}{\#define XB\_EXP\_PRE\_OPERATOR 'B' }\textcolor{comment}{// (B)efore) pre increment, pre decrement}}
+\DoxyCodeLine{44 \textcolor{preprocessor}{\#define XB\_EXP\_POST\_OPERATOR 'A' }\textcolor{comment}{// (A)fter) post increment, pre decrement}}
+\DoxyCodeLine{45 }
+\DoxyCodeLine{46 \textcolor{preprocessor}{\#define XB\_END\_OF\_EXPRESSION -\/100}}
+\DoxyCodeLine{47 }
+\DoxyCodeLine{48 \textcolor{comment}{// \#define XB\_UNBALANCED\_PARENS -\/101}}
+\DoxyCodeLine{49 \textcolor{comment}{// \#define XB\_UNBALANCED\_QUOTES -\/102}}
\DoxyCodeLine{50 }
-\DoxyCodeLine{51 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
-\DoxyCodeLine{52 }
-\DoxyCodeLine{54 \textcolor{keyword}{struct }XBDLLEXPORT xbExpToken \{}
-\DoxyCodeLine{55 xbString sExpression; \textcolor{comment}{// in -\/ expression to pull next token from}}
-\DoxyCodeLine{56 \textcolor{comment}{// out -\/ remainder of the expression after token removed}}
-\DoxyCodeLine{57 xbString sToken; \textcolor{comment}{// next token pulled from the expression}}
-\DoxyCodeLine{58 \textcolor{keywordtype}{char} cNodeType; \textcolor{comment}{// one of XB\_EXP\_CONSTANT, XB\_EXP\_FUNCTION, XB\_EXP\_FIELD, XB\_EXP\_OPERATOR, XB\_EXP\_NOTROOT}}
-\DoxyCodeLine{59 \textcolor{keywordtype}{char} cReturnType; \textcolor{comment}{// one of XB\_EXP\_CHAR, XB\_EXP\_DATE, XB\_EXP\_LOGICAL, XB\_EXP\_NUMERIC, XB\_EXP\_UNKNOWN}}
-\DoxyCodeLine{60 xbInt16 iSts; \textcolor{comment}{// return status after retrieving or attempting next token from expression}}
-\DoxyCodeLine{61 \textcolor{comment}{// 0 = no error}}
-\DoxyCodeLine{62 \textcolor{comment}{// XB\_END\_OF\_EXPRESSION}}
-\DoxyCodeLine{63 \textcolor{comment}{// XB\_UNBALANCED\_PARENS}}
-\DoxyCodeLine{64 \textcolor{comment}{// XB\_UNBALANCED\_QUOTES}}
-\DoxyCodeLine{65 \textcolor{keywordtype}{char} cPrevNodeType; \textcolor{comment}{// previous node type}}
-\DoxyCodeLine{66 \textcolor{keywordtype}{char} cPrevReturnType; \textcolor{comment}{// previous return type}}
-\DoxyCodeLine{67 }
-\DoxyCodeLine{68 \textcolor{comment}{// constructor}}
-\DoxyCodeLine{69 xbExpToken() \{ cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; \}}
-\DoxyCodeLine{70 \};}
-\DoxyCodeLine{72 }
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 \textcolor{keyword}{namespace }\mbox{\hyperlink{namespacexb}{xb}}\{}
+\DoxyCodeLine{53 }
+\DoxyCodeLine{55 \textcolor{keyword}{struct }XBDLLEXPORT xbExpToken \{}
+\DoxyCodeLine{56 xbString sExpression; \textcolor{comment}{// in -\/ expression to pull next token from}}
+\DoxyCodeLine{57 \textcolor{comment}{// out -\/ remainder of the expression after token removed}}
+\DoxyCodeLine{58 xbString sToken; \textcolor{comment}{// next token pulled from the expression}}
+\DoxyCodeLine{59 \textcolor{keywordtype}{char} cNodeType; \textcolor{comment}{// one of XB\_EXP\_CONSTANT, XB\_EXP\_FUNCTION, XB\_EXP\_FIELD, XB\_EXP\_OPERATOR, XB\_EXP\_NOTROOT}}
+\DoxyCodeLine{60 \textcolor{keywordtype}{char} cReturnType; \textcolor{comment}{// one of XB\_EXP\_CHAR, XB\_EXP\_DATE, XB\_EXP\_LOGICAL, XB\_EXP\_NUMERIC, XB\_EXP\_UNKNOWN}}
+\DoxyCodeLine{61 xbInt16 iSts; \textcolor{comment}{// return status after retrieving or attempting next token from expression}}
+\DoxyCodeLine{62 \textcolor{comment}{// 0 = no error}}
+\DoxyCodeLine{63 \textcolor{comment}{// XB\_END\_OF\_EXPRESSION}}
+\DoxyCodeLine{64 \textcolor{comment}{// XB\_UNBALANCED\_PARENS}}
+\DoxyCodeLine{65 \textcolor{comment}{// XB\_UNBALANCED\_QUOTES}}
+\DoxyCodeLine{66 \textcolor{keywordtype}{char} cPrevNodeType; \textcolor{comment}{// previous node type}}
+\DoxyCodeLine{67 \textcolor{keywordtype}{char} cPrevReturnType; \textcolor{comment}{// previous return type}}
+\DoxyCodeLine{68 }
+\DoxyCodeLine{69 \textcolor{comment}{// constructor}}
+\DoxyCodeLine{70 xbExpToken() \{ cNodeType = 0; cReturnType = 0; iSts = 0; cPrevNodeType = 0; cPrevReturnType = 0; \}}
+\DoxyCodeLine{71 \};}
\DoxyCodeLine{73 }
-\DoxyCodeLine{74 \textcolor{comment}{/************************************************************************/}}
-\DoxyCodeLine{75 }
-\DoxyCodeLine{77 }
-\DoxyCodeLine{132 \textcolor{keyword}{class }XBDLLEXPORT xbExp\{}
-\DoxyCodeLine{133 }
-\DoxyCodeLine{134 \textcolor{keyword}{public}:}
-\DoxyCodeLine{135 xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} * );}
-\DoxyCodeLine{136 xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *, \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * );}
-\DoxyCodeLine{137 \textcolor{keyword}{virtual} \string~xbExp();}
-\DoxyCodeLine{138 \textcolor{keywordtype}{void} ClearTreeHandle();}
-\DoxyCodeLine{139 }
+\DoxyCodeLine{74 }
+\DoxyCodeLine{75 \textcolor{comment}{/************************************************************************/}}
+\DoxyCodeLine{76 }
+\DoxyCodeLine{78 }
+\DoxyCodeLine{133 \textcolor{keyword}{class }XBDLLEXPORT xbExp\{}
+\DoxyCodeLine{134 }
+\DoxyCodeLine{135 \textcolor{keyword}{public}:}
+\DoxyCodeLine{136 xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} * );}
+\DoxyCodeLine{137 xbExp( \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *, \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * );}
+\DoxyCodeLine{138 \textcolor{keyword}{virtual} \string~xbExp();}
+\DoxyCodeLine{139 \textcolor{keywordtype}{void} ClearTreeHandle();}
\DoxyCodeLine{140 }
-\DoxyCodeLine{141 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{142 \textcolor{keywordtype}{void} DumpTree( xbInt16 iOption );}
-\DoxyCodeLine{143 \textcolor{keywordtype}{void} DumpToken( xbExpToken \&t, xbInt16 iOption = 0 );}
-\DoxyCodeLine{144 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{145 }
-\DoxyCodeLine{146 xbInt16 GetResultLen() \textcolor{keyword}{const};}
-\DoxyCodeLine{147 \textcolor{keywordtype}{char} GetReturnType() \textcolor{keyword}{const};}
-\DoxyCodeLine{148 xbInt16 GetBoolResult( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
-\DoxyCodeLine{149 xbInt16 GetDateResult( xbDate \&dtResult );}
-\DoxyCodeLine{150 xbInt16 GetNumericResult( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dResult );}
-\DoxyCodeLine{151 xbInt16 GetStringResult( xbString \&sResult );}
-\DoxyCodeLine{152 xbInt16 GetStringResult( \textcolor{keywordtype}{char} * vpResult, xbUInt32 ulLen );}
-\DoxyCodeLine{153 xbExpNode *GetTreeHandle();}
-\DoxyCodeLine{154 xbInt16 ParseExpression( \textcolor{keyword}{const} xbString \&sExpression );}
-\DoxyCodeLine{155 xbInt16 ParseExpression( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, \textcolor{keyword}{const} xbString \&sExpression );}
-\DoxyCodeLine{156 xbInt16 ProcessExpression();}
-\DoxyCodeLine{157 xbInt16 ProcessExpression( xbInt16 iRecBufSw );}
-\DoxyCodeLine{158 }
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{143 \textcolor{keywordtype}{void} DumpTree( xbInt16 iOption );}
+\DoxyCodeLine{144 \textcolor{keywordtype}{void} DumpToken( xbExpToken \&t, xbInt16 iOption = 0 );}
+\DoxyCodeLine{145 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{146 }
+\DoxyCodeLine{147 xbInt16 GetResultLen() \textcolor{keyword}{const};}
+\DoxyCodeLine{148 \textcolor{keywordtype}{char} GetReturnType() \textcolor{keyword}{const};}
+\DoxyCodeLine{149 xbInt16 GetBoolResult( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
+\DoxyCodeLine{150 xbInt16 GetDateResult( xbDate \&dtResult );}
+\DoxyCodeLine{151 xbInt16 GetNumericResult( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dResult );}
+\DoxyCodeLine{152 xbInt16 GetStringResult( xbString \&sResult );}
+\DoxyCodeLine{153 xbInt16 GetStringResult( \textcolor{keywordtype}{char} * vpResult, xbUInt32 ulLen );}
+\DoxyCodeLine{154 xbExpNode *GetTreeHandle();}
+\DoxyCodeLine{155 xbInt16 ParseExpression( \textcolor{keyword}{const} xbString \&sExpression );}
+\DoxyCodeLine{156 xbInt16 ParseExpression( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf, \textcolor{keyword}{const} xbString \&sExpression );}
+\DoxyCodeLine{157 xbInt16 ProcessExpression();}
+\DoxyCodeLine{158 xbInt16 ProcessExpression( xbInt16 iRecBufSw );}
\DoxyCodeLine{159 }
-\DoxyCodeLine{160 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{161 xbInt16 GetNextToken( xbExpToken \&t );}
-\DoxyCodeLine{162 xbInt16 OperatorWeight( \textcolor{keyword}{const} xbString \&sOperator );}
-\DoxyCodeLine{163 xbExpNode *GetNextNode( xbExpNode * n ) \textcolor{keyword}{const}; \textcolor{comment}{// traverses the tree from bottom left node, right, then up}}
-\DoxyCodeLine{164 }
-\DoxyCodeLine{165 \textcolor{keyword}{private}: \textcolor{comment}{// methods}}
-\DoxyCodeLine{166 }
-\DoxyCodeLine{167 \textcolor{comment}{// xbInt16 CalcExpressionResultLen();}}
-\DoxyCodeLine{168 xbInt16 CalcFunctionResultLen( xbExpNode *n ) \textcolor{keyword}{const};}
-\DoxyCodeLine{169 xbInt16 CalcCharNodeLen( xbExpNode *n );}
-\DoxyCodeLine{170 xbInt16 CheckParensAndQuotes( \textcolor{keyword}{const} xbString \&sExpression );}
-\DoxyCodeLine{171 xbInt16 GetExpressionResultLen() \textcolor{keyword}{const};}
-\DoxyCodeLine{172 }
-\DoxyCodeLine{173 xbInt16 GetTokenCharConstant ( xbExpToken \&t );}
-\DoxyCodeLine{174 xbInt16 GetTokenDatabaseField ( xbExpToken \&t );}
-\DoxyCodeLine{175 xbInt16 GetTokenDateConstant ( xbExpToken \&t );}
-\DoxyCodeLine{176 xbInt16 GetTokenFunction ( xbExpToken \&t );}
-\DoxyCodeLine{177 xbInt16 GetTokenLogicalConstant( xbExpToken \&t );}
-\DoxyCodeLine{178 xbInt16 GetTokenNumericConstant( xbExpToken \&t );}
-\DoxyCodeLine{179 xbInt16 GetTokenOperator ( xbExpToken \&t );}
-\DoxyCodeLine{180 xbInt16 GetTokenParen ( xbExpToken \&t );}
-\DoxyCodeLine{181 }
-\DoxyCodeLine{182 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsFunction ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} \&cReturnType );}
-\DoxyCodeLine{183 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLogicalConstant ( \textcolor{keyword}{const} xbString \&sExp );}
-\DoxyCodeLine{184 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNumericConstant ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} cPrevNodeType );}
-\DoxyCodeLine{185 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsOperator ( \textcolor{keyword}{const} xbString \&sExp );}
-\DoxyCodeLine{186 \textcolor{keywordtype}{char} IsTokenSeparator ( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{187 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsWhiteSpace ( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{188 }
-\DoxyCodeLine{189 xbInt16 ParseExpression ( \textcolor{keyword}{const} xbString \&sExpression, xbInt16 iWeight );}
-\DoxyCodeLine{190 xbInt16 ParseExpressionConstant( xbExpToken \&t, xbExpNode *n );}
-\DoxyCodeLine{191 xbInt16 ParseExpressionFunction( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
-\DoxyCodeLine{192 xbInt16 ParseExpressionFunctionParms( \textcolor{keyword}{const} xbString \&sParms, xbLinkList<xbString> \&llParms );}
-\DoxyCodeLine{193 xbInt16 ParseExpressionField ( xbExpToken \&t, xbExpNode *n );}
-\DoxyCodeLine{194 xbInt16 ParseExpressionOperator( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
-\DoxyCodeLine{195 }
-\DoxyCodeLine{196 xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );}
-\DoxyCodeLine{197 xbInt16 ProcessExpressionOperator( xbExpNode *n );}
-\DoxyCodeLine{198 }
-\DoxyCodeLine{199 \textcolor{keyword}{private}: \textcolor{comment}{// fields}}
-\DoxyCodeLine{200 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase;}
-\DoxyCodeLine{201 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
-\DoxyCodeLine{202 xbExpNode *nTree; \textcolor{comment}{// pointer to tree of expNodes}}
-\DoxyCodeLine{203 \textcolor{comment}{// xbInt16 iExpLen; // size of expression result}}
-\DoxyCodeLine{204 }
+\DoxyCodeLine{160 }
+\DoxyCodeLine{161 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{162 xbInt16 GetNextToken( xbExpToken \&t );}
+\DoxyCodeLine{163 xbInt16 OperatorWeight( \textcolor{keyword}{const} xbString \&sOperator );}
+\DoxyCodeLine{164 xbExpNode *GetNextNode( xbExpNode * n ) \textcolor{keyword}{const}; \textcolor{comment}{// traverses the tree from bottom left node, right, then up}}
+\DoxyCodeLine{165 }
+\DoxyCodeLine{166 \textcolor{keyword}{private}: \textcolor{comment}{// methods}}
+\DoxyCodeLine{167 }
+\DoxyCodeLine{168 \textcolor{comment}{// xbInt16 CalcExpressionResultLen();}}
+\DoxyCodeLine{169 xbInt16 CalcFunctionResultLen( xbExpNode *n ) \textcolor{keyword}{const};}
+\DoxyCodeLine{170 xbInt16 CalcCharNodeLen( xbExpNode *n );}
+\DoxyCodeLine{171 xbInt16 CheckParensAndQuotes( \textcolor{keyword}{const} xbString \&sExpression );}
+\DoxyCodeLine{172 xbInt16 GetExpressionResultLen() \textcolor{keyword}{const};}
+\DoxyCodeLine{173 }
+\DoxyCodeLine{174 xbInt16 GetTokenCharConstant ( xbExpToken \&t );}
+\DoxyCodeLine{175 xbInt16 GetTokenDatabaseField ( xbExpToken \&t );}
+\DoxyCodeLine{176 xbInt16 GetTokenDateConstant ( xbExpToken \&t );}
+\DoxyCodeLine{177 xbInt16 GetTokenFunction ( xbExpToken \&t );}
+\DoxyCodeLine{178 xbInt16 GetTokenLogicalConstant( xbExpToken \&t );}
+\DoxyCodeLine{179 xbInt16 GetTokenNumericConstant( xbExpToken \&t );}
+\DoxyCodeLine{180 xbInt16 GetTokenOperator ( xbExpToken \&t );}
+\DoxyCodeLine{181 xbInt16 GetTokenParen ( xbExpToken \&t );}
+\DoxyCodeLine{182 }
+\DoxyCodeLine{183 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsFunction ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} \&cReturnType );}
+\DoxyCodeLine{184 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLogicalConstant ( \textcolor{keyword}{const} xbString \&sExp );}
+\DoxyCodeLine{185 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNumericConstant ( \textcolor{keyword}{const} xbString \&sExp, \textcolor{keywordtype}{char} cPrevNodeType );}
+\DoxyCodeLine{186 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsOperator ( \textcolor{keyword}{const} xbString \&sExp );}
+\DoxyCodeLine{187 \textcolor{keywordtype}{char} IsTokenSeparator ( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{188 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsWhiteSpace ( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{189 }
+\DoxyCodeLine{190 xbInt16 ParseExpression ( \textcolor{keyword}{const} xbString \&sExpression, xbInt16 iWeight );}
+\DoxyCodeLine{191 xbInt16 ParseExpressionConstant( xbExpToken \&t, xbExpNode *n );}
+\DoxyCodeLine{192 xbInt16 ParseExpressionFunction( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
+\DoxyCodeLine{193 xbInt16 ParseExpressionFunctionParms( \textcolor{keyword}{const} xbString \&sParms, xbLinkList<xbString> \&llParms );}
+\DoxyCodeLine{194 xbInt16 ParseExpressionField ( xbExpToken \&t, xbExpNode *n );}
+\DoxyCodeLine{195 xbInt16 ParseExpressionOperator( xbExpToken \&t, xbExpNode *n, xbInt16 iWeight );}
+\DoxyCodeLine{196 }
+\DoxyCodeLine{197 xbInt16 ProcessExpressionFunction( xbExpNode *n, xbInt16 iRecBufSw = 0 );}
+\DoxyCodeLine{198 xbInt16 ProcessExpressionOperator( xbExpNode *n );}
+\DoxyCodeLine{199 }
+\DoxyCodeLine{200 \textcolor{keyword}{private}: \textcolor{comment}{// fields}}
+\DoxyCodeLine{201 \mbox{\hyperlink{namespacexb_a97858ddeb1c4b0100f3edc1a46d3a8b0}{xbXBase}} *xbase;}
+\DoxyCodeLine{202 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
+\DoxyCodeLine{203 xbExpNode *nTree; \textcolor{comment}{// pointer to tree of expNodes}}
+\DoxyCodeLine{204 \textcolor{comment}{// xbInt16 iExpLen; // size of expression result}}
\DoxyCodeLine{205 }
-\DoxyCodeLine{206 \};}
-\DoxyCodeLine{207 }
-\DoxyCodeLine{208 \textcolor{comment}{/* Expression handler */}}
-\DoxyCodeLine{209 }
+\DoxyCodeLine{206 }
+\DoxyCodeLine{207 \};}
+\DoxyCodeLine{208 }
+\DoxyCodeLine{209 \textcolor{comment}{/* Expression handler */}}
\DoxyCodeLine{210 }
-\DoxyCodeLine{211 \};}
-\DoxyCodeLine{212 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_EXPRESSION\_SUPPORT}}
-\DoxyCodeLine{213 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// \_\_XB\_EXP\_H\_\_}}
-\DoxyCodeLine{214 }
+\DoxyCodeLine{211 }
+\DoxyCodeLine{212 \};}
+\DoxyCodeLine{213 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_EXPRESSION\_SUPPORT}}
+\DoxyCodeLine{214 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// \_\_XB\_EXP\_H\_\_}}
\DoxyCodeLine{215 }
+\DoxyCodeLine{216 }
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbexpnode_8cpp.tex b/docs/doxygen/latex/xbexpnode_8cpp.tex
index 3ebbca7..dc7203f 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.1.0/src/core/xbexpnode.cpp File Reference}
-\label{xbexpnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbexpnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbexpnode.cpp}}
+\hypertarget{xbexpnode_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbexpnode.cpp File Reference}
+\label{xbexpnode_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbexpnode.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbexpnode.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbexpnode_8h.tex b/docs/doxygen/latex/xbexpnode_8h.tex
index bfc9f0d..c544ba1 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.1.0/src/include/xbexpnode.h File Reference}
-\label{xbexpnode_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexpnode.h}}
+\hypertarget{xbexpnode_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h File Reference}
+\label{xbexpnode_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h}}
diff --git a/docs/doxygen/latex/xbexpnode_8h_source.tex b/docs/doxygen/latex/xbexpnode_8h_source.tex
index ddd8ed1..bc3271b 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.1.0/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbexpnode.h}}
+\label{xbexpnode_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbexpnode.h}}
\mbox{\hyperlink{xbexpnode_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbexpnode.h}}
@@ -94,7 +94,7 @@
\DoxyCodeLine{103 xbUInt32 ulResultLen; \textcolor{comment}{// for string results, accumulated length of character operations}}
\DoxyCodeLine{104 \textcolor{comment}{// includes the sum of all nodes under this + this}}
\DoxyCodeLine{105 \textcolor{comment}{// date = 8, numeric = 4, logical = 1}}
-\DoxyCodeLine{106 xbInt16 iWeight; \textcolor{comment}{// used for buildign the tree of nodes, assigned to operators}}
+\DoxyCodeLine{106 xbInt16 iWeight; \textcolor{comment}{// used for building the tree of nodes, assigned to operators}}
\DoxyCodeLine{107 \textcolor{comment}{// the higher the number, the lower it goes on the tree}}
\DoxyCodeLine{108 }
\DoxyCodeLine{109 \};}
diff --git a/docs/doxygen/latex/xbfields_8cpp.tex b/docs/doxygen/latex/xbfields_8cpp.tex
index 723435f..71ab977 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.1.0/src/core/xbfields.cpp File Reference}
-\label{xbfields_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfields.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfields.cpp}}
+\hypertarget{xbfields_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbfields.cpp File Reference}
+\label{xbfields_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfields.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfields.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbfile_8cpp.tex b/docs/doxygen/latex/xbfile_8cpp.tex
index 247d030..0547c81 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.1.0/src/core/xbfile.cpp File Reference}
-\label{xbfile_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfile.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfile.cpp}}
+\hypertarget{xbfile_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbfile.cpp File Reference}
+\label{xbfile_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfile.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfile.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbfile_8h.tex b/docs/doxygen/latex/xbfile_8h.tex
index a3c4964..7d7b3b4 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.1.0/src/include/xbfile.h File Reference}
-\label{xbfile_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfile.h}}
+\hypertarget{xbfile_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h File Reference}
+\label{xbfile_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbfile_8h_source.tex b/docs/doxygen/latex/xbfile_8h_source.tex
index 34e78f5..9254dd4 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.1.0/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfile.h}}
+\label{xbfile_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfile.h}}
\mbox{\hyperlink{xbfile_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbfile.h}}
@@ -40,144 +40,145 @@
\DoxyCodeLine{56 \textcolor{keyword}{class }XBDLLEXPORT \mbox{\hyperlink{classxb_1_1xbFile}{xbFile}} : \textcolor{keyword}{public} \mbox{\hyperlink{classxb_1_1xbSsv}{xbSsv}} \{}
\DoxyCodeLine{57 }
\DoxyCodeLine{58 \textcolor{keyword}{public}:}
-\DoxyCodeLine{59 \textcolor{comment}{// xbFile();}}
-\DoxyCodeLine{60 \mbox{\hyperlink{classxb_1_1xbFile}{xbFile}}( \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} * x );}
+\DoxyCodeLine{59 \mbox{\hyperlink{classxb_1_1xbFile}{xbFile}}( \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} * x );}
+\DoxyCodeLine{60 \mbox{\hyperlink{classxb_1_1xbFile}{\string~xbFile}}();}
\DoxyCodeLine{61 }
-\DoxyCodeLine{62 \mbox{\hyperlink{classxb_1_1xbFile}{\string~xbFile}}();}
-\DoxyCodeLine{63 }
-\DoxyCodeLine{64 xbInt16 SetHomeFolders();}
+\DoxyCodeLine{62 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDirectory() \textcolor{keyword}{const};}
+\DoxyCodeLine{63 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetFileName() \textcolor{keyword}{const};}
+\DoxyCodeLine{64 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetFqFileName() \textcolor{keyword}{const};}
\DoxyCodeLine{65 }
-\DoxyCodeLine{66 xbInt16 CreateUniqueFileName( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqnOut );}
-\DoxyCodeLine{67 xbInt16 CreateUniqueFileName( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqnOut, xbInt16 iOption );}
+\DoxyCodeLine{66 }
+\DoxyCodeLine{67 xbInt16 CreateUniqueFileName( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqnOut, xbInt16 iOption = 0 );}
\DoxyCodeLine{68 }
-\DoxyCodeLine{69 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDirectory() \textcolor{keyword}{const};}
-\DoxyCodeLine{70 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetFileName() \textcolor{keyword}{const};}
-\DoxyCodeLine{71 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetFqFileName() \textcolor{keyword}{const};}
-\DoxyCodeLine{72 }
-\DoxyCodeLine{73 \textcolor{keywordtype}{void} SetDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirectory);}
-\DoxyCodeLine{74 \textcolor{keywordtype}{void} SetFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName );}
-\DoxyCodeLine{75 \textcolor{keywordtype}{void} SetFqFileName( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqName );}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 xbUInt32 GetBlockSize () \textcolor{keyword}{const};}
-\DoxyCodeLine{78 xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );}
-\DoxyCodeLine{79 }
-\DoxyCodeLine{80 xbInt16 GetOpenMode () \textcolor{keyword}{const};}
-\DoxyCodeLine{81 xbInt16 GetShareMode () \textcolor{keyword}{const};}
+\DoxyCodeLine{69 xbInt16 DetermineXbaseTableVersion( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFileTypeByte ) \textcolor{keyword}{const};}
+\DoxyCodeLine{70 xbInt16 DetermineXbaseMemoVersion( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFileTypeByte ) \textcolor{keyword}{const};}
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} eGetDouble ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{73 xbInt32 eGetInt32 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{74 xbUInt32 eGetUInt32 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{75 xbInt16 eGetInt16 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{76 xbUInt16 eGetUInt16 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
+\DoxyCodeLine{77 \textcolor{keywordtype}{void} ePutDouble ( \textcolor{keywordtype}{char} *p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} d );}
+\DoxyCodeLine{78 \textcolor{keywordtype}{void} ePutInt32 ( \textcolor{keywordtype}{char} *p, xbInt32 l );}
+\DoxyCodeLine{79 \textcolor{keywordtype}{void} ePutUInt32 ( \textcolor{keywordtype}{char} *p, xbUInt32 ul );}
+\DoxyCodeLine{80 \textcolor{keywordtype}{void} ePutInt16 ( \textcolor{keywordtype}{char} *p, xbInt16 s );}
+\DoxyCodeLine{81 \textcolor{keywordtype}{void} ePutUInt16 ( \textcolor{keywordtype}{char} *p, xbUInt16 s );}
\DoxyCodeLine{82 }
-\DoxyCodeLine{83 xbInt16 GetFileDirPart ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileDirPartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{84 xbInt16 GetFileDirPart ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileDirPartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{85 xbInt16 GetFileExtPart ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileExtPartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{86 xbInt16 GetFileExtPart ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileExtPartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{87 xbInt16 GetFileNamePart( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileNamePartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{88 xbInt16 GetFileNamePart( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileNamePartOut ) \textcolor{keyword}{const};}
-\DoxyCodeLine{89 xbInt16 GetFileType ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileType ) \textcolor{keyword}{const};}
+\DoxyCodeLine{83 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists () \textcolor{keyword}{const};}
+\DoxyCodeLine{84 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{85 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{86 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{87 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileIsOpen () \textcolor{keyword}{const};}
+\DoxyCodeLine{88 }
+\DoxyCodeLine{89 xbUInt32 GetBlockSize () \textcolor{keyword}{const};}
\DoxyCodeLine{90 }
-\DoxyCodeLine{91 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 \&iVersion );}
-\DoxyCodeLine{92 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} \&cFileTypeByte );}
-\DoxyCodeLine{93 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} \&cFileTypeByte, xbInt16 \&iVersion );}
-\DoxyCodeLine{94 xbInt16 DetermineXbaseTableVersion( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFileTypeByte ) \textcolor{keyword}{const};}
-\DoxyCodeLine{95 xbInt16 DetermineXbaseMemoVersion( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} cFileTypeByte ) \textcolor{keyword}{const};}
-\DoxyCodeLine{96 }
-\DoxyCodeLine{97 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists () \textcolor{keyword}{const};}
-\DoxyCodeLine{98 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{99 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{100 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileExists ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{91 xbInt16 GetFileDirPart ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileDirPartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{92 xbInt16 GetFileDirPart ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileDirPartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{93 xbInt16 GetFileExtPart ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileExtPartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{94 xbInt16 GetFileExtPart ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileExtPartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{95 xbInt16 GetFileMtime ( time\_t \&mtime );}
+\DoxyCodeLine{96 xbInt16 GetFileNamePart( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileNamePartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{97 xbInt16 GetFileNamePart( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sCompleteFileNameIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileNamePartOut ) \textcolor{keyword}{const};}
+\DoxyCodeLine{98 xbInt16 GetFileSize ( xbUInt64 \&ullFileSize );}
+\DoxyCodeLine{99 xbInt16 GetFileType ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileType ) \textcolor{keyword}{const};}
+\DoxyCodeLine{100 }
\DoxyCodeLine{101 }
-\DoxyCodeLine{102 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} FileIsOpen () \textcolor{keyword}{const};}
-\DoxyCodeLine{103 }
-\DoxyCodeLine{104 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} readSize, \textcolor{keywordtype}{void} *buf );}
-\DoxyCodeLine{105 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, \textcolor{keywordtype}{size\_t} readSize, \textcolor{keywordtype}{void} *buf );}
-\DoxyCodeLine{106 xbInt16 WriteBlock( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} writeSize, \textcolor{keywordtype}{void} *buf );}
-\DoxyCodeLine{107 }
-\DoxyCodeLine{108 xbInt16 GetFileSize( xbUInt64 \&ullFileSize );}
-\DoxyCodeLine{109 xbInt16 GetFileMtime( time\_t \&mtime );}
-\DoxyCodeLine{110 }
-\DoxyCodeLine{111 \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} eGetDouble( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{112 xbInt32 eGetInt32 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{113 xbUInt32 eGetUInt32( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{114 xbInt16 eGetInt16 ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{115 xbUInt16 eGetUInt16( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p ) \textcolor{keyword}{const};}
-\DoxyCodeLine{116 \textcolor{keywordtype}{void} ePutDouble( \textcolor{keywordtype}{char} *p, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} d );}
-\DoxyCodeLine{117 \textcolor{keywordtype}{void} ePutInt32 ( \textcolor{keywordtype}{char} *p, xbInt32 l );}
-\DoxyCodeLine{118 \textcolor{keywordtype}{void} ePutUInt32( \textcolor{keywordtype}{char} *p, xbUInt32 ul );}
-\DoxyCodeLine{119 \textcolor{keywordtype}{void} ePutInt16 ( \textcolor{keywordtype}{char} *p, xbInt16 s );}
-\DoxyCodeLine{120 \textcolor{keywordtype}{void} ePutUInt16( \textcolor{keywordtype}{char} *p, xbUInt16 s );}
-\DoxyCodeLine{121 }
-\DoxyCodeLine{122 xbInt16 xbFclose ();}
-\DoxyCodeLine{123 xbInt16 xbFeof ();}
-\DoxyCodeLine{124 xbInt16 xbFflush ();}
-\DoxyCodeLine{125 xbInt16 xbFgetc ( xbInt32 \&c );}
-\DoxyCodeLine{126 xbInt16 xbFgetc ( \textcolor{keywordtype}{char} \&c );}
-\DoxyCodeLine{127 }
-\DoxyCodeLine{128 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{129 xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, \textcolor{keywordtype}{size\_t} stLen );}
-\DoxyCodeLine{130 xbInt16 GetLockRetryCount() \textcolor{keyword}{const};}
-\DoxyCodeLine{131 \textcolor{keywordtype}{void} SetLockRetryCount( xbInt16 iLockRetries );}
-\DoxyCodeLine{132 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{133 }
-\DoxyCodeLine{134 xbInt16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xbFopen}} ( xbInt16 iOpenMode );}
-\DoxyCodeLine{135 xbInt16 xbFopen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOpenMode, xbInt16 iShareMode );}
-\DoxyCodeLine{136 xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );}
-\DoxyCodeLine{137 xbInt16 xbFopen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMode, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iShareMode );}
-\DoxyCodeLine{138 }
-\DoxyCodeLine{139 xbInt16 xbFputc ( xbInt32 c );}
-\DoxyCodeLine{140 xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );}
-\DoxyCodeLine{141 xbInt16 xbFputs ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
-\DoxyCodeLine{142 xbInt16 xbFread ( \textcolor{keywordtype}{void} *ptr, \textcolor{keywordtype}{size\_t} size, \textcolor{keywordtype}{size\_t} nmemb );}
-\DoxyCodeLine{143 xbInt16 xbFgets ( \textcolor{keywordtype}{size\_t} lSize, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLine );}
-\DoxyCodeLine{144 }
-\DoxyCodeLine{145 \textcolor{keywordtype}{size\_t} xbFtell ();}
-\DoxyCodeLine{146 xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );}
-\DoxyCodeLine{147 }
-\DoxyCodeLine{148 \textcolor{keywordtype}{void} xbFTurnOffFileBuffering();}
-\DoxyCodeLine{149 xbInt16 xbFwrite ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *ptr, \textcolor{keywordtype}{size\_t} lSize, \textcolor{keywordtype}{size\_t} lNmemb );}
-\DoxyCodeLine{150 }
-\DoxyCodeLine{151 xbInt16 xbReadUntil ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} cDelim, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{152 xbInt16 xbRemove ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption );}
-\DoxyCodeLine{153 xbInt16 xbRemove ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName );}
-\DoxyCodeLine{154 xbInt16 xbRemove ();}
+\DoxyCodeLine{102 xbInt16 GetOpenMode () \textcolor{keyword}{const};}
+\DoxyCodeLine{103 xbInt16 GetShareMode () \textcolor{keyword}{const};}
+\DoxyCodeLine{104 }
+\DoxyCodeLine{105 }
+\DoxyCodeLine{106 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 \&iVersion );}
+\DoxyCodeLine{107 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} \&cFileTypeByte );}
+\DoxyCodeLine{108 xbInt16 GetXbaseFileTypeByte( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} \&cFileTypeByte, xbInt16 \&iVersion );}
+\DoxyCodeLine{109 }
+\DoxyCodeLine{110 xbInt16 NameSuffixMissing( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{111 }
+\DoxyCodeLine{112 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} readSize, \textcolor{keywordtype}{void} *buf );}
+\DoxyCodeLine{113 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, \textcolor{keywordtype}{size\_t} readSize, \textcolor{keywordtype}{void} *buf );}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{115 xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );}
+\DoxyCodeLine{116 \textcolor{keywordtype}{void} SetDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirectory);}
+\DoxyCodeLine{117 \textcolor{keywordtype}{void} SetFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName );}
+\DoxyCodeLine{118 \textcolor{keywordtype}{void} SetFqFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqName );}
+\DoxyCodeLine{119 xbInt16 SetHomeFolders();}
+\DoxyCodeLine{120 }
+\DoxyCodeLine{121 xbInt16 WriteBlock ( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} writeSize, \textcolor{keywordtype}{void} *buf );}
+\DoxyCodeLine{122 }
+\DoxyCodeLine{123 xbInt16 xbFclose ();}
+\DoxyCodeLine{124 xbInt16 xbFeof ();}
+\DoxyCodeLine{125 xbInt16 xbFflush ();}
+\DoxyCodeLine{126 xbInt16 xbFgetc ( xbInt32 \&c );}
+\DoxyCodeLine{127 xbInt16 xbFgetc ( \textcolor{keywordtype}{char} \&c );}
+\DoxyCodeLine{128 xbInt16 xbFgets ( \textcolor{keywordtype}{size\_t} lSize, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLine );}
+\DoxyCodeLine{129 }
+\DoxyCodeLine{130 }
+\DoxyCodeLine{131 xbInt16 \mbox{\hyperlink{classxb_1_1xbFile_a7cdfef5ede9ac98d44a28a6b7a70972c}{xbFopen}} ( xbInt16 iOpenMode );}
+\DoxyCodeLine{132 xbInt16 xbFopen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{133 xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );}
+\DoxyCodeLine{134 xbInt16 xbFopen ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sMode, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iShareMode );}
+\DoxyCodeLine{135 }
+\DoxyCodeLine{136 xbInt16 xbFputc ( xbInt32 c );}
+\DoxyCodeLine{137 xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );}
+\DoxyCodeLine{138 xbInt16 xbFputs ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
+\DoxyCodeLine{139 xbInt16 xbFread ( \textcolor{keywordtype}{void} *ptr, \textcolor{keywordtype}{size\_t} size, \textcolor{keywordtype}{size\_t} nmemb );}
+\DoxyCodeLine{140 xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );}
+\DoxyCodeLine{141 \textcolor{keywordtype}{size\_t} xbFtell ();}
+\DoxyCodeLine{142 \textcolor{keywordtype}{void} xbFTurnOffFileBuffering();}
+\DoxyCodeLine{143 }
+\DoxyCodeLine{144 xbInt16 xbReadUntil ( \textcolor{keyword}{const} \textcolor{keywordtype}{char} cDelim, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{145 xbInt16 xbRemove ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption );}
+\DoxyCodeLine{146 xbInt16 xbRemove ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName );}
+\DoxyCodeLine{147 xbInt16 xbRemove ();}
+\DoxyCodeLine{148 }
+\DoxyCodeLine{149 xbInt16 xbRename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNewName );}
+\DoxyCodeLine{150 \textcolor{keywordtype}{void} xbRewind ();}
+\DoxyCodeLine{151 }
+\DoxyCodeLine{152 xbInt16 xbFwrite ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *ptr, \textcolor{keywordtype}{size\_t} lSize, \textcolor{keywordtype}{size\_t} lNmemb );}
+\DoxyCodeLine{153 }
+\DoxyCodeLine{154 xbInt16 xbTruncate ( xbInt64 llSize );}
\DoxyCodeLine{155 }
-\DoxyCodeLine{156 xbInt16 xbRename ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOldName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNewName );}
-\DoxyCodeLine{157 \textcolor{keywordtype}{void} xbRewind ();}
-\DoxyCodeLine{158 }
-\DoxyCodeLine{159 xbInt16 xbTruncate ( xbInt64 llSize );}
-\DoxyCodeLine{160 xbInt16 NameSuffixMissing( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFileName, xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{161 }
-\DoxyCodeLine{162 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{163 xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} lBlockSize );}
-\DoxyCodeLine{164 xbInt16 DumpMemToDisk ( \textcolor{keywordtype}{char} *p, \textcolor{keywordtype}{size\_t} lBlockSize );}
-\DoxyCodeLine{165 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{166 }
+\DoxyCodeLine{156 }
+\DoxyCodeLine{157 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{158 xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, \textcolor{keywordtype}{size\_t} stLen );}
+\DoxyCodeLine{159 xbInt16 GetLockRetryCount() \textcolor{keyword}{const};}
+\DoxyCodeLine{160 \textcolor{keywordtype}{void} SetLockRetryCount( xbInt16 iLockRetries );}
+\DoxyCodeLine{161 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{162 }
+\DoxyCodeLine{163 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{164 xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, \textcolor{keywordtype}{size\_t} lBlockSize );}
+\DoxyCodeLine{165 xbInt16 DumpMemToDisk ( \textcolor{keywordtype}{char} *p, \textcolor{keywordtype}{size\_t} lBlockSize );}
+\DoxyCodeLine{166 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{167 }
-\DoxyCodeLine{168 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{169 }
-\DoxyCodeLine{170 \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *\mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}; \textcolor{comment}{/* pointer to the main structures */}}
-\DoxyCodeLine{171 }
-\DoxyCodeLine{172 \textcolor{keyword}{private}:}
-\DoxyCodeLine{173 FILE *fp;}
-\DoxyCodeLine{174 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFqFileName; \textcolor{comment}{/* fully qualified file name */}}
-\DoxyCodeLine{175 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFileName; \textcolor{comment}{/* file name */}}
-\DoxyCodeLine{176 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDirectory; \textcolor{comment}{/* directory, ends with / or \(\backslash\) */}}
-\DoxyCodeLine{177 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileOpen; \textcolor{comment}{/* true if file is open */}}
-\DoxyCodeLine{178 xbUInt32 ulBlockSize; \textcolor{comment}{/* used for memo and index files */}}
-\DoxyCodeLine{179 }
-\DoxyCodeLine{180 xbInt16 iOpenMode; \textcolor{comment}{/* XB\_READ || XB\_READ\_WRITE || XB\_WRITE */}}
-\DoxyCodeLine{181 xbInt16 iShareMode; \textcolor{comment}{/* XB\_SINGLE\_USER || XB\_MULTI\_USER -\/ set file buffering */}}
-\DoxyCodeLine{182 xbInt32 iFileNo; \textcolor{comment}{/* Library File No */}}
-\DoxyCodeLine{183 }
-\DoxyCodeLine{184 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{185 xbInt16 iLockRetries; \textcolor{comment}{/* file override number of lock attempts */}}
-\DoxyCodeLine{186 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{187 }
-\DoxyCodeLine{188 \textcolor{preprocessor}{ \#ifdef HAVE\_SETENDOFFILE\_F}}
-\DoxyCodeLine{189 HANDLE fHandle;}
-\DoxyCodeLine{190 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{191 }
+\DoxyCodeLine{168 }
+\DoxyCodeLine{169 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{170 }
+\DoxyCodeLine{171 \mbox{\hyperlink{classxb_1_1xbXBase}{xbXBase}} *\mbox{\hyperlink{classxb_1_1xbFile_ae39a67ea391b46055d4ca299cb222004}{xbase}}; \textcolor{comment}{/* pointer to the main structures */}}
+\DoxyCodeLine{172 }
+\DoxyCodeLine{173 \textcolor{keyword}{private}:}
+\DoxyCodeLine{174 FILE *fp;}
+\DoxyCodeLine{175 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFqFileName; \textcolor{comment}{/* fully qualified file name */}}
+\DoxyCodeLine{176 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sFileName; \textcolor{comment}{/* file name */}}
+\DoxyCodeLine{177 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDirectory; \textcolor{comment}{/* directory, ends with / or \(\backslash\) */}}
+\DoxyCodeLine{178 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFileOpen; \textcolor{comment}{/* true if file is open */}}
+\DoxyCodeLine{179 xbUInt32 ulBlockSize; \textcolor{comment}{/* used for memo and index files */}}
+\DoxyCodeLine{180 }
+\DoxyCodeLine{181 xbInt16 iOpenMode; \textcolor{comment}{/* XB\_READ || XB\_READ\_WRITE || XB\_WRITE */}}
+\DoxyCodeLine{182 xbInt16 iShareMode; \textcolor{comment}{/* XB\_SINGLE\_USER || XB\_MULTI\_USER -\/ set file buffering */}}
+\DoxyCodeLine{183 xbInt32 iFileNo; \textcolor{comment}{/* Library File No */}}
+\DoxyCodeLine{184 }
+\DoxyCodeLine{185 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{186 xbInt16 iLockRetries; \textcolor{comment}{/* file override number of lock attempts */}}
+\DoxyCodeLine{187 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{188 }
+\DoxyCodeLine{189 \textcolor{preprocessor}{ \#ifdef HAVE\_SETENDOFFILE\_F}}
+\DoxyCodeLine{190 HANDLE fHandle;}
+\DoxyCodeLine{191 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{192 }
-\DoxyCodeLine{193 \};}
-\DoxyCodeLine{194 }
-\DoxyCodeLine{195 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{196 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBFILE\_H\_\_ */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{197 }
+\DoxyCodeLine{193 }
+\DoxyCodeLine{194 \};}
+\DoxyCodeLine{195 }
+\DoxyCodeLine{196 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{197 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBFILE\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{198 }
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbfilter_8cpp.tex b/docs/doxygen/latex/xbfilter_8cpp.tex
index 93db5f7..fd07d41 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.1.0/src/core/xbfilter.cpp File Reference}
-\label{xbfilter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfilter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfilter.cpp}}
+\hypertarget{xbfilter_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbfilter.cpp File Reference}
+\label{xbfilter_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfilter.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfilter.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbfilter_8h.tex b/docs/doxygen/latex/xbfilter_8h.tex
index f8801e0..85a7296 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.1.0/src/include/xbfilter.h File Reference}
-\label{xbfilter_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfilter.h}}
+\hypertarget{xbfilter_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h File Reference}
+\label{xbfilter_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h}}
diff --git a/docs/doxygen/latex/xbfilter_8h_source.tex b/docs/doxygen/latex/xbfilter_8h_source.tex
index 861045b..7baffe4 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.1.0/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbfilter.h}}
+\label{xbfilter_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbfilter.h}}
\mbox{\hyperlink{xbfilter_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbfilter.h}}
diff --git a/docs/doxygen/latex/xbfuncs_8cpp.tex b/docs/doxygen/latex/xbfuncs_8cpp.tex
index aa4a914..1ed3326 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.1.0/src/core/xbfuncs.cpp File Reference}
-\label{xbfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbfuncs.cpp}}
+\hypertarget{xbfuncs_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbfuncs.cpp File Reference}
+\label{xbfuncs_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfuncs.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbfuncs.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbindex_8h.tex b/docs/doxygen/latex/xbindex_8h.tex
index 3a731e4..92e2b3d 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.1.0/src/include/xbindex.h File Reference}
-\label{xbindex_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbindex.h}}
+\hypertarget{xbindex_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h File Reference}
+\label{xbindex_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h}}
diff --git a/docs/doxygen/latex/xbindex_8h_source.tex b/docs/doxygen/latex/xbindex_8h_source.tex
index bc9fde0..1572730 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.1.0/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbindex.h}}
+\label{xbindex_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbindex.h}}
\mbox{\hyperlink{xbindex_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbindex.h}}
@@ -94,420 +94,428 @@
\DoxyCodeLine{167 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
\DoxyCodeLine{168 }
\DoxyCodeLine{169 \textcolor{keyword}{virtual} xbInt16 Open( \textcolor{keyword}{const} xbString \&sFileName );}
-\DoxyCodeLine{170 \textcolor{keyword}{virtual} xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag ) = 0;}
-\DoxyCodeLine{171 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;}
-\DoxyCodeLine{172 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbString \&sTagName ) = 0;}
-\DoxyCodeLine{173 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keywordtype}{void} * vpCurTag );}
-\DoxyCodeLine{174 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetLocked( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLocked );}
-\DoxyCodeLine{175 }
-\DoxyCodeLine{176 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag ) \{\};}
+\DoxyCodeLine{170 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;}
+\DoxyCodeLine{171 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbString \&sTagName ) = 0;}
+\DoxyCodeLine{172 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetCurTag( \textcolor{keywordtype}{void} * vpCurTag );}
+\DoxyCodeLine{173 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetLocked( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLocked );}
+\DoxyCodeLine{174 }
+\DoxyCodeLine{175 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag ) \{\};}
+\DoxyCodeLine{176 }
\DoxyCodeLine{177 }
\DoxyCodeLine{178 }
-\DoxyCodeLine{179 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{180 \textcolor{keyword}{virtual} xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) \{ \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}}; \}}
-\DoxyCodeLine{181 \textcolor{keyword}{virtual} xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;}
-\DoxyCodeLine{182 \textcolor{keyword}{virtual} xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) = 0;}
-\DoxyCodeLine{183 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL ) = 0;}
-\DoxyCodeLine{186 }
-\DoxyCodeLine{187 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{188 }
-\DoxyCodeLine{189 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{190 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
+\DoxyCodeLine{179 \textcolor{keyword}{virtual} xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag ) = 0;}
+\DoxyCodeLine{180 }
+\DoxyCodeLine{181 }
+\DoxyCodeLine{182 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{183 \textcolor{keyword}{virtual} xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) \{ \textcolor{keywordflow}{return} \mbox{\hyperlink{xbretcod_8h_ac720d5b4ec45bfd606f5865d40816e23}{XB\_NO\_ERROR}}; \}}
+\DoxyCodeLine{184 \textcolor{keyword}{virtual} xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;}
+\DoxyCodeLine{185 \textcolor{keyword}{virtual} xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) = 0;}
+\DoxyCodeLine{186 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{187 \textcolor{keyword}{virtual} xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{188 \textcolor{keyword}{virtual} xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL ) = 0;}
+\DoxyCodeLine{189 }
+\DoxyCodeLine{190 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{191 }
-\DoxyCodeLine{192 \textcolor{keyword}{virtual} xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo ) = 0;}
-\DoxyCodeLine{193 \textcolor{keyword}{virtual} xbInt16 AddKeys( xbUInt32 ulRecNo );}
-\DoxyCodeLine{194 \textcolor{keyword}{virtual} xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
-\DoxyCodeLine{195 \textcolor{keyword}{virtual} xbInt16 BSearchBlock( \textcolor{keywordtype}{char} cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lSearchKeyLen, xbInt16 \&iCompRc, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDescending = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} ) \textcolor{keyword}{const};}
-\DoxyCodeLine{196 \textcolor{keyword}{virtual} xbInt16 CheckForDupKeys();}
-\DoxyCodeLine{197 \textcolor{keyword}{virtual} xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
-\DoxyCodeLine{198 \textcolor{keyword}{virtual} xbInt16 CompareKey( \textcolor{keywordtype}{char} cKeyType, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v1, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v2, \textcolor{keywordtype}{size\_t} lKeyLen ) \textcolor{keyword}{const};}
-\DoxyCodeLine{199 \textcolor{keyword}{virtual} xbInt16 CreateKeys( xbInt16 iOpt );}
-\DoxyCodeLine{200 \textcolor{keyword}{virtual} xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt ) = 0;}
-\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;}
-\DoxyCodeLine{202 \textcolor{comment}{// virtual xbInt16 DeleteKeys( xbUInt32 ulRecNo );}}
-\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 DeleteKeys();}
-\DoxyCodeLine{204 \textcolor{keyword}{virtual} xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
-\DoxyCodeLine{205 }
-\DoxyCodeLine{206 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag ) = 0;}
-\DoxyCodeLine{207 }
+\DoxyCodeLine{192 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{193 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
+\DoxyCodeLine{194 }
+\DoxyCodeLine{195 \textcolor{keyword}{virtual} xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo ) = 0;}
+\DoxyCodeLine{196 \textcolor{keyword}{virtual} xbInt16 AddKeys( xbUInt32 ulRecNo );}
+\DoxyCodeLine{197 \textcolor{keyword}{virtual} xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
+\DoxyCodeLine{198 \textcolor{keyword}{virtual} xbInt16 BSearchBlock( \textcolor{keywordtype}{char} cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lSearchKeyLen, xbInt16 \&iCompRc, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDescending = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} ) \textcolor{keyword}{const};}
+\DoxyCodeLine{199 \textcolor{keyword}{virtual} xbInt16 CheckForDupKeys();}
+\DoxyCodeLine{200 \textcolor{keyword}{virtual} xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
+\DoxyCodeLine{201 \textcolor{keyword}{virtual} xbInt16 CompareKey( \textcolor{keywordtype}{char} cKeyType, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v1, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *v2, \textcolor{keywordtype}{size\_t} lKeyLen ) \textcolor{keyword}{const};}
+\DoxyCodeLine{202 \textcolor{keyword}{virtual} xbInt16 CreateKeys( xbInt16 iOpt );}
+\DoxyCodeLine{203 \textcolor{keyword}{virtual} xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt ) = 0;}
+\DoxyCodeLine{204 \textcolor{keyword}{virtual} xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;}
+\DoxyCodeLine{205 \textcolor{keyword}{virtual} xbInt16 DeleteKeys();}
+\DoxyCodeLine{206 \textcolor{keyword}{virtual} xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag ) = 0;}
+\DoxyCodeLine{207 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag ) = 0;}
\DoxyCodeLine{208 }
\DoxyCodeLine{209 \textcolor{keyword}{virtual} xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag ) = 0;}
\DoxyCodeLine{210 \textcolor{keyword}{virtual} xbIxNode *FreeNodeChain( xbIxNode *np );}
\DoxyCodeLine{211 \textcolor{keyword}{virtual} xbInt16 GetBlock( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );}
-\DoxyCodeLine{212 \textcolor{comment}{// virtual xbBool GetIndexUpdated() const = 0;}}
-\DoxyCodeLine{213 \textcolor{keyword}{virtual} xbInt32 GetKeyCount( xbIxNode *npNode ) \textcolor{keyword}{const};}
-\DoxyCodeLine{214 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) \textcolor{keyword}{const};}
-\DoxyCodeLine{215 \textcolor{keyword}{virtual} xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{216 \textcolor{keyword}{virtual} xbInt16 GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw ) = 0;}
-\DoxyCodeLine{217 \textcolor{keyword}{virtual} xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr ) = 0;}
-\DoxyCodeLine{218 \textcolor{keyword}{virtual} xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
-\DoxyCodeLine{219 \textcolor{keyword}{virtual} xbInt16 KeyExists( \textcolor{keywordtype}{void} * ) = 0;}
-\DoxyCodeLine{220 \textcolor{comment}{// virtual xbInt16 KeyUpdated( void *vpTag ) const = 0;}}
-\DoxyCodeLine{221 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} NodeFree( xbIxNode * ixNode );}
-\DoxyCodeLine{222 \textcolor{keyword}{virtual} xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;}
-\DoxyCodeLine{223 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetDbf( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf );}
-\DoxyCodeLine{224 \textcolor{keyword}{virtual} xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr ) = 0;}
-\DoxyCodeLine{225 \textcolor{keyword}{virtual} xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
-\DoxyCodeLine{226 \textcolor{keyword}{virtual} xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 ) = 0;}
-\DoxyCodeLine{227 \textcolor{keyword}{virtual} xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;}
-\DoxyCodeLine{228 }
-\DoxyCodeLine{229 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
-\DoxyCodeLine{230 \textcolor{keywordtype}{char} *cNodeBuf; \textcolor{comment}{// pointer to memory for processing in a block of index data}}
-\DoxyCodeLine{231 \textcolor{keywordtype}{void} *vpCurTag; \textcolor{comment}{// pointer to active tag. Single index files have only one tag}}
-\DoxyCodeLine{232 }
-\DoxyCodeLine{233 \textcolor{keyword}{private}:}
-\DoxyCodeLine{234 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) = 0;}
-\DoxyCodeLine{235 \textcolor{keyword}{virtual} xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{236 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const} = 0;}
-\DoxyCodeLine{237 \textcolor{comment}{// virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;}}
-\DoxyCodeLine{238 }
-\DoxyCodeLine{239 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLocked; \textcolor{comment}{// index file locked?}}
-\DoxyCodeLine{240 \};}
-\DoxyCodeLine{241 }
-\DoxyCodeLine{242 \textcolor{preprocessor}{\#ifdef XB\_NDX\_SUPPORT}}
-\DoxyCodeLine{243 }
-\DoxyCodeLine{244 \textcolor{preprocessor}{\#define XB\_NDX\_BLOCK\_SIZE 512}}
+\DoxyCodeLine{212 \textcolor{keyword}{virtual} xbInt32 GetKeyCount( xbIxNode *npNode ) \textcolor{keyword}{const};}
+\DoxyCodeLine{213 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) \textcolor{keyword}{const};}
+\DoxyCodeLine{214 \textcolor{keyword}{virtual} xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{215 \textcolor{keyword}{virtual} xbInt16 GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw ) = 0;}
+\DoxyCodeLine{216 \textcolor{keyword}{virtual} xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr ) = 0;}
+\DoxyCodeLine{217 \textcolor{keyword}{virtual} xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
+\DoxyCodeLine{218 \textcolor{keyword}{virtual} xbInt16 KeyExists( \textcolor{keywordtype}{void} * ) = 0;}
+\DoxyCodeLine{219 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} NodeFree( xbIxNode * ixNode );}
+\DoxyCodeLine{220 \textcolor{keyword}{virtual} xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;}
+\DoxyCodeLine{221 \textcolor{comment}{// virtual xbInt16 Reindex( void **vpTag ) = 0;}}
+\DoxyCodeLine{222 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} SetDbf( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf );}
+\DoxyCodeLine{223 \textcolor{keyword}{virtual} xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr ) = 0;}
+\DoxyCodeLine{224 \textcolor{keyword}{virtual} xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;}
+\DoxyCodeLine{225 \textcolor{keyword}{virtual} xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 ) = 0;}
+\DoxyCodeLine{226 \textcolor{keyword}{virtual} xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;}
+\DoxyCodeLine{227 }
+\DoxyCodeLine{228 \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} *dbf;}
+\DoxyCodeLine{229 \textcolor{keywordtype}{char} *cNodeBuf; \textcolor{comment}{// pointer to memory for processing in a block of index data}}
+\DoxyCodeLine{230 \textcolor{keywordtype}{void} *vpCurTag; \textcolor{comment}{// pointer to active tag. Single index files have only one tag}}
+\DoxyCodeLine{231 }
+\DoxyCodeLine{232 \textcolor{keyword}{private}:}
+\DoxyCodeLine{233 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) = 0;}
+\DoxyCodeLine{234 \textcolor{keyword}{virtual} xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{235 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{236 \textcolor{comment}{// virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;}}
+\DoxyCodeLine{237 }
+\DoxyCodeLine{238 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLocked; \textcolor{comment}{// index file locked?}}
+\DoxyCodeLine{239 \};}
+\DoxyCodeLine{240 }
+\DoxyCodeLine{241 \textcolor{preprocessor}{\#ifdef XB\_NDX\_SUPPORT}}
+\DoxyCodeLine{242 }
+\DoxyCodeLine{243 \textcolor{preprocessor}{\#define XB\_NDX\_BLOCK\_SIZE 512}}
+\DoxyCodeLine{244 }
\DoxyCodeLine{245 }
-\DoxyCodeLine{246 }
-\DoxyCodeLine{248 \textcolor{keyword}{struct }XBDLLEXPORT xbNdxTag \{}
-\DoxyCodeLine{249 }
-\DoxyCodeLine{250 \textcolor{comment}{// NDX File Header Fields}}
-\DoxyCodeLine{251 xbUInt32 ulRootBlock; \textcolor{comment}{// header node is 0}}
-\DoxyCodeLine{252 xbUInt32 ulTotalBlocks; \textcolor{comment}{// includes header node}}
-\DoxyCodeLine{253 \textcolor{keywordtype}{char} cKeyType; \textcolor{comment}{// C = Char, F = Numeric, D = Date}}
-\DoxyCodeLine{254 xbInt16 iKeyLen; \textcolor{comment}{// length of key data}}
-\DoxyCodeLine{255 xbInt16 iKeysPerBlock; \textcolor{comment}{// max number keys per block <=100}}
-\DoxyCodeLine{256 xbInt16 iKeyType; \textcolor{comment}{// 00 = Char, 01 = Numeric}}
-\DoxyCodeLine{257 xbInt16 iKeyItemLen; \textcolor{comment}{// KeyLen + 8 bytes}}
-\DoxyCodeLine{258 \textcolor{keywordtype}{char} cSerNo; \textcolor{comment}{// rolling incrementing serial number +1 on each index update}}
-\DoxyCodeLine{259 xbInt16 iUnique; \textcolor{comment}{// True if unique}}
-\DoxyCodeLine{260 xbString sKeyExpression; \textcolor{comment}{// index expression}}
-\DoxyCodeLine{261 \textcolor{comment}{// end of NDX Header field}}
-\DoxyCodeLine{262 }
-\DoxyCodeLine{263 xbExp *exp; \textcolor{comment}{// pointer to expression for expression keys}}
-\DoxyCodeLine{264 time\_t tNodeChainTs; \textcolor{comment}{// node chain time stamp}}
-\DoxyCodeLine{265 xbIxNode *npNodeChain;}
-\DoxyCodeLine{266 xbIxNode *npCurNode;}
-\DoxyCodeLine{267 \textcolor{keywordtype}{char} *cpKeyBuf; \textcolor{comment}{// key buffer, for searches and adds}}
-\DoxyCodeLine{268 \textcolor{keywordtype}{char} *cpKeyBuf2; \textcolor{comment}{// key buffer, for deletes}}
-\DoxyCodeLine{269 xbString sTagName; \textcolor{comment}{// tag name -\/ is the file name without the extension}}
-\DoxyCodeLine{270 \textcolor{comment}{// xbInt16 iKeyUpdated; // key updated? set in method KeyUpdated, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{271 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFoundSts; \textcolor{comment}{// key found? used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
-\DoxyCodeLine{272 }
-\DoxyCodeLine{273 }
-\DoxyCodeLine{274 xbInt16 iKeySts; \textcolor{comment}{// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{275 \textcolor{comment}{// old key filtered new key filtered iKeySts}}
-\DoxyCodeLine{276 \textcolor{comment}{// Y Y XB\_UPD\_KEY 2 -\/ update key if changed (delete and add)}}
-\DoxyCodeLine{277 \textcolor{comment}{// Y N XB\_DEL\_KEY 3 -\/ delete key}}
-\DoxyCodeLine{278 \textcolor{comment}{// N Y XB\_ADD\_KEY 1 -\/ add key}}
-\DoxyCodeLine{279 \textcolor{comment}{// N N 0 -\/ no update}}
-\DoxyCodeLine{280 }
-\DoxyCodeLine{281 \};}
+\DoxyCodeLine{247 \textcolor{keyword}{struct }XBDLLEXPORT xbNdxTag \{}
+\DoxyCodeLine{248 }
+\DoxyCodeLine{249 \textcolor{comment}{// NDX File Header Fields}}
+\DoxyCodeLine{250 xbUInt32 ulRootBlock; \textcolor{comment}{// header node is 0}}
+\DoxyCodeLine{251 xbUInt32 ulTotalBlocks; \textcolor{comment}{// includes header node}}
+\DoxyCodeLine{252 \textcolor{keywordtype}{char} cKeyType; \textcolor{comment}{// C = Char, F = Numeric, D = Date}}
+\DoxyCodeLine{253 xbInt16 iKeyLen; \textcolor{comment}{// length of key data}}
+\DoxyCodeLine{254 xbInt16 iKeysPerBlock; \textcolor{comment}{// max number keys per block <=100}}
+\DoxyCodeLine{255 xbInt16 iKeyType; \textcolor{comment}{// 00 = Char, 01 = Numeric}}
+\DoxyCodeLine{256 xbInt16 iKeyItemLen; \textcolor{comment}{// KeyLen + 8 bytes}}
+\DoxyCodeLine{257 \textcolor{keywordtype}{char} cSerNo; \textcolor{comment}{// rolling incrementing serial number +1 on each index update}}
+\DoxyCodeLine{258 xbInt16 iUnique; \textcolor{comment}{// True if unique}}
+\DoxyCodeLine{259 xbString sKeyExpression; \textcolor{comment}{// index expression}}
+\DoxyCodeLine{260 \textcolor{comment}{// end of NDX Header field}}
+\DoxyCodeLine{261 }
+\DoxyCodeLine{262 xbExp *exp; \textcolor{comment}{// pointer to expression for expression keys}}
+\DoxyCodeLine{263 time\_t tNodeChainTs; \textcolor{comment}{// node chain time stamp}}
+\DoxyCodeLine{264 xbIxNode *npNodeChain;}
+\DoxyCodeLine{265 xbIxNode *npCurNode;}
+\DoxyCodeLine{266 \textcolor{keywordtype}{char} *cpKeyBuf; \textcolor{comment}{// key buffer, for searches and adds}}
+\DoxyCodeLine{267 \textcolor{keywordtype}{char} *cpKeyBuf2; \textcolor{comment}{// key buffer, for deletes}}
+\DoxyCodeLine{268 xbString sTagName; \textcolor{comment}{// tag name -\/ is the file name without the extension}}
+\DoxyCodeLine{269 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFoundSts; \textcolor{comment}{// key found? used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
+\DoxyCodeLine{270 }
+\DoxyCodeLine{271 }
+\DoxyCodeLine{272 xbInt16 iKeySts; \textcolor{comment}{// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
+\DoxyCodeLine{273 \textcolor{comment}{// old key filtered new key filtered iKeySts}}
+\DoxyCodeLine{274 \textcolor{comment}{// Y Y XB\_UPD\_KEY 2 -\/ update key if changed (delete and add)}}
+\DoxyCodeLine{275 \textcolor{comment}{// Y N XB\_DEL\_KEY 3 -\/ delete key}}
+\DoxyCodeLine{276 \textcolor{comment}{// N Y XB\_ADD\_KEY 1 -\/ add key}}
+\DoxyCodeLine{277 \textcolor{comment}{// N N 0 -\/ no update}}
+\DoxyCodeLine{278 }
+\DoxyCodeLine{279 \};}
+\DoxyCodeLine{281 }
\DoxyCodeLine{283 }
-\DoxyCodeLine{285 }
-\DoxyCodeLine{304 \textcolor{keyword}{class }XBDLLEXPORT xbIxNdx : \textcolor{keyword}{public} xbIx \{}
-\DoxyCodeLine{305 \textcolor{keyword}{public}:}
-\DoxyCodeLine{306 xbIxNdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
-\DoxyCodeLine{307 \string~xbIxNdx();}
-\DoxyCodeLine{308 xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
-\DoxyCodeLine{309 xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
-\DoxyCodeLine{310 \textcolor{comment}{// xbInt16 DeleteTag( void *vpTag );}}
-\DoxyCodeLine{311 xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{312 xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{313 }
-\DoxyCodeLine{314 xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
-\DoxyCodeLine{315 xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
-\DoxyCodeLine{316 xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
-\DoxyCodeLine{317 xbInt32 GetKeyLen ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{318 \textcolor{keywordtype}{char} GetKeyType ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{319 xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{320 xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{321 \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{322 \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{323 xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{324 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{325 }
-\DoxyCodeLine{326 xbInt16 GetTagCount() \textcolor{keyword}{const};}
-\DoxyCodeLine{327 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetUnique( \textcolor{keywordtype}{void} *vpTag = NULL ) \textcolor{keyword}{const};}
-\DoxyCodeLine{328 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{329 xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag );}
-\DoxyCodeLine{330 xbInt16 SetCurTag( xbInt16 iTagNo );}
-\DoxyCodeLine{331 xbInt16 SetCurTag( xbString \&sTagName );}
-\DoxyCodeLine{332 }
-\DoxyCodeLine{333 }
-\DoxyCodeLine{334 }
-\DoxyCodeLine{335 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{336 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL );}
-\DoxyCodeLine{337 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );}
-\DoxyCodeLine{338 xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
-\DoxyCodeLine{339 \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{340 xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
-\DoxyCodeLine{341 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{342 }
-\DoxyCodeLine{343 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{344 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
-\DoxyCodeLine{345 xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
-\DoxyCodeLine{346 xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
-\DoxyCodeLine{347 xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{348 xbIxNode *CreateIxNode( xbUInt32 ulBufSize );}
-\DoxyCodeLine{349 xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
-\DoxyCodeLine{350 xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
-\DoxyCodeLine{351 xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{352 }
-\DoxyCodeLine{353 xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{354 }
-\DoxyCodeLine{355 xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{356 \textcolor{comment}{// xbBool GetIndexUpdated() const;}}
-\DoxyCodeLine{357 xbInt16 GetKeyTypeN( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{358 xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{359 xbInt16 GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
-\DoxyCodeLine{360 xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
-\DoxyCodeLine{361 xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr );}
-\DoxyCodeLine{362 xbInt16 KeyExists( \textcolor{keywordtype}{void} *vpTag = NULL );}
-\DoxyCodeLine{363 \textcolor{comment}{// xbBool KeyFiltered( void *vpTag ) const;}}
-\DoxyCodeLine{364 \textcolor{comment}{// xbInt16 KeyUpdated( void *vpTag ) const;}}
-\DoxyCodeLine{365 xbInt16 ReadHeadBlock(xbInt16 iOpt); \textcolor{comment}{// read the header node of the disk NDX file}}
-\DoxyCodeLine{366 xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
-\DoxyCodeLine{367 xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
-\DoxyCodeLine{368 xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
-\DoxyCodeLine{369 xbInt16 WriteHeadBlock( xbInt16 iOption );}
-\DoxyCodeLine{370 }
-\DoxyCodeLine{371 \textcolor{keyword}{private}:}
-\DoxyCodeLine{372 xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
-\DoxyCodeLine{373 \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
-\DoxyCodeLine{374 xbInt16 GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
-\DoxyCodeLine{375 xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
-\DoxyCodeLine{376 xbInt16 GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
-\DoxyCodeLine{377 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
-\DoxyCodeLine{378 xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );}
-\DoxyCodeLine{379 xbInt16 KeySetPosDel( xbNdxTag *npTag );}
-\DoxyCodeLine{380 \textcolor{comment}{// void SetCurNode( void *vpTag, xbIxNode *np );}}
-\DoxyCodeLine{381 xbNdxTag *ndxTag;}
-\DoxyCodeLine{382 \};}
+\DoxyCodeLine{302 \textcolor{keyword}{class }XBDLLEXPORT xbIxNdx : \textcolor{keyword}{public} xbIx \{}
+\DoxyCodeLine{303 \textcolor{keyword}{public}:}
+\DoxyCodeLine{304 xbIxNdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
+\DoxyCodeLine{305 \string~xbIxNdx();}
+\DoxyCodeLine{306 xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
+\DoxyCodeLine{307 xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{308 xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{309 xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{310 }
+\DoxyCodeLine{311 xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
+\DoxyCodeLine{312 xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
+\DoxyCodeLine{313 xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
+\DoxyCodeLine{314 xbInt32 GetKeyLen ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{315 \textcolor{keywordtype}{char} GetKeyType ( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{316 xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{317 xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{318 \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{319 \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{320 xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{321 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{322 }
+\DoxyCodeLine{323 xbInt16 GetTagCount() \textcolor{keyword}{const};}
+\DoxyCodeLine{324 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetUnique( \textcolor{keywordtype}{void} *vpTag = NULL ) \textcolor{keyword}{const};}
+\DoxyCodeLine{325 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{326 xbInt16 SetCurTag( xbInt16 iTagNo );}
+\DoxyCodeLine{327 xbInt16 SetCurTag( xbString \&sTagName );}
+\DoxyCodeLine{328 }
+\DoxyCodeLine{329 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{330 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL );}
+\DoxyCodeLine{331 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );}
+\DoxyCodeLine{332 xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
+\DoxyCodeLine{333 \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{334 xbInt16 DumpNode( \textcolor{keywordtype}{void} * vpTag, xbIxNode * pNode, xbInt16 iOption ) \textcolor{keyword}{const};}
+\DoxyCodeLine{335 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{336 }
+\DoxyCodeLine{337 xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{338 }
+\DoxyCodeLine{339 }
+\DoxyCodeLine{340 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{341 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
+\DoxyCodeLine{342 xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
+\DoxyCodeLine{343 xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );}
+\DoxyCodeLine{344 xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{345 xbIxNode *CreateIxNode( xbUInt32 ulBufSize );}
+\DoxyCodeLine{346 xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
+\DoxyCodeLine{347 xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
+\DoxyCodeLine{348 xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{349 xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{350 xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{351 xbInt16 GetKeyTypeN( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{352 xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{353 xbInt16 GetLastKey( xbUInt32 ulNodeNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 iRetrieveSw = 1 );}
+\DoxyCodeLine{354 xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
+\DoxyCodeLine{355 xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} * cpKeyBuf, xbUInt32 uiPtr );}
+\DoxyCodeLine{356 xbInt16 KeyExists( \textcolor{keywordtype}{void} *vpTag = NULL );}
+\DoxyCodeLine{357 xbInt16 ReadHeadBlock(xbInt16 iOpt); \textcolor{comment}{// read the header node of the disk NDX file}}
+\DoxyCodeLine{358 \textcolor{comment}{// xbInt16 Reindex( void **vpTag );}}
+\DoxyCodeLine{359 xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
+\DoxyCodeLine{360 xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
+\DoxyCodeLine{361 xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
+\DoxyCodeLine{362 xbInt16 WriteHeadBlock( xbInt16 iOption );}
+\DoxyCodeLine{363 }
+\DoxyCodeLine{364 \textcolor{keyword}{private}:}
+\DoxyCodeLine{365 xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
+\DoxyCodeLine{366 \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
+\DoxyCodeLine{367 xbInt16 GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
+\DoxyCodeLine{368 xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
+\DoxyCodeLine{369 xbInt16 GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
+\DoxyCodeLine{370 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
+\DoxyCodeLine{371 xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );}
+\DoxyCodeLine{372 xbInt16 KeySetPosDel( xbNdxTag *npTag );}
+\DoxyCodeLine{373 xbNdxTag *ndxTag;}
+\DoxyCodeLine{374 \};}
+\DoxyCodeLine{375 }
+\DoxyCodeLine{376 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_NDX\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{377 }
+\DoxyCodeLine{378 }
+\DoxyCodeLine{379 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{380 \textcolor{comment}{//\#define XB\_MDX\_BLOCK\_SIZE 1024}}
+\DoxyCodeLine{381 }
+\DoxyCodeLine{382 \textcolor{keyword}{struct }XBDLLEXPORT xbMdxTag \{}
\DoxyCodeLine{383 }
-\DoxyCodeLine{384 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_NDX\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{385 }
-\DoxyCodeLine{386 }
-\DoxyCodeLine{387 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{388 \textcolor{comment}{//\#define XB\_MDX\_BLOCK\_SIZE 1024}}
-\DoxyCodeLine{389 }
-\DoxyCodeLine{390 \textcolor{keyword}{struct }XBDLLEXPORT xbMdxTag \{}
-\DoxyCodeLine{391 }
-\DoxyCodeLine{392 \textcolor{comment}{// next 7 fields comprise the tag table entry}}
-\DoxyCodeLine{393 xbUInt32 ulTagHdrPageNo; \textcolor{comment}{// 512 byte page number, NOT block number}}
-\DoxyCodeLine{394 \textcolor{keywordtype}{char} cTagName[11];}
-\DoxyCodeLine{395 \textcolor{keywordtype}{char} cKeyFmt; \textcolor{comment}{// always 0x10 w/ DBase V7}}
-\DoxyCodeLine{396 \textcolor{keywordtype}{char} cLeftChild; \textcolor{comment}{// cFwdTagThread}}
-\DoxyCodeLine{397 \textcolor{keywordtype}{char} cRightChild; \textcolor{comment}{// cFwdTagThread2}}
-\DoxyCodeLine{398 \textcolor{keywordtype}{char} cParent; \textcolor{comment}{// cBwdTagThread}}
-\DoxyCodeLine{399 \textcolor{keywordtype}{char} c2;}
-\DoxyCodeLine{400 \textcolor{keywordtype}{char} cKeyType; \textcolor{comment}{// C,D,N}}
-\DoxyCodeLine{401 }
-\DoxyCodeLine{402 xbUInt32 ulRootPage; \textcolor{comment}{// 512 byte page number, NOT block number}}
-\DoxyCodeLine{403 xbUInt32 ulTagSize; \textcolor{comment}{// Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block}}
-\DoxyCodeLine{404 }
-\DoxyCodeLine{405 \textcolor{keywordtype}{char} cKeyFmt2; \textcolor{comment}{// 0x10 -\/ base}}
-\DoxyCodeLine{406 \textcolor{comment}{// 0x08 -\/ descending}}
-\DoxyCodeLine{407 \textcolor{comment}{// 0x40 -\/ unique}}
-\DoxyCodeLine{408 \textcolor{keywordtype}{char} cKeyType2;}
-\DoxyCodeLine{409 \textcolor{comment}{// one unused byte fits here}}
-\DoxyCodeLine{410 }
-\DoxyCodeLine{411 \textcolor{keywordtype}{char} cTag11; \textcolor{comment}{// dbase sets to 0x1B}}
-\DoxyCodeLine{412 }
-\DoxyCodeLine{413 xbInt16 iKeyLen;}
-\DoxyCodeLine{414 xbInt16 iKeysPerBlock;}
-\DoxyCodeLine{415 xbInt16 iSecKeyType;}
-\DoxyCodeLine{416 xbInt16 iKeyItemLen; \textcolor{comment}{// iKeyLen + 4}}
-\DoxyCodeLine{417 }
-\DoxyCodeLine{418 \textcolor{keywordtype}{char} cSerialNo; \textcolor{comment}{// Increments +1 for each tag update}}
-\DoxyCodeLine{419 \textcolor{keywordtype}{char} cUnique;}
-\DoxyCodeLine{420 xbString *sKeyExp; \textcolor{comment}{// Key expression}}
-\DoxyCodeLine{421 }
-\DoxyCodeLine{422 \textcolor{keywordtype}{char} cHasFilter; \textcolor{comment}{// 0x00 or 0x01}}
-\DoxyCodeLine{423 \textcolor{keywordtype}{char} cHasKeys; \textcolor{comment}{// 0x00 or 0x01}}
+\DoxyCodeLine{384 \textcolor{comment}{// next 7 fields comprise the tag table entry}}
+\DoxyCodeLine{385 xbUInt32 ulTagHdrPageNo; \textcolor{comment}{// 512 byte page number, NOT block number}}
+\DoxyCodeLine{386 \textcolor{keywordtype}{char} cTagName[11];}
+\DoxyCodeLine{387 \textcolor{keywordtype}{char} cKeyFmt; \textcolor{comment}{// always 0x10 w/ DBase V7}}
+\DoxyCodeLine{388 \textcolor{keywordtype}{char} cLeftChild; \textcolor{comment}{// cFwdTagThread}}
+\DoxyCodeLine{389 \textcolor{keywordtype}{char} cRightChild; \textcolor{comment}{// cFwdTagThread2}}
+\DoxyCodeLine{390 \textcolor{keywordtype}{char} cParent; \textcolor{comment}{// cBwdTagThread}}
+\DoxyCodeLine{391 \textcolor{keywordtype}{char} c2;}
+\DoxyCodeLine{392 \textcolor{keywordtype}{char} cKeyType; \textcolor{comment}{// C,D,N}}
+\DoxyCodeLine{393 }
+\DoxyCodeLine{394 xbUInt32 ulRootPage; \textcolor{comment}{// 512 byte page number, NOT block number}}
+\DoxyCodeLine{395 xbUInt32 ulTagSize; \textcolor{comment}{// Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block}}
+\DoxyCodeLine{396 }
+\DoxyCodeLine{397 \textcolor{keywordtype}{char} cKeyFmt2; \textcolor{comment}{// 0x10 -\/ base}}
+\DoxyCodeLine{398 \textcolor{comment}{// 0x08 -\/ descending}}
+\DoxyCodeLine{399 \textcolor{comment}{// 0x40 -\/ unique}}
+\DoxyCodeLine{400 \textcolor{keywordtype}{char} cKeyType2;}
+\DoxyCodeLine{401 \textcolor{comment}{// one unused byte fits here}}
+\DoxyCodeLine{402 }
+\DoxyCodeLine{403 \textcolor{keywordtype}{char} cTag11; \textcolor{comment}{// dbase sets to 0x1B}}
+\DoxyCodeLine{404 xbInt16 iKeyLen;}
+\DoxyCodeLine{405 xbInt16 iKeysPerBlock;}
+\DoxyCodeLine{406 xbInt16 iSecKeyType;}
+\DoxyCodeLine{407 xbInt16 iKeyItemLen; \textcolor{comment}{// iKeyLen + 4}}
+\DoxyCodeLine{408 }
+\DoxyCodeLine{409 \textcolor{keywordtype}{char} cSerialNo; \textcolor{comment}{// Increments +1 for each tag update}}
+\DoxyCodeLine{410 \textcolor{keywordtype}{char} cUnique;}
+\DoxyCodeLine{411 xbString *sKeyExp; \textcolor{comment}{// Key expression}}
+\DoxyCodeLine{412 \textcolor{keywordtype}{char} cHasFilter; \textcolor{comment}{// 0x00 or 0x01}}
+\DoxyCodeLine{413 \textcolor{keywordtype}{char} cHasKeys; \textcolor{comment}{// 0x00 or 0x01}}
+\DoxyCodeLine{414 xbUInt32 ulLeftChild; \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
+\DoxyCodeLine{415 xbUInt32 ulRightChild; \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
+\DoxyCodeLine{416 }
+\DoxyCodeLine{417 \textcolor{keywordtype}{char} cTagYY;}
+\DoxyCodeLine{418 \textcolor{keywordtype}{char} cTagMM;}
+\DoxyCodeLine{419 \textcolor{keywordtype}{char} cTagDD;}
+\DoxyCodeLine{420 }
+\DoxyCodeLine{421 \textcolor{keywordtype}{char} cKeyFmt3; \textcolor{comment}{// dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation}}
+\DoxyCodeLine{422 }
+\DoxyCodeLine{423 xbString *sFiltExp; \textcolor{comment}{// Filter expression}}
\DoxyCodeLine{424 }
-\DoxyCodeLine{425 xbUInt32 ulLeftChild; \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
-\DoxyCodeLine{426 xbUInt32 ulRightChild; \textcolor{comment}{// dbase 7 sets this to the root page on tag creation}}
-\DoxyCodeLine{427 }
-\DoxyCodeLine{428 \textcolor{keywordtype}{char} cTagYY;}
-\DoxyCodeLine{429 \textcolor{keywordtype}{char} cTagMM;}
-\DoxyCodeLine{430 \textcolor{keywordtype}{char} cTagDD;}
-\DoxyCodeLine{431 }
-\DoxyCodeLine{432 \textcolor{keywordtype}{char} cKeyFmt3; \textcolor{comment}{// dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation}}
-\DoxyCodeLine{433 }
-\DoxyCodeLine{434 xbString *sFiltExp; \textcolor{comment}{// Filter expression}}
+\DoxyCodeLine{425 time\_t tNodeChainTs;}
+\DoxyCodeLine{426 xbIxNode *npNodeChain;}
+\DoxyCodeLine{427 xbIxNode *npCurNode;}
+\DoxyCodeLine{428 xbExp *exp; \textcolor{comment}{// pointer to expression for expression based tags}}
+\DoxyCodeLine{429 xbExp *filter; \textcolor{comment}{// pointer to expression for index filter}}
+\DoxyCodeLine{430 }
+\DoxyCodeLine{431 \textcolor{keywordtype}{char} *cpKeyBuf; \textcolor{comment}{// key buffer}}
+\DoxyCodeLine{432 \textcolor{keywordtype}{char} *cpKeyBuf2; \textcolor{comment}{// key buffer}}
+\DoxyCodeLine{433 xbString *sTagName; \textcolor{comment}{// string tag name}}
+\DoxyCodeLine{434 }
\DoxyCodeLine{435 }
-\DoxyCodeLine{436 time\_t tNodeChainTs;}
-\DoxyCodeLine{437 xbIxNode *npNodeChain;}
-\DoxyCodeLine{438 xbIxNode *npCurNode;}
-\DoxyCodeLine{439 xbExp *exp; \textcolor{comment}{// pointer to expression for expression based tags}}
-\DoxyCodeLine{440 xbExp *filter; \textcolor{comment}{// pointer to expression for index filter}}
-\DoxyCodeLine{441 }
-\DoxyCodeLine{442 \textcolor{keywordtype}{char} *cpKeyBuf; \textcolor{comment}{// key buffer}}
-\DoxyCodeLine{443 \textcolor{keywordtype}{char} *cpKeyBuf2; \textcolor{comment}{// key buffer}}
-\DoxyCodeLine{444 \textcolor{comment}{// xbBool iKeyUpdated; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{445 \textcolor{comment}{// 0 -\/ no update}}
-\DoxyCodeLine{446 \textcolor{comment}{// 1 -\/ Add}}
-\DoxyCodeLine{447 \textcolor{comment}{// 2 -\/ Update}}
-\DoxyCodeLine{448 \textcolor{comment}{// 3 -\/ Delete}}
-\DoxyCodeLine{449 \textcolor{comment}{// xbBool bKeyFiltered; // key filtered? True if included key, False if excluded key. Set in method CreateKey, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{450 xbString *sTagName; \textcolor{comment}{// string tag name}}
-\DoxyCodeLine{451 }
-\DoxyCodeLine{452 }
-\DoxyCodeLine{453 xbMdxTag *next;}
-\DoxyCodeLine{454 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFoundSts; \textcolor{comment}{// key found? used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
-\DoxyCodeLine{455 }
-\DoxyCodeLine{456 }
-\DoxyCodeLine{457 xbInt16 iKeySts; \textcolor{comment}{// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
-\DoxyCodeLine{458 \textcolor{comment}{// old key filtered new key filtered iKeySts}}
-\DoxyCodeLine{459 \textcolor{comment}{// Y Y XB\_UPD\_KEY 2 -\/ update key if changed (delete and add)}}
-\DoxyCodeLine{460 \textcolor{comment}{// Y N XB\_DEL\_KEY 3 -\/ delete key}}
-\DoxyCodeLine{461 \textcolor{comment}{// N Y XB\_ADD\_KEY 1 -\/ add key}}
-\DoxyCodeLine{462 \textcolor{comment}{// N N 0 -\/ no update}}
-\DoxyCodeLine{463 }
-\DoxyCodeLine{464 }
-\DoxyCodeLine{465 \};}
-\DoxyCodeLine{466 }
-\DoxyCodeLine{467 }
-\DoxyCodeLine{468 \textcolor{keyword}{class }XBDLLEXPORT xbIxMdx : \textcolor{keyword}{public} xbIx \{}
-\DoxyCodeLine{469 \textcolor{keyword}{public}:}
-\DoxyCodeLine{470 xbIxMdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
-\DoxyCodeLine{471 \string~xbIxMdx();}
-\DoxyCodeLine{472 xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
-\DoxyCodeLine{473 xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
-\DoxyCodeLine{474 \textcolor{comment}{// xbInt16 DeleteTag( void *vpTag );}}
-\DoxyCodeLine{475 xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{476 xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dKey, xbInt16 iRetrieveSw );}
-\DoxyCodeLine{477 xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{478 xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{479 xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{480 \textcolor{keywordtype}{char} GetKeyType( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{481 xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{482 xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{483 xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{484 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetReuseEmptyNodesSw() \textcolor{keyword}{const};}
-\DoxyCodeLine{485 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{486 \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{487 \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
-\DoxyCodeLine{488 xbInt16 GetTagCount() \textcolor{keyword}{const};}
+\DoxyCodeLine{436 xbMdxTag *next;}
+\DoxyCodeLine{437 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bFoundSts; \textcolor{comment}{// key found? used to determine if new key should be added in XB\_EMULATE\_DBASE mode in AddKey}}
+\DoxyCodeLine{438 }
+\DoxyCodeLine{439 }
+\DoxyCodeLine{440 xbInt16 iKeySts; \textcolor{comment}{// key updated? set in method CreateKey, checked in AddKey and DeleteKey routines}}
+\DoxyCodeLine{441 \textcolor{comment}{// old key filtered new key filtered iKeySts}}
+\DoxyCodeLine{442 \textcolor{comment}{// Y Y XB\_UPD\_KEY 2 -\/ update key if changed (delete and add)}}
+\DoxyCodeLine{443 \textcolor{comment}{// Y N XB\_DEL\_KEY 3 -\/ delete key}}
+\DoxyCodeLine{444 \textcolor{comment}{// N Y XB\_ADD\_KEY 1 -\/ add key}}
+\DoxyCodeLine{445 \textcolor{comment}{// N N 0 -\/ no update}}
+\DoxyCodeLine{446 }
+\DoxyCodeLine{447 }
+\DoxyCodeLine{448 \};}
+\DoxyCodeLine{449 }
+\DoxyCodeLine{450 }
+\DoxyCodeLine{451 \textcolor{keyword}{class }XBDLLEXPORT xbIxMdx : \textcolor{keyword}{public} xbIx \{}
+\DoxyCodeLine{452 \textcolor{keyword}{public}:}
+\DoxyCodeLine{453 xbIxMdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
+\DoxyCodeLine{454 \string~xbIxMdx();}
+\DoxyCodeLine{455 \textcolor{keyword}{virtual} xbInt16 CheckTagIntegrity( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt );}
+\DoxyCodeLine{456 \textcolor{keyword}{virtual} xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{457 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{458 \textcolor{keyword}{virtual} xbInt16 FindKey( \textcolor{keywordtype}{void} *vpTag, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dKey, xbInt16 iRetrieveSw );}
+\DoxyCodeLine{459 \textcolor{keyword}{virtual} xbInt16 GetFirstKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{460 \textcolor{keyword}{virtual} xbString \&GetKeyExpression( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{461 \textcolor{keyword}{virtual} xbString \&GetKeyFilter( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{462 \textcolor{keyword}{virtual} \textcolor{keywordtype}{char} GetKeyType( \textcolor{keyword}{const} \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{463 \textcolor{keyword}{virtual} xbInt16 GetLastKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{464 \textcolor{keyword}{virtual} xbInt16 GetNextKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{465 \textcolor{keyword}{virtual} xbInt16 GetPrevKey( \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{466 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetReuseEmptyNodesSw() \textcolor{keyword}{const};}
+\DoxyCodeLine{467 \textcolor{keyword}{virtual} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetSortOrder( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{468 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetTag( xbInt16 iTagNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{469 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} *GetTag( xbString \&sTagName ) \textcolor{keyword}{const};}
+\DoxyCodeLine{470 \textcolor{keyword}{virtual} xbInt16 GetTagCount() \textcolor{keyword}{const};}
+\DoxyCodeLine{471 }
+\DoxyCodeLine{472 \textcolor{keyword}{virtual} xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{473 \textcolor{keyword}{virtual} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{474 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} GetTagName( \textcolor{keywordtype}{void} *vpTag, xbString \&sTagName );}
+\DoxyCodeLine{475 }
+\DoxyCodeLine{476 \textcolor{keyword}{virtual} xbInt16 GetUnique( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{477 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbInt16 iTagNo );}
+\DoxyCodeLine{478 \textcolor{keyword}{virtual} xbInt16 SetCurTag( xbString \&sTagName );}
+\DoxyCodeLine{479 \textcolor{keywordtype}{void} SetReuseEmptyNodesSw( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bReuse );}
+\DoxyCodeLine{480 }
+\DoxyCodeLine{481 \textcolor{keywordtype}{void} TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{482 }
+\DoxyCodeLine{483 }
+\DoxyCodeLine{484 \textcolor{keyword}{virtual} xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{485 }
+\DoxyCodeLine{486 }
+\DoxyCodeLine{487 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{488 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
\DoxyCodeLine{489 }
-\DoxyCodeLine{490 xbString \&GetTagName( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{491 \textcolor{keyword}{const} \textcolor{keywordtype}{char} * GetTagName( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOpt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{492 \textcolor{keywordtype}{void} GetTagName( \textcolor{keywordtype}{void} *vpTag, xbString \&sTagName );}
-\DoxyCodeLine{493 }
-\DoxyCodeLine{494 xbInt16 GetUnique( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{495 xbInt16 Reindex( \textcolor{keywordtype}{void} **vpTag );}
-\DoxyCodeLine{496 xbInt16 SetCurTag( xbInt16 iTagNo );}
-\DoxyCodeLine{497 xbInt16 SetCurTag( xbString \&sTagName );}
-\DoxyCodeLine{498 \textcolor{keywordtype}{void} SetReuseEmptyNodesSw( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bReuse );}
-\DoxyCodeLine{499 }
-\DoxyCodeLine{500 \textcolor{keywordtype}{void} TestStub( \textcolor{keywordtype}{char} *s, \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{501 }
-\DoxyCodeLine{502 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{503 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
-\DoxyCodeLine{504 }
-\DoxyCodeLine{505 xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
-\DoxyCodeLine{506 xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );}
-\DoxyCodeLine{507 xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{508 xbInt16 Close();}
-\DoxyCodeLine{509 xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
-\DoxyCodeLine{510 xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
-\DoxyCodeLine{511 xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{512 }
-\DoxyCodeLine{513 xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{514 }
-\DoxyCodeLine{515 xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
-\DoxyCodeLine{516 xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
-\DoxyCodeLine{517 xbInt16 GetLastKey( xbUInt32 ulBlockNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
-\DoxyCodeLine{518 \textcolor{keywordtype}{void} *GetTagTblPtr() \textcolor{keyword}{const};}
-\DoxyCodeLine{519 \textcolor{keywordtype}{void} Init( xbInt16 iOpt = 0 );}
-\DoxyCodeLine{520 xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
-\DoxyCodeLine{521 xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
-\DoxyCodeLine{522 xbInt16 KeyExists( \textcolor{keywordtype}{void} * );}
-\DoxyCodeLine{523 xbInt16 LoadTagTable();}
-\DoxyCodeLine{524 xbInt16 ReadHeadBlock(xbInt16 iOpt); \textcolor{comment}{// read the header node of the disk file}}
-\DoxyCodeLine{525 xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
-\DoxyCodeLine{526 xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
-\DoxyCodeLine{527 xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
-\DoxyCodeLine{528 xbInt16 WriteHeadBlock( xbInt16 iOption );}
+\DoxyCodeLine{490 xbInt16 AddKey( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo );}
+\DoxyCodeLine{491 xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );}
+\DoxyCodeLine{492 \textcolor{keywordtype}{void} CalcBtreePointers();}
+\DoxyCodeLine{493 \textcolor{keywordtype}{char} CalcTagKeyFmt( xbExp \&exp );}
+\DoxyCodeLine{494 }
+\DoxyCodeLine{495 xbInt16 CheckForDupKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{496 \textcolor{keyword}{virtual} xbInt16 Close();}
+\DoxyCodeLine{497 xbInt16 CreateKey( \textcolor{keywordtype}{void} * vpTag, xbInt16 iOpt );}
+\DoxyCodeLine{498 xbInt16 DeleteFromNode( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );}
+\DoxyCodeLine{499 xbInt16 DeleteKey( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{500 }
+\DoxyCodeLine{501 \textcolor{keyword}{virtual} xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{502 }
+\DoxyCodeLine{503 xbInt16 FindKeyForCurRec( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{504 xbInt16 GetKeySts( \textcolor{keywordtype}{void} *vpTag ) \textcolor{keyword}{const};}
+\DoxyCodeLine{505 xbInt16 GetLastKey( xbUInt32 ulBlockNo, \textcolor{keywordtype}{void} *vpTag, xbInt16 lRetrieveSw );}
+\DoxyCodeLine{506 \textcolor{keywordtype}{void} *GetTagTblPtr() \textcolor{keyword}{const};}
+\DoxyCodeLine{507 }
+\DoxyCodeLine{508 xbInt16 HarvestTagNodes( xbMdxTag *mpTag, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bRecycleRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
+\DoxyCodeLine{509 \textcolor{keywordtype}{void} Init( xbInt16 iOpt = 0 );}
+\DoxyCodeLine{510 xbInt16 InsertNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );}
+\DoxyCodeLine{511 xbInt16 InsertNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
+\DoxyCodeLine{512 xbInt16 KeyExists( \textcolor{keywordtype}{void} * );}
+\DoxyCodeLine{513 xbInt16 LoadTagTable();}
+\DoxyCodeLine{514 xbInt16 ReadHeadBlock(xbInt16 iOpt); \textcolor{comment}{// read the header node of the disk file}}
+\DoxyCodeLine{515 \textcolor{comment}{//virtual xbInt16 Reindex( void **vpTag );}}
+\DoxyCodeLine{516 xbInt16 SplitNodeI( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );}
+\DoxyCodeLine{517 xbInt16 SplitNodeL( \textcolor{keywordtype}{void} *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, \textcolor{keywordtype}{char} *cpKeyBuf, xbUInt32 uiPtr );}
+\DoxyCodeLine{518 xbInt16 UpdateTagKey( \textcolor{keywordtype}{char} cAction, \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulRecNo = 0 );}
+\DoxyCodeLine{519 xbInt16 WriteHeadBlock( xbInt16 iOption );}
+\DoxyCodeLine{520 }
+\DoxyCodeLine{521 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{522 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL );}
+\DoxyCodeLine{523 xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );}
+\DoxyCodeLine{524 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );}
+\DoxyCodeLine{525 xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
+\DoxyCodeLine{526 \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
+\DoxyCodeLine{527 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{528 }
\DoxyCodeLine{529 }
-\DoxyCodeLine{530 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{531 xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, \textcolor{keywordtype}{void} *vpTag = NULL );}
-\DoxyCodeLine{532 xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );}
-\DoxyCodeLine{533 xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );}
-\DoxyCodeLine{534 xbInt16 DumpIxForTag( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt );}
-\DoxyCodeLine{535 \textcolor{keywordtype}{void} DumpIxNodeChain( \textcolor{keywordtype}{void} *vpTag, xbInt16 iOutputOpt ) \textcolor{keyword}{const};}
-\DoxyCodeLine{536 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{537 }
-\DoxyCodeLine{538 \textcolor{keyword}{private}:}
-\DoxyCodeLine{539 xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
-\DoxyCodeLine{540 \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
-\DoxyCodeLine{541 xbUInt32 BlockToPage( xbUInt32 ulBlockNo );}
-\DoxyCodeLine{542 \textcolor{keywordtype}{void} CalcBtreePointers();}
-\DoxyCodeLine{543 \textcolor{keywordtype}{char} CalcTagKeyFmt( xbExp \&exp );}
-\DoxyCodeLine{544 \textcolor{keywordtype}{char} CalcTagFwdThread1();}
-\DoxyCodeLine{545 \textcolor{keywordtype}{char} CalcTagFwdThread2();}
-\DoxyCodeLine{546 xbMdxTag *ClearTagTable();}
-\DoxyCodeLine{547 xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );}
-\DoxyCodeLine{548 xbInt16 GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
-\DoxyCodeLine{549 xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
-\DoxyCodeLine{550 xbInt16 GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
-\DoxyCodeLine{551 xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHarvestRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
-\DoxyCodeLine{552 xbInt16 HarvestTagNodes( xbMdxTag *mpTag, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bRecycleRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
-\DoxyCodeLine{553 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
-\DoxyCodeLine{554 xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );}
-\DoxyCodeLine{555 xbInt16 KeySetPosDel( xbMdxTag *mpTag );}
-\DoxyCodeLine{556 xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );}
-\DoxyCodeLine{557 xbUInt32 PageToBlock( xbUInt32 ulPageNo );}
-\DoxyCodeLine{558 xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );}
-\DoxyCodeLine{559 xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );}
-\DoxyCodeLine{560 }
-\DoxyCodeLine{561 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
-\DoxyCodeLine{562 xbInt16 PrintKey( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, \textcolor{keywordtype}{char} cType, xbInt16 iOutputOpt );}
-\DoxyCodeLine{563 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{564 }
-\DoxyCodeLine{565 \textcolor{comment}{// MDX File Header Fields}}
-\DoxyCodeLine{566 \textcolor{keywordtype}{char} cVersion;}
-\DoxyCodeLine{567 \textcolor{keywordtype}{char} cCreateYY;}
-\DoxyCodeLine{568 \textcolor{keywordtype}{char} cCreateMM;}
-\DoxyCodeLine{569 \textcolor{keywordtype}{char} cCreateDD;}
-\DoxyCodeLine{570 xbString sFileName;}
-\DoxyCodeLine{571 xbInt16 iBlockFactor; \textcolor{comment}{// 1-\/32 \#of 512 byte segments in a block}}
-\DoxyCodeLine{572 }
-\DoxyCodeLine{573 \textcolor{comment}{// use file version}}
-\DoxyCodeLine{574 \textcolor{comment}{// xbInt16 iBlockSize; // Stored at the xbFile level}}
-\DoxyCodeLine{575 }
-\DoxyCodeLine{576 \textcolor{keywordtype}{char} cProdIxFlag;}
-\DoxyCodeLine{577 \textcolor{keywordtype}{char} cTagEntryCnt;}
-\DoxyCodeLine{578 xbInt16 iTagLen;}
-\DoxyCodeLine{579 xbInt16 iTagUseCnt;}
-\DoxyCodeLine{580 \textcolor{keywordtype}{char} cNextTag; \textcolor{comment}{// byte 28 +1}}
-\DoxyCodeLine{581 \textcolor{keywordtype}{char} c1B; \textcolor{comment}{// always 0x1B}}
-\DoxyCodeLine{582 xbUInt32 ulPageCnt; \textcolor{comment}{// number of 512 byte pages in the mdx file}}
-\DoxyCodeLine{583 xbUInt32 ulFirstFreePage; \textcolor{comment}{// page number corresponding to the next free block}}
-\DoxyCodeLine{584 xbUInt32 ulNoOfBlockAvail; \textcolor{comment}{// might be improperly named?? not sure how it is used}}
-\DoxyCodeLine{585 \textcolor{keywordtype}{char} cUpdateYY;}
-\DoxyCodeLine{586 \textcolor{keywordtype}{char} cUpdateMM;}
-\DoxyCodeLine{587 \textcolor{keywordtype}{char} cUpdateDD;}
-\DoxyCodeLine{588 \textcolor{comment}{// end of MDX Header fields}}
+\DoxyCodeLine{530 xbMdxTag *mdxTagTbl;}
+\DoxyCodeLine{531 }
+\DoxyCodeLine{532 \textcolor{comment}{// MDX File Header Fields}}
+\DoxyCodeLine{533 \textcolor{keywordtype}{char} cVersion;}
+\DoxyCodeLine{534 \textcolor{keywordtype}{char} cCreateYY;}
+\DoxyCodeLine{535 \textcolor{keywordtype}{char} cCreateMM;}
+\DoxyCodeLine{536 \textcolor{keywordtype}{char} cCreateDD;}
+\DoxyCodeLine{537 xbString sFileName;}
+\DoxyCodeLine{538 xbInt16 iBlockFactor; \textcolor{comment}{// 1-\/32 \#of 512 byte segments in a block}}
+\DoxyCodeLine{539 }
+\DoxyCodeLine{540 \textcolor{comment}{// use file version}}
+\DoxyCodeLine{541 \textcolor{comment}{// xbInt16 iBlockSize; // Stored at the xbFile level}}
+\DoxyCodeLine{542 }
+\DoxyCodeLine{543 \textcolor{keywordtype}{char} cProdIxFlag;}
+\DoxyCodeLine{544 \textcolor{keywordtype}{char} cTagEntryCnt;}
+\DoxyCodeLine{545 xbInt16 iTagLen;}
+\DoxyCodeLine{546 xbInt16 iTagUseCnt;}
+\DoxyCodeLine{547 \textcolor{keywordtype}{char} cNextTag; \textcolor{comment}{// byte 28 +1}}
+\DoxyCodeLine{548 \textcolor{keywordtype}{char} c1B; \textcolor{comment}{// always 0x1B}}
+\DoxyCodeLine{549 xbUInt32 ulPageCnt; \textcolor{comment}{// number of 512 byte pages in the mdx file}}
+\DoxyCodeLine{550 xbUInt32 ulFirstFreePage; \textcolor{comment}{// page number corresponding to the next free block}}
+\DoxyCodeLine{551 xbUInt32 ulNoOfBlockAvail; \textcolor{comment}{// might be improperly named?? not sure how it is used}}
+\DoxyCodeLine{552 \textcolor{keywordtype}{char} cUpdateYY;}
+\DoxyCodeLine{553 \textcolor{keywordtype}{char} cUpdateMM;}
+\DoxyCodeLine{554 \textcolor{keywordtype}{char} cUpdateDD;}
+\DoxyCodeLine{555 \textcolor{comment}{// end of MDX Header fields}}
+\DoxyCodeLine{556 }
+\DoxyCodeLine{557 }
+\DoxyCodeLine{558 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bReuseEmptyNodes; \textcolor{comment}{// Reuese empty MDX nodes when all keys deleted?}}
+\DoxyCodeLine{559 \textcolor{comment}{// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file}}
+\DoxyCodeLine{560 \textcolor{comment}{// Codebase 6.x reuses empty nodes.}}
+\DoxyCodeLine{561 \textcolor{comment}{// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.}}
+\DoxyCodeLine{562 }
+\DoxyCodeLine{563 }
+\DoxyCodeLine{564 \textcolor{keyword}{private}:}
+\DoxyCodeLine{565 xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );}
+\DoxyCodeLine{566 \textcolor{keywordtype}{void} AppendNodeChain( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode );}
+\DoxyCodeLine{567 xbUInt32 BlockToPage( xbUInt32 ulBlockNo );}
+\DoxyCodeLine{568 xbMdxTag *ClearTagTable();}
+\DoxyCodeLine{569 xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );}
+\DoxyCodeLine{570 xbInt16 GetDbfPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulDbfPtr ) \textcolor{keyword}{const};}
+\DoxyCodeLine{571 xbInt16 GetKeyPtr( \textcolor{keywordtype}{void} *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 \&ulKeyPtr ) \textcolor{keyword}{const};}
+\DoxyCodeLine{572 xbInt16 GetLastKeyForBlockNo( \textcolor{keywordtype}{void} *vpTag, xbUInt32 ulBlockNo, \textcolor{keywordtype}{char} *cpKeyBuf );}
+\DoxyCodeLine{573 xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bHarvestRoot = \mbox{\hyperlink{xbtypes_8h_adc4b6ca5ad299f63675136d9e03938cc}{xbFalse}} );}
+\DoxyCodeLine{574 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsLeaf( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode ) \textcolor{keyword}{const};}
+\DoxyCodeLine{575 xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );}
+\DoxyCodeLine{576 xbInt16 KeySetPosDel( xbMdxTag *mpTag );}
+\DoxyCodeLine{577 xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );}
+\DoxyCodeLine{578 xbUInt32 PageToBlock( xbUInt32 ulPageNo );}
+\DoxyCodeLine{579 xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );}
+\DoxyCodeLine{580 xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );}
+\DoxyCodeLine{581 }
+\DoxyCodeLine{582 \textcolor{preprocessor}{ \#ifdef XB\_DEBUG\_SUPPORT}}
+\DoxyCodeLine{583 xbInt16 PrintKey( \textcolor{keywordtype}{void} *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, \textcolor{keywordtype}{char} cType, xbInt16 iOutputOpt );}
+\DoxyCodeLine{584 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{585 }
+\DoxyCodeLine{586 }
+\DoxyCodeLine{587 \};}
+\DoxyCodeLine{588 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{/* XB\_MDX\_SUPPORT */}\textcolor{preprocessor}{}}
\DoxyCodeLine{589 }
\DoxyCodeLine{590 }
-\DoxyCodeLine{591 }
-\DoxyCodeLine{592 xbMdxTag *mdxTagTbl;}
-\DoxyCodeLine{593 }
-\DoxyCodeLine{594 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bReuseEmptyNodes; \textcolor{comment}{// Reuese empty MDX nodes when all keys deleted?}}
-\DoxyCodeLine{595 \textcolor{comment}{// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file}}
-\DoxyCodeLine{596 \textcolor{comment}{// Codebase 6.x reuses empty nodes.}}
-\DoxyCodeLine{597 \textcolor{comment}{// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.}}
-\DoxyCodeLine{598 }
-\DoxyCodeLine{599 \};}
-\DoxyCodeLine{600 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_MDX\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{601 }
-\DoxyCodeLine{602 }
-\DoxyCodeLine{603 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{604 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_INDEX\_SUPPORT */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{605 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_INDEX\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{591 \textcolor{preprocessor}{\#ifdef XB\_TDX\_SUPPORT}}
+\DoxyCodeLine{592 }
+\DoxyCodeLine{593 \textcolor{keyword}{class }XBDLLEXPORT xbIxTdx : \textcolor{keyword}{public} xbIxMdx \{}
+\DoxyCodeLine{594 \textcolor{keyword}{public}:}
+\DoxyCodeLine{595 xbIxTdx( \mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}} * d );}
+\DoxyCodeLine{596 \string~xbIxTdx();}
+\DoxyCodeLine{597 }
+\DoxyCodeLine{598 xbInt16 CreateTag( \textcolor{keyword}{const} xbString \&sName, \textcolor{keyword}{const} xbString \&sKey, \textcolor{keyword}{const} xbString \&sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, \textcolor{keywordtype}{void} **vpTag );}
+\DoxyCodeLine{599 }
+\DoxyCodeLine{600 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{601 \textcolor{keyword}{friend} \textcolor{keyword}{class }\mbox{\hyperlink{namespacexb_ab2eae4b4732466698a7fdd89d77ba53b}{xbDbf}};}
+\DoxyCodeLine{602 xbInt16 Close();}
+\DoxyCodeLine{603 xbInt16 DeleteTag( \textcolor{keywordtype}{void} *vpTag );}
+\DoxyCodeLine{604 }
+\DoxyCodeLine{605 \textcolor{keyword}{private}:}
+\DoxyCodeLine{606 \};}
+\DoxyCodeLine{607 }
+\DoxyCodeLine{608 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* XB\_TDX\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{609 }
+\DoxyCodeLine{610 }
+\DoxyCodeLine{611 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{612 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{/* XB\_INDEX\_SUPPORT */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{613 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_INDEX\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbinsert_8cpp.tex b/docs/doxygen/latex/xbinsert_8cpp.tex
index 9f7c740..89624aa 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.1.0/src/sql/xbinsert.cpp File Reference}
-\label{xbinsert_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbinsert.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbinsert.cpp}}
+\hypertarget{xbinsert_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbinsert.cpp File Reference}
+\label{xbinsert_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbinsert.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbinsert.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixbase_8cpp.tex b/docs/doxygen/latex/xbixbase_8cpp.tex
index da7e909..ea21642 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.1.0/src/core/xbixbase.cpp File Reference}
-\label{xbixbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixbase.cpp}}
+\hypertarget{xbixbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbixbase.cpp File Reference}
+\label{xbixbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixbase.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixmdx_8cpp.tex b/docs/doxygen/latex/xbixmdx_8cpp.tex
index ecab55f..cc0f82b 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.1.0/src/core/xbixmdx.cpp File Reference}
-\label{xbixmdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixmdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixmdx.cpp}}
+\hypertarget{xbixmdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbixmdx.cpp File Reference}
+\label{xbixmdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixmdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixmdx.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixndx_8cpp.tex b/docs/doxygen/latex/xbixndx_8cpp.tex
index c25c6b6..a866f1e 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.1.0/src/core/xbixndx.cpp File Reference}
-\label{xbixndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbixndx.cpp}}
+\hypertarget{xbixndx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbixndx.cpp File Reference}
+\label{xbixndx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixndx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixndx.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbixtdx_8cpp.tex b/docs/doxygen/latex/xbixtdx_8cpp.tex
new file mode 100644
index 0000000..403fb98
--- /dev/null
+++ b/docs/doxygen/latex/xbixtdx_8cpp.tex
@@ -0,0 +1,3 @@
+\hypertarget{xbixtdx_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbixtdx.cpp File Reference}
+\label{xbixtdx_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixtdx.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbixtdx.cpp}}
+{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xblnklst_8h.tex b/docs/doxygen/latex/xblnklst_8h.tex
index 6ae38d4..24c4c5f 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.1.0/src/include/xblnklst.h File Reference}
-\label{xblnklst_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklst.h}}
+\hypertarget{xblnklst_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h File Reference}
+\label{xblnklst_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h}}
diff --git a/docs/doxygen/latex/xblnklst_8h_source.tex b/docs/doxygen/latex/xblnklst_8h_source.tex
index 536e0ab..7afdfce 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.1.0/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklst.h}}
+\label{xblnklst_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklst.h}}
\mbox{\hyperlink{xblnklst_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xblnklst.h}}
diff --git a/docs/doxygen/latex/xblnklstord_8h.tex b/docs/doxygen/latex/xblnklstord_8h.tex
index 6facabb..a5a3847 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.1.0/src/include/xblnklstord.h File Reference}
-\label{xblnklstord_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklstord.h}}
+\hypertarget{xblnklstord_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h File Reference}
+\label{xblnklstord_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h}}
diff --git a/docs/doxygen/latex/xblnklstord_8h_source.tex b/docs/doxygen/latex/xblnklstord_8h_source.tex
index a94bd82..ab66e9c 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.1.0/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnklstord.h}}
+\label{xblnklstord_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnklstord.h}}
\mbox{\hyperlink{xblnklstord_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xblnklstord.h}}
diff --git a/docs/doxygen/latex/xblnknod_8h.tex b/docs/doxygen/latex/xblnknod_8h.tex
index cc23e56..cccd96b 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.1.0/src/include/xblnknod.h File Reference}
-\label{xblnknod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnknod.h}}
+\hypertarget{xblnknod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h File Reference}
+\label{xblnknod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h}}
diff --git a/docs/doxygen/latex/xblnknod_8h_source.tex b/docs/doxygen/latex/xblnknod_8h_source.tex
index 4127b84..911fcbc 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.1.0/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblnknod.h}}
+\label{xblnknod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblnknod.h}}
\mbox{\hyperlink{xblnknod_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xblnknod.h}}
diff --git a/docs/doxygen/latex/xblog_8cpp.tex b/docs/doxygen/latex/xblog_8cpp.tex
index 1a69ec7..38f3fb7 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.1.0/src/core/xblog.cpp File Reference}
-\label{xblog_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xblog.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xblog.cpp}}
+\hypertarget{xblog_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xblog.cpp File Reference}
+\label{xblog_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xblog.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xblog.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xblog_8h.tex b/docs/doxygen/latex/xblog_8h.tex
index 9ad1cb8..1317096 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.1.0/src/include/xblog.h File Reference}
-\label{xblog_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblog.h}}
+\hypertarget{xblog_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h File Reference}
+\label{xblog_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h}}
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xblog_8h_source.tex b/docs/doxygen/latex/xblog_8h_source.tex
index 03a4094..bd8ac89 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.1.0/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xblog.h}}
+\label{xblog_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xblog.h}}
\mbox{\hyperlink{xblog_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xblog.h}}
@@ -35,25 +35,26 @@
\DoxyCodeLine{44 \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}}( \textcolor{keyword}{const} xbString \&sLogFileName );}
\DoxyCodeLine{45 \string~xbLog();}
\DoxyCodeLine{46 }
-\DoxyCodeLine{47 xbInt16 LogClose ();}
-\DoxyCodeLine{48 xbInt16 LogGetStatus ();}
-\DoxyCodeLine{49 xbInt16 LogOpen ();}
-\DoxyCodeLine{50 \textcolor{keywordtype}{void} LogSetStatus ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLogStatus );}
-\DoxyCodeLine{51 \textcolor{keywordtype}{void} LogSetLogSize( \textcolor{keywordtype}{size\_t} lSize ); \textcolor{comment}{// \{ LogSize = size; \}}}
-\DoxyCodeLine{52 xbInt16 LogWrite ( \textcolor{keyword}{const} xbString \&LogEntry, xbInt16 iOutputOption = 0 );}
-\DoxyCodeLine{53 xbInt16 LogWriteBytes( xbUInt32 lByteCnt, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p );}
-\DoxyCodeLine{54 }
-\DoxyCodeLine{55 \textcolor{keyword}{private}:}
-\DoxyCodeLine{56 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLoggingStatus; \textcolor{comment}{// false = logging off}}
-\DoxyCodeLine{57 \textcolor{comment}{// true = logging on}}
-\DoxyCodeLine{58 \textcolor{keywordtype}{size\_t} lLogSize;}
-\DoxyCodeLine{59 xbInt16 iShareMode;}
-\DoxyCodeLine{60 \};}
-\DoxyCodeLine{61 }
-\DoxyCodeLine{62 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LOGGING\_SUPPORT}}
-\DoxyCodeLine{63 \} \textcolor{comment}{// namespace}}
-\DoxyCodeLine{64 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLOG\_H\_\_}}
-\DoxyCodeLine{65 }
+\DoxyCodeLine{47 xbInt16 LogClose ();}
+\DoxyCodeLine{48 xbInt16 LogGetStatus ();}
+\DoxyCodeLine{49 xbInt16 LogOpen ();}
+\DoxyCodeLine{50 \textcolor{keywordtype}{void} LogSetStatus ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLogStatus );}
+\DoxyCodeLine{51 \textcolor{keywordtype}{void} LogSetLogSize( \textcolor{keywordtype}{size\_t} lSize ); \textcolor{comment}{// \{ LogSize = size; \}}}
+\DoxyCodeLine{52 xbInt16 LogWrite ( \textcolor{keyword}{const} xbString \&LogEntry, xbInt16 iOutputOption = 0 );}
+\DoxyCodeLine{53 xbInt16 LogWriteBytes( xbUInt32 lByteCnt, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p );}
+\DoxyCodeLine{54 \textcolor{keywordtype}{size\_t} LogGetLogSize()\textcolor{keyword}{ const }\{ \textcolor{keywordflow}{return} lLogSize; \}}
+\DoxyCodeLine{55 }
+\DoxyCodeLine{56 \textcolor{keyword}{private}:}
+\DoxyCodeLine{57 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bLoggingStatus; \textcolor{comment}{// false = logging off}}
+\DoxyCodeLine{58 \textcolor{comment}{// true = logging on}}
+\DoxyCodeLine{59 \textcolor{keywordtype}{size\_t} lLogSize;}
+\DoxyCodeLine{60 xbInt16 iShareMode;}
+\DoxyCodeLine{61 \};}
+\DoxyCodeLine{62 }
+\DoxyCodeLine{63 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_LOGGING\_SUPPORT}}
+\DoxyCodeLine{64 \} \textcolor{comment}{// namespace}}
+\DoxyCodeLine{65 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_XBLOG\_H\_\_}}
\DoxyCodeLine{66 }
+\DoxyCodeLine{67 }
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbmemo3_8cpp.tex b/docs/doxygen/latex/xbmemo3_8cpp.tex
index 9697fff..5301f05 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.1.0/src/core/xbmemo3.cpp File Reference}
-\label{xbmemo3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo3.cpp}}
+\hypertarget{xbmemo3_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo3.cpp File Reference}
+\label{xbmemo3_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo3.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo3.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbmemo4_8cpp.tex b/docs/doxygen/latex/xbmemo4_8cpp.tex
index 7f0a348..ab18a1c 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.1.0/src/core/xbmemo4.cpp File Reference}
-\label{xbmemo4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo4.cpp}}
+\hypertarget{xbmemo4_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo4.cpp File Reference}
+\label{xbmemo4_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo4.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo4.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbmemo_8cpp.tex b/docs/doxygen/latex/xbmemo_8cpp.tex
index c62dee8..1ba2932 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.1.0/src/core/xbmemo.cpp File Reference}
-\label{xbmemo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbmemo.cpp}}
+\hypertarget{xbmemo_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo.cpp File Reference}
+\label{xbmemo_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbmemo.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbmemo_8h.tex b/docs/doxygen/latex/xbmemo_8h.tex
index c9771e4..fed4cff 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.1.0/src/include/xbmemo.h File Reference}
-\label{xbmemo_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbmemo.h}}
+\hypertarget{xbmemo_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbmemo.h File Reference}
+\label{xbmemo_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbmemo.h}}
diff --git a/docs/doxygen/latex/xbmemo_8h_source.tex b/docs/doxygen/latex/xbmemo_8h_source.tex
index e46386c..a394de6 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.1.0/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbmemo.h}}
+\label{xbmemo_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbmemo.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbmemo.h}}
\mbox{\hyperlink{xbmemo_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbmemo.h}}
diff --git a/docs/doxygen/latex/xbretcod_8h.tex b/docs/doxygen/latex/xbretcod_8h.tex
index fc7d89e..ee2e1fc 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.1.0/src/include/xbretcod.h File Reference}
-\label{xbretcod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbretcod.h}}
+\hypertarget{xbretcod_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h File Reference}
+\label{xbretcod_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h}}
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
@@ -14,6 +14,8 @@ namespace \mbox{\hyperlink{namespacexb}{xb}}
\item
\#define \mbox{\hyperlink{xbretcod_8h_af1cd0baf346cad686fa4dd11f700012a}{XB\+\_\+\+INVALID\+\_\+\+OPTION}}~-\/101
\item
+\#define \mbox{\hyperlink{xbretcod_8h_a1b78533ada854b4185c51ad8a5ce9f02}{XB\+\_\+\+INVALID\+\_\+\+PARAMETER}}~-\/102
+\item
\#define \mbox{\hyperlink{xbretcod_8h_ac18036408d10e5eee1bf76cf92352b95}{XB\+\_\+\+DUP\+\_\+\+TABLE\+\_\+\+OR\+\_\+\+ALIAS}}~-\/110
\item
\#define \mbox{\hyperlink{xbretcod_8h_a13e6876470bd34c8c4e5533f115e04eb}{XB\+\_\+\+INVALID\+\_\+\+NODELINK}}~-\/120
@@ -329,6 +331,12 @@ namespace \mbox{\hyperlink{namespacexb}{xb}}
\doxysubsubsection{\texorpdfstring{XB\_INVALID\_PAGE}{XB\_INVALID\_PAGE}}
{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+PAGE~-\/603}
+\mbox{\Hypertarget{xbretcod_8h_a1b78533ada854b4185c51ad8a5ce9f02}\label{xbretcod_8h_a1b78533ada854b4185c51ad8a5ce9f02}}
+\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_PARAMETER@{XB\_INVALID\_PARAMETER}}
+\index{XB\_INVALID\_PARAMETER@{XB\_INVALID\_PARAMETER}!xbretcod.h@{xbretcod.h}}
+\doxysubsubsection{\texorpdfstring{XB\_INVALID\_PARAMETER}{XB\_INVALID\_PARAMETER}}
+{\footnotesize\ttfamily \#define XB\+\_\+\+INVALID\+\_\+\+PARAMETER~-\/102}
+
\mbox{\Hypertarget{xbretcod_8h_a4cedf96581c9cbc9c14d07494143702d}\label{xbretcod_8h_a4cedf96581c9cbc9c14d07494143702d}}
\index{xbretcod.h@{xbretcod.h}!XB\_INVALID\_PARM@{XB\_INVALID\_PARM}}
\index{XB\_INVALID\_PARM@{XB\_INVALID\_PARM}!xbretcod.h@{xbretcod.h}}
diff --git a/docs/doxygen/latex/xbretcod_8h_source.tex b/docs/doxygen/latex/xbretcod_8h_source.tex
index 48e4cbd..54e20a0 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.1.0/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbretcod.h}}
+\label{xbretcod_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbretcod.h}}
\mbox{\hyperlink{xbretcod_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbretcod.h}}
@@ -28,76 +28,77 @@
\DoxyCodeLine{24 \textcolor{preprocessor}{ \#define XB\_NO\_ERROR 0 }\textcolor{comment}{// general}}
\DoxyCodeLine{25 \textcolor{preprocessor}{ \#define XB\_NO\_MEMORY -\/100 }\textcolor{comment}{// general}}
\DoxyCodeLine{26 \textcolor{preprocessor}{ \#define XB\_INVALID\_OPTION -\/101 }\textcolor{comment}{// general}}
-\DoxyCodeLine{27 \textcolor{preprocessor}{ \#define XB\_DUP\_TABLE\_OR\_ALIAS -\/110 }\textcolor{comment}{// table manager}}
-\DoxyCodeLine{28 \textcolor{preprocessor}{ \#define XB\_INVALID\_NODELINK -\/120 }\textcolor{comment}{// linklist}}
-\DoxyCodeLine{29 \textcolor{preprocessor}{ \#define XB\_KEY\_NOT\_UNIQUE -\/121 }\textcolor{comment}{// linklist}}
-\DoxyCodeLine{30 \textcolor{preprocessor}{ \#define XB\_MEMCPY\_ERROR -\/122 }\textcolor{comment}{// memcpy failure}}
-\DoxyCodeLine{31 }
-\DoxyCodeLine{32 \textcolor{preprocessor}{ \#define XB\_FILE\_EXISTS -\/200 }\textcolor{comment}{// file}}
-\DoxyCodeLine{33 \textcolor{preprocessor}{ \#define XB\_ALREADY\_OPEN -\/201 }\textcolor{comment}{// file}}
-\DoxyCodeLine{34 \textcolor{preprocessor}{ \#define XB\_DBF\_FILE\_NOT\_OPEN -\/202 }\textcolor{comment}{// file}}
-\DoxyCodeLine{35 \textcolor{preprocessor}{ \#define XB\_FILE\_NOT\_FOUND -\/203 }\textcolor{comment}{// file}}
-\DoxyCodeLine{36 \textcolor{preprocessor}{ \#define XB\_FILE\_TYPE\_NOT\_SUPPORTED -\/204 }\textcolor{comment}{// file}}
-\DoxyCodeLine{37 \textcolor{preprocessor}{ \#define XB\_RENAME\_ERROR -\/205 }\textcolor{comment}{// file}}
-\DoxyCodeLine{38 \textcolor{preprocessor}{ \#define XB\_INVALID\_OBJECT -\/206 }\textcolor{comment}{// file}}
-\DoxyCodeLine{39 \textcolor{preprocessor}{ \#define XB\_NOT\_OPEN -\/207 }\textcolor{comment}{// file}}
-\DoxyCodeLine{40 \textcolor{preprocessor}{ \#define XB\_NOT\_FOUND -\/208 }\textcolor{comment}{// file}}
-\DoxyCodeLine{41 \textcolor{preprocessor}{ \#define XB\_OPEN\_ERROR -\/209 }\textcolor{comment}{// file}}
-\DoxyCodeLine{42 \textcolor{preprocessor}{ \#define XB\_CLOSE\_ERROR -\/210 }\textcolor{comment}{// file}}
-\DoxyCodeLine{43 \textcolor{preprocessor}{ \#define XB\_SEEK\_ERROR -\/211 }\textcolor{comment}{// file}}
-\DoxyCodeLine{44 \textcolor{preprocessor}{ \#define XB\_READ\_ERROR -\/212 }\textcolor{comment}{// file}}
-\DoxyCodeLine{45 \textcolor{preprocessor}{ \#define XB\_WRITE\_ERROR -\/213 }\textcolor{comment}{// file}}
-\DoxyCodeLine{46 \textcolor{preprocessor}{ \#define XB\_EOF -\/214 }\textcolor{comment}{// file}}
-\DoxyCodeLine{47 \textcolor{preprocessor}{ \#define XB\_BOF -\/215 }\textcolor{comment}{// file}}
-\DoxyCodeLine{48 \textcolor{preprocessor}{ \#define XB\_INVALID\_BLOCK\_SIZE -\/216 }\textcolor{comment}{// file}}
-\DoxyCodeLine{49 \textcolor{preprocessor}{ \#define XB\_INVALID\_BLOCK\_NO -\/217 }\textcolor{comment}{// file}}
-\DoxyCodeLine{50 \textcolor{preprocessor}{ \#define XB\_INVALID\_RECORD -\/218 }\textcolor{comment}{// file}}
-\DoxyCodeLine{51 \textcolor{preprocessor}{ \#define XB\_DELETE\_FAILED -\/219 }\textcolor{comment}{// file}}
-\DoxyCodeLine{52 \textcolor{preprocessor}{ \#define XB\_INVALID\_TABLE\_NAME -\/220 }\textcolor{comment}{// file}}
-\DoxyCodeLine{53 \textcolor{preprocessor}{ \#define XB\_EMPTY -\/221 }\textcolor{comment}{// file}}
-\DoxyCodeLine{54 \textcolor{preprocessor}{ \#define XB\_LIMIT\_REACHED -\/222 }\textcolor{comment}{// file}}
-\DoxyCodeLine{55 \textcolor{preprocessor}{ \#define XB\_BLOCKREAD\_NOT\_ENABLED -\/223 }\textcolor{comment}{// file}}
-\DoxyCodeLine{56 \textcolor{preprocessor}{ \#define XB\_DIRECTORY\_ERROR -\/224 }\textcolor{comment}{// file}}
-\DoxyCodeLine{57 }
-\DoxyCodeLine{58 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_TYPE -\/300 }\textcolor{comment}{// field}}
-\DoxyCodeLine{59 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_NO -\/301 }\textcolor{comment}{// field}}
-\DoxyCodeLine{60 \textcolor{preprocessor}{ \#define XB\_INVALID\_DATA -\/302 }\textcolor{comment}{// field}}
-\DoxyCodeLine{61 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_NAME -\/303 }\textcolor{comment}{// field}}
-\DoxyCodeLine{62 \textcolor{preprocessor}{ \#define XB\_INVALID\_MEMO\_FIELD -\/304 }\textcolor{comment}{// field}}
-\DoxyCodeLine{63 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD -\/305 }\textcolor{comment}{// field}}
-\DoxyCodeLine{64 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_LEN -\/306 }\textcolor{comment}{// field}}
-\DoxyCodeLine{65 \textcolor{preprocessor}{ \#define XB\_INVALID\_DATE -\/307 }\textcolor{comment}{// date field}}
-\DoxyCodeLine{66 }
-\DoxyCodeLine{67 \textcolor{preprocessor}{ \#define XB\_INVALID\_LOCK\_OPTION -\/400 }\textcolor{comment}{// lock}}
-\DoxyCodeLine{68 \textcolor{preprocessor}{ \#define XB\_LOCK\_FAILED -\/401 }\textcolor{comment}{// lock}}
-\DoxyCodeLine{69 \textcolor{preprocessor}{ \#define XB\_TABLE\_NOT\_LOCKED -\/402 }\textcolor{comment}{// lock -\/ need table locked for operation}}
-\DoxyCodeLine{70 }
-\DoxyCodeLine{71 \textcolor{preprocessor}{ \#define XB\_PARSE\_ERROR -\/500 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{72 \textcolor{preprocessor}{ \#define XB\_INVALID\_FUNCTION -\/501 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{73 \textcolor{preprocessor}{ \#define XB\_INVALID\_PARM -\/502 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{74 \textcolor{preprocessor}{ \#define XB\_INCONSISTENT\_PARM\_LENS -\/503 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{75 \textcolor{preprocessor}{ \#define XB\_INCOMPATIBLE\_OPERANDS -\/504 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{76 \textcolor{preprocessor}{ \#define XB\_UNBALANCED\_PARENS -\/505 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{77 \textcolor{preprocessor}{ \#define XB\_UNBALANCED\_QUOTES -\/506 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{78 \textcolor{preprocessor}{ \#define XB\_INVALID\_EXPRESSION -\/507 }\textcolor{comment}{// expression}}
-\DoxyCodeLine{79 }
-\DoxyCodeLine{80 \textcolor{preprocessor}{ \#define XB\_INVALID\_KEYNO -\/600 }\textcolor{comment}{// index}}
-\DoxyCodeLine{81 \textcolor{preprocessor}{ \#define XB\_INVALID\_INDEX -\/601 }\textcolor{comment}{// index file error}}
-\DoxyCodeLine{82 \textcolor{preprocessor}{ \#define XB\_INVALID\_TAG -\/602 }\textcolor{comment}{// invalid index tag name, must be <= 10 bytes}}
-\DoxyCodeLine{83 \textcolor{preprocessor}{ \#define XB\_INVALID\_PAGE -\/603 }\textcolor{comment}{// invalid index page}}
-\DoxyCodeLine{84 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{ \#define XB\_INVALID\_PARAMETER -\/102 }\textcolor{comment}{// general}}
+\DoxyCodeLine{28 \textcolor{preprocessor}{ \#define XB\_DUP\_TABLE\_OR\_ALIAS -\/110 }\textcolor{comment}{// table manager}}
+\DoxyCodeLine{29 \textcolor{preprocessor}{ \#define XB\_INVALID\_NODELINK -\/120 }\textcolor{comment}{// linklist}}
+\DoxyCodeLine{30 \textcolor{preprocessor}{ \#define XB\_KEY\_NOT\_UNIQUE -\/121 }\textcolor{comment}{// linklist, index}}
+\DoxyCodeLine{31 \textcolor{preprocessor}{ \#define XB\_MEMCPY\_ERROR -\/122 }\textcolor{comment}{// memcpy failure}}
+\DoxyCodeLine{32 }
+\DoxyCodeLine{33 \textcolor{preprocessor}{ \#define XB\_FILE\_EXISTS -\/200 }\textcolor{comment}{// file}}
+\DoxyCodeLine{34 \textcolor{preprocessor}{ \#define XB\_ALREADY\_OPEN -\/201 }\textcolor{comment}{// file}}
+\DoxyCodeLine{35 \textcolor{preprocessor}{ \#define XB\_DBF\_FILE\_NOT\_OPEN -\/202 }\textcolor{comment}{// file}}
+\DoxyCodeLine{36 \textcolor{preprocessor}{ \#define XB\_FILE\_NOT\_FOUND -\/203 }\textcolor{comment}{// file}}
+\DoxyCodeLine{37 \textcolor{preprocessor}{ \#define XB\_FILE\_TYPE\_NOT\_SUPPORTED -\/204 }\textcolor{comment}{// file}}
+\DoxyCodeLine{38 \textcolor{preprocessor}{ \#define XB\_RENAME\_ERROR -\/205 }\textcolor{comment}{// file}}
+\DoxyCodeLine{39 \textcolor{preprocessor}{ \#define XB\_INVALID\_OBJECT -\/206 }\textcolor{comment}{// file}}
+\DoxyCodeLine{40 \textcolor{preprocessor}{ \#define XB\_NOT\_OPEN -\/207 }\textcolor{comment}{// file}}
+\DoxyCodeLine{41 \textcolor{preprocessor}{ \#define XB\_NOT\_FOUND -\/208 }\textcolor{comment}{// file}}
+\DoxyCodeLine{42 \textcolor{preprocessor}{ \#define XB\_OPEN\_ERROR -\/209 }\textcolor{comment}{// file}}
+\DoxyCodeLine{43 \textcolor{preprocessor}{ \#define XB\_CLOSE\_ERROR -\/210 }\textcolor{comment}{// file}}
+\DoxyCodeLine{44 \textcolor{preprocessor}{ \#define XB\_SEEK\_ERROR -\/211 }\textcolor{comment}{// file}}
+\DoxyCodeLine{45 \textcolor{preprocessor}{ \#define XB\_READ\_ERROR -\/212 }\textcolor{comment}{// file}}
+\DoxyCodeLine{46 \textcolor{preprocessor}{ \#define XB\_WRITE\_ERROR -\/213 }\textcolor{comment}{// file}}
+\DoxyCodeLine{47 \textcolor{preprocessor}{ \#define XB\_EOF -\/214 }\textcolor{comment}{// file}}
+\DoxyCodeLine{48 \textcolor{preprocessor}{ \#define XB\_BOF -\/215 }\textcolor{comment}{// file}}
+\DoxyCodeLine{49 \textcolor{preprocessor}{ \#define XB\_INVALID\_BLOCK\_SIZE -\/216 }\textcolor{comment}{// file}}
+\DoxyCodeLine{50 \textcolor{preprocessor}{ \#define XB\_INVALID\_BLOCK\_NO -\/217 }\textcolor{comment}{// file}}
+\DoxyCodeLine{51 \textcolor{preprocessor}{ \#define XB\_INVALID\_RECORD -\/218 }\textcolor{comment}{// file}}
+\DoxyCodeLine{52 \textcolor{preprocessor}{ \#define XB\_DELETE\_FAILED -\/219 }\textcolor{comment}{// file}}
+\DoxyCodeLine{53 \textcolor{preprocessor}{ \#define XB\_INVALID\_TABLE\_NAME -\/220 }\textcolor{comment}{// file}}
+\DoxyCodeLine{54 \textcolor{preprocessor}{ \#define XB\_EMPTY -\/221 }\textcolor{comment}{// file}}
+\DoxyCodeLine{55 \textcolor{preprocessor}{ \#define XB\_LIMIT\_REACHED -\/222 }\textcolor{comment}{// file}}
+\DoxyCodeLine{56 \textcolor{preprocessor}{ \#define XB\_BLOCKREAD\_NOT\_ENABLED -\/223 }\textcolor{comment}{// file}}
+\DoxyCodeLine{57 \textcolor{preprocessor}{ \#define XB\_DIRECTORY\_ERROR -\/224 }\textcolor{comment}{// file}}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_TYPE -\/300 }\textcolor{comment}{// field}}
+\DoxyCodeLine{60 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_NO -\/301 }\textcolor{comment}{// field}}
+\DoxyCodeLine{61 \textcolor{preprocessor}{ \#define XB\_INVALID\_DATA -\/302 }\textcolor{comment}{// field}}
+\DoxyCodeLine{62 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_NAME -\/303 }\textcolor{comment}{// field}}
+\DoxyCodeLine{63 \textcolor{preprocessor}{ \#define XB\_INVALID\_MEMO\_FIELD -\/304 }\textcolor{comment}{// field}}
+\DoxyCodeLine{64 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD -\/305 }\textcolor{comment}{// field}}
+\DoxyCodeLine{65 \textcolor{preprocessor}{ \#define XB\_INVALID\_FIELD\_LEN -\/306 }\textcolor{comment}{// field}}
+\DoxyCodeLine{66 \textcolor{preprocessor}{ \#define XB\_INVALID\_DATE -\/307 }\textcolor{comment}{// date field}}
+\DoxyCodeLine{67 }
+\DoxyCodeLine{68 \textcolor{preprocessor}{ \#define XB\_INVALID\_LOCK\_OPTION -\/400 }\textcolor{comment}{// lock}}
+\DoxyCodeLine{69 \textcolor{preprocessor}{ \#define XB\_LOCK\_FAILED -\/401 }\textcolor{comment}{// lock}}
+\DoxyCodeLine{70 \textcolor{preprocessor}{ \#define XB\_TABLE\_NOT\_LOCKED -\/402 }\textcolor{comment}{// lock -\/ need table locked for operation}}
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 \textcolor{preprocessor}{ \#define XB\_PARSE\_ERROR -\/500 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{73 \textcolor{preprocessor}{ \#define XB\_INVALID\_FUNCTION -\/501 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{74 \textcolor{preprocessor}{ \#define XB\_INVALID\_PARM -\/502 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{75 \textcolor{preprocessor}{ \#define XB\_INCONSISTENT\_PARM\_LENS -\/503 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{76 \textcolor{preprocessor}{ \#define XB\_INCOMPATIBLE\_OPERANDS -\/504 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{77 \textcolor{preprocessor}{ \#define XB\_UNBALANCED\_PARENS -\/505 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{78 \textcolor{preprocessor}{ \#define XB\_UNBALANCED\_QUOTES -\/506 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{79 \textcolor{preprocessor}{ \#define XB\_INVALID\_EXPRESSION -\/507 }\textcolor{comment}{// expression}}
+\DoxyCodeLine{80 }
+\DoxyCodeLine{81 \textcolor{preprocessor}{ \#define XB\_INVALID\_KEYNO -\/600 }\textcolor{comment}{// index}}
+\DoxyCodeLine{82 \textcolor{preprocessor}{ \#define XB\_INVALID\_INDEX -\/601 }\textcolor{comment}{// index file error}}
+\DoxyCodeLine{83 \textcolor{preprocessor}{ \#define XB\_INVALID\_TAG -\/602 }\textcolor{comment}{// invalid index tag name, must be <= 10 bytes}}
+\DoxyCodeLine{84 \textcolor{preprocessor}{ \#define XB\_INVALID\_PAGE -\/603 }\textcolor{comment}{// invalid index page}}
\DoxyCodeLine{85 }
-\DoxyCodeLine{86 \textcolor{preprocessor}{ \#define XB\_SYNTAX\_ERROR -\/700 }\textcolor{comment}{// sql syntax error}}
-\DoxyCodeLine{87 }
+\DoxyCodeLine{86 }
+\DoxyCodeLine{87 \textcolor{preprocessor}{ \#define XB\_SYNTAX\_ERROR -\/700 }\textcolor{comment}{// sql syntax error}}
\DoxyCodeLine{88 }
-\DoxyCodeLine{89 \textcolor{preprocessor}{ \#define XB\_MAX\_ERROR\_NO -\/999}}
-\DoxyCodeLine{90 }
+\DoxyCodeLine{89 }
+\DoxyCodeLine{90 \textcolor{preprocessor}{ \#define XB\_MAX\_ERROR\_NO -\/999}}
\DoxyCodeLine{91 }
-\DoxyCodeLine{92 \textcolor{comment}{/* when updating this table, also need to update messages in xbssv.cpp */}}
-\DoxyCodeLine{93 }
+\DoxyCodeLine{92 }
+\DoxyCodeLine{93 \textcolor{comment}{/* when updating this table, also need to update messages in xbssv.cpp */}}
\DoxyCodeLine{94 }
-\DoxyCodeLine{95 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{96 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_RETCODES\_H\_\_ */}\textcolor{preprocessor}{}}
-\DoxyCodeLine{97 }
+\DoxyCodeLine{95 }
+\DoxyCodeLine{96 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{97 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_RETCODES\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{98 }
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbselect_8cpp.tex b/docs/doxygen/latex/xbselect_8cpp.tex
index 921de45..220f74f 100644
--- a/docs/doxygen/latex/xbselect_8cpp.tex
+++ b/docs/doxygen/latex/xbselect_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbselect_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbselect.cpp File Reference}
-\label{xbselect_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbselect.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbselect.cpp}}
+\hypertarget{xbselect_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbselect.cpp File Reference}
+\label{xbselect_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbselect.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbselect.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbset_8cpp.tex b/docs/doxygen/latex/xbset_8cpp.tex
index ea5e5a3..173e7aa 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.1.0/src/sql/xbset.cpp File Reference}
-\label{xbset_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbset.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbset.cpp}}
+\hypertarget{xbset_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbset.cpp File Reference}
+\label{xbset_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbset.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbset.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbsql_8cpp.tex b/docs/doxygen/latex/xbsql_8cpp.tex
index e6c9503..7838282 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.1.0/src/sql/xbsql.cpp File Reference}
-\label{xbsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbsql.cpp}}
+\hypertarget{xbsql_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbsql.cpp File Reference}
+\label{xbsql_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbsql.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbsql.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbsql_8h.tex b/docs/doxygen/latex/xbsql_8h.tex
index c1b5903..aa01591 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.1.0/src/include/xbsql.h File Reference}
-\label{xbsql_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbsql.h}}
+\hypertarget{xbsql_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h File Reference}
+\label{xbsql_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h}}
diff --git a/docs/doxygen/latex/xbsql_8h_source.tex b/docs/doxygen/latex/xbsql_8h_source.tex
index f52325d..44b5335 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.1.0/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbsql.h}}
+\label{xbsql_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbsql.h}}
\mbox{\hyperlink{xbsql_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbsql.h}}
diff --git a/docs/doxygen/latex/xbssv_8cpp.tex b/docs/doxygen/latex/xbssv_8cpp.tex
index 01484f2..a9556e1 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.1.0/src/core/xbssv.cpp File Reference}
-\label{xbssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbssv.cpp}}
+\hypertarget{xbssv_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbssv.cpp File Reference}
+\label{xbssv_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbssv.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbssv.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbssv_8h.tex b/docs/doxygen/latex/xbssv_8h.tex
index ebb8ef1..d903266 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.1.0/src/include/xbssv.h File Reference}
-\label{xbssv_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbssv.h}}
+\hypertarget{xbssv_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h File Reference}
+\label{xbssv_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbssv_8h_source.tex b/docs/doxygen/latex/xbssv_8h_source.tex
index 0ffe764..df22666 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.1.0/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbssv.h}}
+\label{xbssv_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbssv.h}}
\mbox{\hyperlink{xbssv_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbssv.h}}
@@ -55,124 +55,133 @@
\DoxyCodeLine{64 \textcolor{keywordtype}{void} DisplayError ( xbInt16 ErrorCode ) \textcolor{keyword}{const};}
\DoxyCodeLine{65 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDefaultDateFormat () \textcolor{keyword}{const};}
\DoxyCodeLine{66 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetDataDirectory () \textcolor{keyword}{const};}
-\DoxyCodeLine{67 xbInt16 GetEndianType () \textcolor{keyword}{const};}
+\DoxyCodeLine{67 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetTempDirectory () \textcolor{keyword}{const};}
\DoxyCodeLine{68 }
-\DoxyCodeLine{69 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *GetErrorMessage ( xbInt16 ErrorCode ) \textcolor{keyword}{const};}
-\DoxyCodeLine{70 \textcolor{keywordtype}{void} SetDataDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDataDirectory );}
-\DoxyCodeLine{71 \textcolor{keywordtype}{void} SetDefaultDateFormat ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDefaultDateFormat );}
-\DoxyCodeLine{72 }
-\DoxyCodeLine{73 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} BitSet ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c, xbInt16 iBitNo ) \textcolor{keyword}{const};}
-\DoxyCodeLine{74 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
-\DoxyCodeLine{75 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
-\DoxyCodeLine{76 }
-\DoxyCodeLine{77 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoCommit () \textcolor{keyword}{const};}
-\DoxyCodeLine{78 \textcolor{keywordtype}{void} SetDefaultAutoCommit ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit );}
+\DoxyCodeLine{69 \textcolor{keywordtype}{void} GetHomeDir ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sHomeDirOut );}
+\DoxyCodeLine{70 }
+\DoxyCodeLine{71 }
+\DoxyCodeLine{72 xbInt16 GetEndianType () \textcolor{keyword}{const};}
+\DoxyCodeLine{73 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *GetErrorMessage ( xbInt16 ErrorCode ) \textcolor{keyword}{const};}
+\DoxyCodeLine{74 \textcolor{keywordtype}{char} GetPathSeparator () \textcolor{keyword}{const};}
+\DoxyCodeLine{75 }
+\DoxyCodeLine{76 \textcolor{keywordtype}{void} SetDataDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDataDirectory );}
+\DoxyCodeLine{77 \textcolor{keywordtype}{void} SetDefaultDateFormat ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDefaultDateFormat );}
+\DoxyCodeLine{78 \textcolor{keywordtype}{void} SetTempDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTempDirectory );}
\DoxyCodeLine{79 }
-\DoxyCodeLine{80 \textcolor{keywordtype}{void} GetHomeDir ( \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sHomeDirOut );}
-\DoxyCodeLine{81 }
-\DoxyCodeLine{82 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetLogDirectory () \textcolor{keyword}{const};}
-\DoxyCodeLine{83 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetLogFileName () \textcolor{keyword}{const};}
-\DoxyCodeLine{84 \textcolor{keywordtype}{void} SetLogDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogDirectory );}
-\DoxyCodeLine{85 }
-\DoxyCodeLine{86 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMultiUser () \textcolor{keyword}{const};}
-\DoxyCodeLine{87 \textcolor{keywordtype}{void} SetMultiUser ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser );}
-\DoxyCodeLine{88 }
-\DoxyCodeLine{89 \textcolor{preprocessor}{ \#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
-\DoxyCodeLine{90 xbInt16 GetUniqueKeyOpt () \textcolor{keyword}{const};}
-\DoxyCodeLine{91 xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );}
-\DoxyCodeLine{92 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
+\DoxyCodeLine{80 }
+\DoxyCodeLine{81 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} BitSet ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c, xbInt16 iBitNo ) \textcolor{keyword}{const};}
+\DoxyCodeLine{82 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
+\DoxyCodeLine{83 \textcolor{keywordtype}{void} BitDump ( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
+\DoxyCodeLine{84 }
+\DoxyCodeLine{85 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoCommit () \textcolor{keyword}{const};}
+\DoxyCodeLine{86 \textcolor{keywordtype}{void} SetDefaultAutoCommit ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit );}
+\DoxyCodeLine{87 }
+\DoxyCodeLine{88 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetLogDirectory () \textcolor{keyword}{const};}
+\DoxyCodeLine{89 \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& GetLogFileName () \textcolor{keyword}{const};}
+\DoxyCodeLine{90 \textcolor{keywordtype}{void} SetLogDirectory ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogDirectory );}
+\DoxyCodeLine{91 \textcolor{keywordtype}{void} SetLogFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogFileName );}
+\DoxyCodeLine{92 }
\DoxyCodeLine{93 }
-\DoxyCodeLine{94 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{95 xbInt16 GetDefaultLockRetries () \textcolor{keyword}{const};}
-\DoxyCodeLine{96 \textcolor{keywordtype}{void} SetDefaultLockRetries ( xbInt16 iRetryCount );}
-\DoxyCodeLine{97 xbInt32 GetDefaultLockWait () \textcolor{keyword}{const};}
-\DoxyCodeLine{98 \textcolor{keywordtype}{void} SetDefaultLockWait ( xbInt32 lRetryWait );}
-\DoxyCodeLine{99 xbInt16 GetDefaultLockFlavor () \textcolor{keyword}{const};}
-\DoxyCodeLine{100 \textcolor{keywordtype}{void} SetDefaultLockFlavor ( xbInt16 iLockFlavor );}
-\DoxyCodeLine{101 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoLock () \textcolor{keyword}{const};}
-\DoxyCodeLine{102 \textcolor{keywordtype}{void} SetDefaultAutoLock ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAutoLock );}
-\DoxyCodeLine{103 \textcolor{keywordtype}{void} EnableDefaultAutoLock ();}
-\DoxyCodeLine{104 \textcolor{keywordtype}{void} DisableDefaultAutoLock ();}
-\DoxyCodeLine{105 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{106 }
-\DoxyCodeLine{107 \textcolor{preprocessor}{ \#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{108 xbInt16 GetCreateMdxBlockSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{109 xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}
-\DoxyCodeLine{110 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{111 }
-\DoxyCodeLine{112 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{113 xbUInt32 GetDefaultBlockReadSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{114 \textcolor{keywordtype}{void} SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );}
-\DoxyCodeLine{115 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{116 }
-\DoxyCodeLine{117 }
-\DoxyCodeLine{118 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{94 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetMultiUser () \textcolor{keyword}{const};}
+\DoxyCodeLine{95 \textcolor{keywordtype}{void} SetMultiUser ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser );}
+\DoxyCodeLine{96 }
+\DoxyCodeLine{97 \textcolor{preprocessor}{ \#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
+\DoxyCodeLine{98 xbInt16 GetUniqueKeyOpt () \textcolor{keyword}{const};}
+\DoxyCodeLine{99 xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );}
+\DoxyCodeLine{100 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
+\DoxyCodeLine{101 }
+\DoxyCodeLine{102 \textcolor{preprocessor}{ \#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{103 xbInt16 GetDefaultLockRetries () \textcolor{keyword}{const};}
+\DoxyCodeLine{104 \textcolor{keywordtype}{void} SetDefaultLockRetries ( xbInt16 iRetryCount );}
+\DoxyCodeLine{105 xbInt32 GetDefaultLockWait () \textcolor{keyword}{const};}
+\DoxyCodeLine{106 \textcolor{keywordtype}{void} SetDefaultLockWait ( xbInt32 lRetryWait );}
+\DoxyCodeLine{107 xbInt16 GetDefaultLockFlavor () \textcolor{keyword}{const};}
+\DoxyCodeLine{108 \textcolor{keywordtype}{void} SetDefaultLockFlavor ( xbInt16 iLockFlavor );}
+\DoxyCodeLine{109 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetDefaultAutoLock () \textcolor{keyword}{const};}
+\DoxyCodeLine{110 \textcolor{keywordtype}{void} SetDefaultAutoLock ( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bAutoLock );}
+\DoxyCodeLine{111 \textcolor{keywordtype}{void} EnableDefaultAutoLock ();}
+\DoxyCodeLine{112 \textcolor{keywordtype}{void} DisableDefaultAutoLock ();}
+\DoxyCodeLine{113 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{115 \textcolor{preprocessor}{ \#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{116 xbInt16 GetCreateMdxBlockSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{117 xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );}
+\DoxyCodeLine{118 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
\DoxyCodeLine{119 }
-\DoxyCodeLine{120 \textcolor{keywordtype}{void} SetEndianType ();}
-\DoxyCodeLine{121 }
-\DoxyCodeLine{122 \textcolor{keyword}{static} xbInt16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{iEndianType}}; \textcolor{comment}{// B=Big Endian L=Little Endian}}
-\DoxyCodeLine{123 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{sNullString}}; \textcolor{comment}{// Null String}}
+\DoxyCodeLine{120 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{121 xbUInt32 GetDefaultBlockReadSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{122 \textcolor{keywordtype}{void} SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );}
+\DoxyCodeLine{123 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
\DoxyCodeLine{124 }
\DoxyCodeLine{125 }
-\DoxyCodeLine{126 \textcolor{keyword}{private}:}
+\DoxyCodeLine{126 \textcolor{keyword}{protected}:}
\DoxyCodeLine{127 }
-\DoxyCodeLine{128 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultDateFormat;}
-\DoxyCodeLine{129 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDataDirectory; \textcolor{comment}{//Data file directory}}
-\DoxyCodeLine{130 }
-\DoxyCodeLine{131 \textcolor{preprocessor}{ \#ifdef XB\_LOGGING\_SUPPORT}}
-\DoxyCodeLine{132 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sLogDirectory; \textcolor{comment}{//Default location to store log files}}
-\DoxyCodeLine{133 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sLogFileName; \textcolor{comment}{//Default LogFileName}}
-\DoxyCodeLine{134 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{128 \textcolor{keywordtype}{void} SetEndianType ();}
+\DoxyCodeLine{129 }
+\DoxyCodeLine{130 \textcolor{keyword}{static} xbInt16 \mbox{\hyperlink{classxb_1_1xbSsv_a5849e813f5e8e1cd180f0366637adbf3}{iEndianType}}; \textcolor{comment}{// B=Big Endian L=Little Endian}}
+\DoxyCodeLine{131 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \mbox{\hyperlink{classxb_1_1xbSsv_a9dec3164c3b264882df634915ecf21da}{sNullString}}; \textcolor{comment}{// Null String}}
+\DoxyCodeLine{132 }
+\DoxyCodeLine{133 }
+\DoxyCodeLine{134 \textcolor{keyword}{private}:}
\DoxyCodeLine{135 }
-\DoxyCodeLine{136 \textcolor{keyword}{static} xbInt16 iDefaultFileVersion; \textcolor{comment}{// 3 = DBase 3}}
-\DoxyCodeLine{137 \textcolor{comment}{// 4 = DBase 4}}
-\DoxyCodeLine{138 \textcolor{comment}{// default version used in CreateTable command}}
-\DoxyCodeLine{139 \textcolor{comment}{// can be over ridden at the Xbase level, or table level}}
-\DoxyCodeLine{140 \textcolor{comment}{// Different versions can be open simultaneously}}
-\DoxyCodeLine{141 }
-\DoxyCodeLine{142 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit; \textcolor{comment}{// Default dbf auto commit switch}}
-\DoxyCodeLine{143 }
-\DoxyCodeLine{144 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser; \textcolor{comment}{// True if multi user mode is turned on}}
-\DoxyCodeLine{145 \textcolor{comment}{// Turn this off for better performance in single user mode}}
-\DoxyCodeLine{146 \textcolor{comment}{// This needs to be turned on or off before any data tables are opened}}
-\DoxyCodeLine{147 \textcolor{comment}{// turning this on after tables are opened, can result in out of date}}
-\DoxyCodeLine{148 \textcolor{comment}{// file buffers if multiple users are sharing the files}}
-\DoxyCodeLine{149 }
-\DoxyCodeLine{150 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
-\DoxyCodeLine{151 \textcolor{keyword}{static} xbInt32 lDefaultLockWait; \textcolor{comment}{// Number of milliseconds between lock retries}}
-\DoxyCodeLine{152 \textcolor{keyword}{static} xbInt16 iDefaultLockRetries; \textcolor{comment}{// Number of times to retry a lock before conceding}}
-\DoxyCodeLine{153 \textcolor{keyword}{static} xbInt16 bDefaultAutoLock; \textcolor{comment}{// Autolocking enabled?}}
-\DoxyCodeLine{154 \textcolor{keyword}{static} xbInt16 iDefaultLockFlavor; \textcolor{comment}{// 1 = DBase}}
-\DoxyCodeLine{155 \textcolor{comment}{// 2 = Clipper -\/ not developed yet}}
-\DoxyCodeLine{156 \textcolor{comment}{// 3 = FoxPro -\/ not developed yet}}
-\DoxyCodeLine{157 \textcolor{comment}{// 9 = Xbase64 -\/ not developed yet}}
-\DoxyCodeLine{158 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{159 }
-\DoxyCodeLine{160 }
-\DoxyCodeLine{161 \textcolor{preprocessor}{\#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
-\DoxyCodeLine{162 }
-\DoxyCodeLine{163 \textcolor{keyword}{static} xbInt16 iUniqueKeyOpt;}
-\DoxyCodeLine{164 }
-\DoxyCodeLine{165 \textcolor{comment}{// is one of:}}
-\DoxyCodeLine{166 \textcolor{comment}{// XB\_HALT\_ON\_DUPKEY}}
-\DoxyCodeLine{167 \textcolor{comment}{// XB\_EMULATE\_DBASE}}
+\DoxyCodeLine{136 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDefaultDateFormat;}
+\DoxyCodeLine{137 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sDataDirectory; \textcolor{comment}{//Data file directory}}
+\DoxyCodeLine{138 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sTempDirectory; \textcolor{comment}{//Temp file directory}}
+\DoxyCodeLine{139 }
+\DoxyCodeLine{140 \textcolor{preprocessor}{ \#ifdef XB\_LOGGING\_SUPPORT}}
+\DoxyCodeLine{141 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sLogDirectory; \textcolor{comment}{//Default location to store log files}}
+\DoxyCodeLine{142 \textcolor{keyword}{static} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} sLogFileName; \textcolor{comment}{//Default LogFileName}}
+\DoxyCodeLine{143 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{144 }
+\DoxyCodeLine{145 \textcolor{keyword}{static} xbInt16 iDefaultFileVersion; \textcolor{comment}{// 3 = DBase 3}}
+\DoxyCodeLine{146 \textcolor{comment}{// 4 = DBase 4}}
+\DoxyCodeLine{147 \textcolor{comment}{// default version used in CreateTable command}}
+\DoxyCodeLine{148 \textcolor{comment}{// can be over ridden at the Xbase level, or table level}}
+\DoxyCodeLine{149 \textcolor{comment}{// Different versions can be open simultaneously}}
+\DoxyCodeLine{150 }
+\DoxyCodeLine{151 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bDefaultAutoCommit; \textcolor{comment}{// Default dbf auto commit switch}}
+\DoxyCodeLine{152 }
+\DoxyCodeLine{153 \textcolor{keyword}{static} \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bMultiUser; \textcolor{comment}{// True if multi user mode is turned on}}
+\DoxyCodeLine{154 \textcolor{comment}{// Turn this off for better performance in single user mode}}
+\DoxyCodeLine{155 \textcolor{comment}{// This needs to be turned on or off before any data tables are opened}}
+\DoxyCodeLine{156 \textcolor{comment}{// turning this on after tables are opened, can result in out of date}}
+\DoxyCodeLine{157 \textcolor{comment}{// file buffers if multiple users are sharing the files}}
+\DoxyCodeLine{158 }
+\DoxyCodeLine{159 \textcolor{preprocessor}{\#ifdef XB\_LOCKING\_SUPPORT}}
+\DoxyCodeLine{160 \textcolor{keyword}{static} xbInt32 lDefaultLockWait; \textcolor{comment}{// Number of milliseconds between lock retries}}
+\DoxyCodeLine{161 \textcolor{keyword}{static} xbInt16 iDefaultLockRetries; \textcolor{comment}{// Number of times to retry a lock before conceding}}
+\DoxyCodeLine{162 \textcolor{keyword}{static} xbInt16 bDefaultAutoLock; \textcolor{comment}{// Autolocking enabled?}}
+\DoxyCodeLine{163 \textcolor{keyword}{static} xbInt16 iDefaultLockFlavor; \textcolor{comment}{// 1 = DBase}}
+\DoxyCodeLine{164 \textcolor{comment}{// 2 = Clipper -\/ not developed yet}}
+\DoxyCodeLine{165 \textcolor{comment}{// 3 = FoxPro -\/ not developed yet}}
+\DoxyCodeLine{166 \textcolor{comment}{// 9 = Xbase64 -\/ not developed yet}}
+\DoxyCodeLine{167 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{168 }
-\DoxyCodeLine{169 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{170 }
+\DoxyCodeLine{169 }
+\DoxyCodeLine{170 \textcolor{preprocessor}{\#if defined (XB\_NDX\_SUPPORT) || defined (XB\_MDX\_SUPPORT)}}
\DoxyCodeLine{171 }
-\DoxyCodeLine{172 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{173 \textcolor{keyword}{static} xbInt16 iCreateMdxBlockSize; \textcolor{comment}{// System level Mdx Block Size}}
-\DoxyCodeLine{174 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
-\DoxyCodeLine{175 }
-\DoxyCodeLine{176 }
-\DoxyCodeLine{177 \textcolor{preprocessor}{\#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{178 \textcolor{keyword}{static} xbUInt32 ulDefaultBlockReadSize;}
-\DoxyCodeLine{179 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{172 \textcolor{keyword}{static} xbInt16 iUniqueKeyOpt;}
+\DoxyCodeLine{173 }
+\DoxyCodeLine{174 \textcolor{comment}{// is one of:}}
+\DoxyCodeLine{175 \textcolor{comment}{// XB\_HALT\_ON\_DUPKEY}}
+\DoxyCodeLine{176 \textcolor{comment}{// XB\_EMULATE\_DBASE}}
+\DoxyCodeLine{177 }
+\DoxyCodeLine{178 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{179 }
\DoxyCodeLine{180 }
-\DoxyCodeLine{181 }
-\DoxyCodeLine{182 \};}
-\DoxyCodeLine{183 }
-\DoxyCodeLine{184 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{185 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSSV\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{181 \textcolor{preprocessor}{\#ifdef XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{182 \textcolor{keyword}{static} xbInt16 iCreateMdxBlockSize; \textcolor{comment}{// System level Mdx Block Size}}
+\DoxyCodeLine{183 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_MDX\_SUPPORT}}
+\DoxyCodeLine{184 }
+\DoxyCodeLine{185 }
+\DoxyCodeLine{186 \textcolor{preprocessor}{\#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{187 \textcolor{keyword}{static} xbUInt32 ulDefaultBlockReadSize;}
+\DoxyCodeLine{188 \textcolor{preprocessor}{\#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{189 }
+\DoxyCodeLine{190 }
+\DoxyCodeLine{191 \};}
+\DoxyCodeLine{192 }
+\DoxyCodeLine{193 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{194 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_XBSSV\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbstmt_8cpp.tex b/docs/doxygen/latex/xbstmt_8cpp.tex
index b0c7d3b..2063cf2 100644
--- a/docs/doxygen/latex/xbstmt_8cpp.tex
+++ b/docs/doxygen/latex/xbstmt_8cpp.tex
@@ -1,3 +1,3 @@
-\hypertarget{xbstmt_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.0/src/sql/xbstmt.cpp File Reference}
-\label{xbstmt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbstmt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/sql/xbstmt.cpp}}
+\hypertarget{xbstmt_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/sql/xbstmt.cpp File Reference}
+\label{xbstmt_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbstmt.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/sql/xbstmt.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbstring_8cpp.tex b/docs/doxygen/latex/xbstring_8cpp.tex
index b789259..9523d9f 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.1.0/src/core/xbstring.cpp File Reference}
-\label{xbstring_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbstring.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbstring.cpp}}
+\hypertarget{xbstring_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbstring.cpp File Reference}
+\label{xbstring_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbstring.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbstring.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbstring_8h.tex b/docs/doxygen/latex/xbstring_8h.tex
index 7736618..f941482 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.1.0/src/include/xbstring.h File Reference}
-\label{xbstring_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbstring.h}}
+\hypertarget{xbstring_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h File Reference}
+\label{xbstring_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h}}
{\ttfamily \#include $<$stdlib.\+h$>$}\newline
{\ttfamily \#include $<$iostream$>$}\newline
\doxysubsection*{Data Structures}
diff --git a/docs/doxygen/latex/xbstring_8h_source.tex b/docs/doxygen/latex/xbstring_8h_source.tex
index fb0f08e..522d37f 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.1.0/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbstring.h}}
+\label{xbstring_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbstring.h}}
\mbox{\hyperlink{xbstring_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbstring.h}}
@@ -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 lCopyLen );}
-\DoxyCodeLine{99 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 lCopyLen );}
+\DoxyCodeLine{98 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 ulStartPos, xbUInt32 lCopyLen );}
+\DoxyCodeLine{99 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Assign(\textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, xbUInt32 ulStartPos );}
\DoxyCodeLine{100 }
\DoxyCodeLine{101 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} Copy() \textcolor{keyword}{const};}
\DoxyCodeLine{102 xbUInt32 CountChar( \textcolor{keywordtype}{char} c ) \textcolor{keyword}{const};}
@@ -96,77 +96,79 @@
\DoxyCodeLine{112 \textcolor{keywordtype}{void} DumpHex( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *title ) \textcolor{keyword}{const};}
\DoxyCodeLine{113 \textcolor{preprocessor}{ \#endif}}
\DoxyCodeLine{114 }
-\DoxyCodeLine{115 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ExtractElement(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *src, \textcolor{keywordtype}{char} delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );}
-\DoxyCodeLine{116 \textcolor{keywordtype}{char} GetCharacter( xbUInt32 lPos ) \textcolor{keyword}{const};}
-\DoxyCodeLine{117 xbUInt32 GetLastPos(\textcolor{keywordtype}{char} c) \textcolor{keyword}{const};}
-\DoxyCodeLine{118 xbUInt32 GetLastPos(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s) \textcolor{keyword}{const};}
-\DoxyCodeLine{119 \textcolor{keywordtype}{char} GetPathSeparator() \textcolor{keyword}{const};}
-\DoxyCodeLine{120 xbUInt32 GetSize() \textcolor{keyword}{const};}
-\DoxyCodeLine{121 }
-\DoxyCodeLine{122 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} HasAlphaChars() \textcolor{keyword}{const};}
-\DoxyCodeLine{123 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsEmpty() \textcolor{keyword}{const};}
-\DoxyCodeLine{124 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNull() \textcolor{keyword}{const};}
-\DoxyCodeLine{125 }
-\DoxyCodeLine{126 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Left( xbUInt32 ulLen );}
-\DoxyCodeLine{127 xbUInt32 Len() \textcolor{keyword}{const}; \textcolor{comment}{// returns the length of the string}}
-\DoxyCodeLine{128 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Ltrim();}
-\DoxyCodeLine{129 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Ltrunc( xbUInt32 ulCnt );}
-\DoxyCodeLine{130 }
-\DoxyCodeLine{131 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Mid(xbUInt32 ulPos, xbUInt32 lLen );}
-\DoxyCodeLine{132 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PadLeft( \textcolor{keywordtype}{char} c, xbUInt32 ulLen );}
-\DoxyCodeLine{133 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PadRight( \textcolor{keywordtype}{char} c, xbUInt32 ulLen );}
-\DoxyCodeLine{134 }
-\DoxyCodeLine{135 xbUInt32 Pos(\textcolor{keywordtype}{char} c, xbUInt32 ulStartPos ) \textcolor{keyword}{const};}
-\DoxyCodeLine{136 xbUInt32 Pos(\textcolor{keywordtype}{char} c) \textcolor{keyword}{const};}
-\DoxyCodeLine{137 xbUInt32 Pos(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s) \textcolor{keyword}{const};}
-\DoxyCodeLine{138 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PutAt(xbUInt32 ulPos, \textcolor{keywordtype}{char} c);}
-\DoxyCodeLine{139 }
-\DoxyCodeLine{140 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Remove( xbUInt32 ulPos, xbUInt32 ulN );}
-\DoxyCodeLine{141 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Replace( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sReplace, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sReplaceWith, xbInt16 iOpt = 0 );}
-\DoxyCodeLine{142 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Resize( xbUInt32 lSize );}
-\DoxyCodeLine{143 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Rtrim();}
-\DoxyCodeLine{144 }
-\DoxyCodeLine{145 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s );}
-\DoxyCodeLine{146 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
-\DoxyCodeLine{147 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 ulSize );}
-\DoxyCodeLine{148 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SetNum( xbInt32 lNum );}
-\DoxyCodeLine{149 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Sprintf(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *format, ...);}
-\DoxyCodeLine{150 }
-\DoxyCodeLine{151 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
-\DoxyCodeLine{152 \textcolor{keywordtype}{char} *strncpy( \textcolor{keywordtype}{char} * cDest, xbUInt32 n ) \textcolor{keyword}{const};}
-\DoxyCodeLine{153 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SwapChars( \textcolor{keywordtype}{char} from, \textcolor{keywordtype}{char} to );}
-\DoxyCodeLine{154 }
-\DoxyCodeLine{155 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToLowerCase();}
-\DoxyCodeLine{156 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToUpperCase();}
-\DoxyCodeLine{157 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Trim();}
-\DoxyCodeLine{158 }
-\DoxyCodeLine{159 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidLogicalValue() \textcolor{keyword}{const};}
-\DoxyCodeLine{160 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidNumericValue() \textcolor{keyword}{const};}
-\DoxyCodeLine{161 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapChar( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{162 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapLeadingChar( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{163 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapTrailingChar( \textcolor{keywordtype}{char} c );}
-\DoxyCodeLine{164 }
-\DoxyCodeLine{165 \textcolor{keyword}{friend} std::ostream\& \mbox{\hyperlink{namespacexb_ad27f348219e895c44f74addba8e1889a}{operator<< }}( std::ostream\& os, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& s );}
+\DoxyCodeLine{115 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ExtractElement(\mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \textcolor{keywordtype}{char} delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );}
+\DoxyCodeLine{116 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ExtractElement(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *src, \textcolor{keywordtype}{char} delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );}
+\DoxyCodeLine{117 }
+\DoxyCodeLine{118 \textcolor{keywordtype}{char} GetCharacter( xbUInt32 lPos ) \textcolor{keyword}{const};}
+\DoxyCodeLine{119 xbUInt32 GetLastPos(\textcolor{keywordtype}{char} c) \textcolor{keyword}{const};}
+\DoxyCodeLine{120 xbUInt32 GetLastPos(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s) \textcolor{keyword}{const};}
+\DoxyCodeLine{121 \textcolor{keywordtype}{char} GetPathSeparator() \textcolor{keyword}{const};}
+\DoxyCodeLine{122 xbUInt32 GetSize() \textcolor{keyword}{const};}
+\DoxyCodeLine{123 }
+\DoxyCodeLine{124 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} HasAlphaChars() \textcolor{keyword}{const};}
+\DoxyCodeLine{125 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsEmpty() \textcolor{keyword}{const};}
+\DoxyCodeLine{126 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} IsNull() \textcolor{keyword}{const};}
+\DoxyCodeLine{127 }
+\DoxyCodeLine{128 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Left( xbUInt32 ulLen );}
+\DoxyCodeLine{129 xbUInt32 Len() \textcolor{keyword}{const}; \textcolor{comment}{// returns the length of the string}}
+\DoxyCodeLine{130 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Ltrim();}
+\DoxyCodeLine{131 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Ltrunc( xbUInt32 ulCnt );}
+\DoxyCodeLine{132 }
+\DoxyCodeLine{133 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Mid(xbUInt32 ulPos, xbUInt32 lLen );}
+\DoxyCodeLine{134 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PadLeft( \textcolor{keywordtype}{char} c, xbUInt32 ulLen );}
+\DoxyCodeLine{135 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PadRight( \textcolor{keywordtype}{char} c, xbUInt32 ulLen );}
+\DoxyCodeLine{136 }
+\DoxyCodeLine{137 xbUInt32 Pos(\textcolor{keywordtype}{char} c, xbUInt32 ulStartPos ) \textcolor{keyword}{const};}
+\DoxyCodeLine{138 xbUInt32 Pos(\textcolor{keywordtype}{char} c) \textcolor{keyword}{const};}
+\DoxyCodeLine{139 xbUInt32 Pos(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s) \textcolor{keyword}{const};}
+\DoxyCodeLine{140 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&PutAt(xbUInt32 ulPos, \textcolor{keywordtype}{char} c);}
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Remove( xbUInt32 ulPos, xbUInt32 ulN );}
+\DoxyCodeLine{143 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Replace( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sReplace, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sReplaceWith, xbInt16 iOpt = 0 );}
+\DoxyCodeLine{144 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Resize( xbUInt32 lSize );}
+\DoxyCodeLine{145 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Rtrim();}
+\DoxyCodeLine{146 }
+\DoxyCodeLine{147 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s );}
+\DoxyCodeLine{148 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s );}
+\DoxyCodeLine{149 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Set( \textcolor{keyword}{const} \textcolor{keywordtype}{char} *s, xbUInt32 ulSize );}
+\DoxyCodeLine{150 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SetNum( xbInt32 lNum );}
+\DoxyCodeLine{151 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Sprintf(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *format, ...);}
+\DoxyCodeLine{152 }
+\DoxyCodeLine{153 \textcolor{keyword}{const} \textcolor{keywordtype}{char} *Str() \textcolor{keyword}{const};}
+\DoxyCodeLine{154 \textcolor{keywordtype}{char} *strncpy( \textcolor{keywordtype}{char} * cDest, xbUInt32 n ) \textcolor{keyword}{const};}
+\DoxyCodeLine{155 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&SwapChars( \textcolor{keywordtype}{char} from, \textcolor{keywordtype}{char} to );}
+\DoxyCodeLine{156 }
+\DoxyCodeLine{157 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToLowerCase();}
+\DoxyCodeLine{158 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ToUpperCase();}
+\DoxyCodeLine{159 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&Trim();}
+\DoxyCodeLine{160 }
+\DoxyCodeLine{161 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidLogicalValue() \textcolor{keyword}{const};}
+\DoxyCodeLine{162 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} ValidNumericValue() \textcolor{keyword}{const};}
+\DoxyCodeLine{163 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapChar( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{164 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapLeadingChar( \textcolor{keywordtype}{char} c );}
+\DoxyCodeLine{165 \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&ZapTrailingChar( \textcolor{keywordtype}{char} c );}
\DoxyCodeLine{166 }
-\DoxyCodeLine{167 \textcolor{keyword}{private}:}
+\DoxyCodeLine{167 \textcolor{keyword}{friend} std::ostream\& \mbox{\hyperlink{namespacexb_ad27f348219e895c44f74addba8e1889a}{operator<< }}( std::ostream\& os, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}}\& s );}
\DoxyCodeLine{168 }
-\DoxyCodeLine{169 \textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * NullString;}
-\DoxyCodeLine{170 \textcolor{keyword}{static} \textcolor{keywordtype}{char} cJunkBuf;}
-\DoxyCodeLine{171 }
-\DoxyCodeLine{172 \textcolor{keywordtype}{char} *data; \textcolor{comment}{// pointer to actual string data}}
-\DoxyCodeLine{173 xbUInt32 size; \textcolor{comment}{// size of string plus null terminating byte}}
-\DoxyCodeLine{174 }
-\DoxyCodeLine{175 \textcolor{keywordtype}{void} ctor(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
-\DoxyCodeLine{176 \textcolor{comment}{// xbUInt32 CalcSprintfBufSize(const char *format, ...);}}
-\DoxyCodeLine{177 }
-\DoxyCodeLine{178 \textcolor{comment}{// char * xb\_realloc( char *pIn, xbUInt32 iLen );}}
+\DoxyCodeLine{169 \textcolor{keyword}{private}:}
+\DoxyCodeLine{170 }
+\DoxyCodeLine{171 \textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} * NullString;}
+\DoxyCodeLine{172 \textcolor{keyword}{static} \textcolor{keywordtype}{char} cJunkBuf;}
+\DoxyCodeLine{173 }
+\DoxyCodeLine{174 \textcolor{keywordtype}{char} *data; \textcolor{comment}{// pointer to actual string data}}
+\DoxyCodeLine{175 xbUInt32 size; \textcolor{comment}{// size of string plus null terminating byte}}
+\DoxyCodeLine{176 }
+\DoxyCodeLine{177 \textcolor{keywordtype}{void} ctor(\textcolor{keyword}{const} \textcolor{keywordtype}{char} *s);}
+\DoxyCodeLine{178 \textcolor{comment}{// xbUInt32 CalcSprintfBufSize(const char *format, ...);}}
\DoxyCodeLine{179 }
-\DoxyCodeLine{180 \textcolor{comment}{// next routine could result in buffer over runs if used with improperly sized buffers}}
-\DoxyCodeLine{181 \textcolor{keywordtype}{char} * xb\_strcpy ( \textcolor{keywordtype}{char} *target, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *source);}
-\DoxyCodeLine{182 }
-\DoxyCodeLine{183 \};}
+\DoxyCodeLine{180 \textcolor{comment}{// char * xb\_realloc( char *pIn, xbUInt32 iLen );}}
+\DoxyCodeLine{181 }
+\DoxyCodeLine{182 \textcolor{comment}{// next routine could result in buffer over runs if used with improperly sized buffers}}
+\DoxyCodeLine{183 \textcolor{keywordtype}{char} * xb\_strcpy ( \textcolor{keywordtype}{char} *target, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *source);}
\DoxyCodeLine{184 }
-\DoxyCodeLine{185 \} \textcolor{comment}{/* namespace */}}
-\DoxyCodeLine{186 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBSTRING\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{185 \};}
+\DoxyCodeLine{186 }
+\DoxyCodeLine{187 \} \textcolor{comment}{/* namespace */}}
+\DoxyCodeLine{188 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XBSTRING\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/doxygen/latex/xbtag_8cpp.tex b/docs/doxygen/latex/xbtag_8cpp.tex
index 562d678..2b469eb 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.1.0/src/core/xbtag.cpp File Reference}
-\label{xbtag_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbtag.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbtag.cpp}}
+\hypertarget{xbtag_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbtag.cpp File Reference}
+\label{xbtag_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbtag.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbtag.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbtag_8h.tex b/docs/doxygen/latex/xbtag_8h.tex
index be28a4a..f625c69 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.1.0/src/include/xbtag.h File Reference}
-\label{xbtag_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtag.h}}
+\hypertarget{xbtag_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h File Reference}
+\label{xbtag_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h}}
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbtag_8h_source.tex b/docs/doxygen/latex/xbtag_8h_source.tex
index f15f79d..48fa14d 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.1.0/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtag.h}}
+\label{xbtag_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtag.h}}
\mbox{\hyperlink{xbtag_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbtag.h}}
diff --git a/docs/doxygen/latex/xbtblmgr_8cpp.tex b/docs/doxygen/latex/xbtblmgr_8cpp.tex
index 6c3f849..0b658f5 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.1.0/src/core/xbtblmgr.cpp File Reference}
-\label{xbtblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbtblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbtblmgr.cpp}}
+\hypertarget{xbtblmgr_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbtblmgr.cpp File Reference}
+\label{xbtblmgr_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbtblmgr.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbtblmgr.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbtblmgr_8h.tex b/docs/doxygen/latex/xbtblmgr_8h.tex
index b53c99a..4c0555b 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.1.0/src/include/xbtblmgr.h File Reference}
-\label{xbtblmgr_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtblmgr.h}}
+\hypertarget{xbtblmgr_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h File Reference}
+\label{xbtblmgr_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbtblmgr_8h_source.tex b/docs/doxygen/latex/xbtblmgr_8h_source.tex
index e735784..7a51811 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.1.0/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtblmgr.h}}
+\label{xbtblmgr_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtblmgr.h}}
\mbox{\hyperlink{xbtblmgr_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbtblmgr.h}}
diff --git a/docs/doxygen/latex/xbtypes_8h.tex b/docs/doxygen/latex/xbtypes_8h.tex
index a198f39..7317374 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.1.0/src/include/xbtypes.h File Reference}
-\label{xbtypes_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtypes.h}}
+\hypertarget{xbtypes_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h File Reference}
+\label{xbtypes_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h}}
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbtypes_8h_source.tex b/docs/doxygen/latex/xbtypes_8h_source.tex
index c6e7a1d..cf28e55 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.1.0/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbtypes.h}}
+\label{xbtypes_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbtypes.h}}
\mbox{\hyperlink{xbtypes_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbtypes.h}}
diff --git a/docs/doxygen/latex/xbuda_8cpp.tex b/docs/doxygen/latex/xbuda_8cpp.tex
index 63b3515..ff2ea98 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.1.0/src/core/xbuda.cpp File Reference}
-\label{xbuda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbuda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbuda.cpp}}
+\hypertarget{xbuda_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbuda.cpp File Reference}
+\label{xbuda_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbuda.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbuda.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
diff --git a/docs/doxygen/latex/xbuda_8h.tex b/docs/doxygen/latex/xbuda_8h.tex
index 19d5f8e..2f35030 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.1.0/src/include/xbuda.h File Reference}
-\label{xbuda_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbuda.h}}
+\hypertarget{xbuda_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h File Reference}
+\label{xbuda_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h}}
diff --git a/docs/doxygen/latex/xbuda_8h_source.tex b/docs/doxygen/latex/xbuda_8h_source.tex
index eb5a738..326797c 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.1.0/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbuda.h}}
+\label{xbuda_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbuda.h}}
\mbox{\hyperlink{xbuda_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbuda.h}}
diff --git a/docs/doxygen/latex/xbxbase_8cpp.tex b/docs/doxygen/latex/xbxbase_8cpp.tex
index 97797d5..8ad01f7 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.1.0/src/core/xbxbase.cpp File Reference}
-\label{xbxbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbxbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/core/xbxbase.cpp}}
+\hypertarget{xbxbase_8cpp}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/core/xbxbase.cpp File Reference}
+\label{xbxbase_8cpp}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbxbase.cpp@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/core/xbxbase.cpp}}
{\ttfamily \#include \char`\"{}xbase.\+h\char`\"{}}\newline
\doxysubsection*{Namespaces}
\begin{DoxyCompactItemize}
diff --git a/docs/doxygen/latex/xbxbase_8h.tex b/docs/doxygen/latex/xbxbase_8h.tex
index 12bb276..4a8de8f 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.1.0/src/include/xbxbase.h File Reference}
-\label{xbxbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbxbase.h}}
+\hypertarget{xbxbase_8h}{}\doxysection{/mnt/1\+Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h File Reference}
+\label{xbxbase_8h}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h}}
\doxysubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
diff --git a/docs/doxygen/latex/xbxbase_8h_source.tex b/docs/doxygen/latex/xbxbase_8h_source.tex
index 5b803b6..e208317 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.1.0/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.0/src/include/xbxbase.h}}
+\label{xbxbase_8h_source}\index{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h@{/mnt/1Tdata/xbase/xbase64-\/4.1.4/src/include/xbxbase.h}}
\mbox{\hyperlink{xbxbase_8h}{Go to the documentation of this file.}}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 \textcolor{comment}{/* xbxbase.h}}
@@ -126,107 +126,112 @@
\DoxyCodeLine{126 \mbox{\hyperlink{classxb_1_1xbXBase}{\string~xbXBase}}();}
\DoxyCodeLine{127 }
\DoxyCodeLine{128 xbInt16 CloseAllTables();}
-\DoxyCodeLine{129 \textcolor{keywordtype}{void} DisableMsgLogging();}
-\DoxyCodeLine{130 \textcolor{keywordtype}{void} EnableMsgLogging ();}
-\DoxyCodeLine{131 xbInt16 FlushLog();}
-\DoxyCodeLine{132 }
-\DoxyCodeLine{133 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetLogDirectory () \textcolor{keyword}{const};}
-\DoxyCodeLine{134 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetLogFileName () \textcolor{keyword}{const};}
-\DoxyCodeLine{135 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetLogFqFileName() \textcolor{keyword}{const};}
-\DoxyCodeLine{136 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetLogStatus () \textcolor{keyword}{const};}
-\DoxyCodeLine{137 }
-\DoxyCodeLine{138 xbInt16 \mbox{\hyperlink{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}{OpenHighestVersion}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \&dbf, \textcolor{keywordtype}{int} dummy );}
-\DoxyCodeLine{139 xbInt16 OpenHighestVersion( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} **dbf );}
-\DoxyCodeLine{140 }
-\DoxyCodeLine{141 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * Open( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, xbInt16 \&iRc );}
-\DoxyCodeLine{142 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * Open( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 \&iRc );}
-\DoxyCodeLine{143 \textcolor{keywordtype}{void} SetLogDirectory( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogFileDirectory );}
-\DoxyCodeLine{144 \textcolor{keywordtype}{void} SetLogFileName ( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogFileName );}
-\DoxyCodeLine{145 \textcolor{keywordtype}{void} SetLogSize ( \textcolor{keywordtype}{size\_t} lSize );}
-\DoxyCodeLine{146 xbInt16 WriteLogMessage( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogMessage, xbInt16 iOutputOpt = 0 );}
-\DoxyCodeLine{147 xbInt16 WriteLogBytes ( xbUInt32 lCnt, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p );}
-\DoxyCodeLine{148 }
-\DoxyCodeLine{149 \textcolor{keywordtype}{void} xbSleep ( xbInt32 lMillisecs );}
+\DoxyCodeLine{129 xbInt16 CreateFqn( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sDirIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sNameIn, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExtIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFqfnOut );}
+\DoxyCodeLine{130 \textcolor{keywordtype}{void} DisableMsgLogging();}
+\DoxyCodeLine{131 \textcolor{keywordtype}{void} EnableMsgLogging ();}
+\DoxyCodeLine{132 xbInt16 FlushLog();}
+\DoxyCodeLine{133 }
+\DoxyCodeLine{134 \textcolor{comment}{//const xbString \&GetLogDirectory () const;}}
+\DoxyCodeLine{135 \textcolor{comment}{//const xbString \&GetLogFileName () const;}}
+\DoxyCodeLine{136 \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&GetLogFqFileName() \textcolor{keyword}{const};}
+\DoxyCodeLine{137 \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} GetLogStatus () \textcolor{keyword}{const};}
+\DoxyCodeLine{138 }
+\DoxyCodeLine{139 xbInt16 \mbox{\hyperlink{classxb_1_1xbXBase_aa957eb502ecd076e5df89e7415cb094b}{OpenHighestVersion}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} \&dbf, \textcolor{keywordtype}{int} dummy );}
+\DoxyCodeLine{140 xbInt16 OpenHighestVersion( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} **dbf );}
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * Open( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, xbInt16 \&iRc );}
+\DoxyCodeLine{143 \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * Open( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTableName, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 \&iRc );}
+\DoxyCodeLine{144 }
+\DoxyCodeLine{145 \textcolor{comment}{// next three methods moved to xbssv for consistency}}
+\DoxyCodeLine{146 \textcolor{comment}{// void SetLogDirectory( const xbString \&sLogFileDirectory );}}
+\DoxyCodeLine{147 \textcolor{comment}{// void SetLogFileName ( const xbString \&sLogFileName );}}
+\DoxyCodeLine{148 \textcolor{keywordtype}{void} SetLogSize ( \textcolor{keywordtype}{size\_t} lSize );}
+\DoxyCodeLine{149 \textcolor{keywordtype}{size\_t} \mbox{\hyperlink{classxb_1_1xbXBase_aedb4c2aa2c90e4529915198a2305b355}{GetLogSize}} () \textcolor{keyword}{const};}
\DoxyCodeLine{150 }
-\DoxyCodeLine{151 xbInt16 GetCmdLineOpt ( xbInt32 lArgc, \textcolor{keywordtype}{char} **argv, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sOptRqst, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sParmOut );}
-\DoxyCodeLine{152 xbInt16 GetCmdLineOpt ( xbInt32 lArgc, \textcolor{keywordtype}{char} **argv, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOptRqst, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sParmOut );}
+\DoxyCodeLine{151 xbInt16 WriteLogMessage( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sLogMessage, xbInt16 iOutputOpt = 0 );}
+\DoxyCodeLine{152 xbInt16 WriteLogBytes ( xbUInt32 lCnt, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *p );}
\DoxyCodeLine{153 }
-\DoxyCodeLine{154 }
-\DoxyCodeLine{155 \textcolor{comment}{/* xbase functions */}}
-\DoxyCodeLine{156 \textcolor{preprocessor}{ \#ifdef XB\_FUNCTION\_SUPPORT}}
-\DoxyCodeLine{157 xbInt16 ABS( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{158 xbInt16 ALLTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{159 xbInt16 ASC( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dAscOut );}
-\DoxyCodeLine{160 xbInt16 AT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sSrchFor, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sBase, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dPos );}
-\DoxyCodeLine{161 xbInt16 CDOW( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutDow );}
-\DoxyCodeLine{162 xbInt16 CHR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dAsciCd, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{163 xbInt16 CMONTH( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutMonth );}
-\DoxyCodeLine{164 xbInt16 CTOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sInDate, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
-\DoxyCodeLine{165 xbInt16 DATE( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
-\DoxyCodeLine{166 xbInt16 DAY( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOutDay );}
-\DoxyCodeLine{167 xbInt16 DEL( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut, xbInt16 iRecBufSw = 0 );}
-\DoxyCodeLine{168 xbInt16 DELETED( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bOut, xbInt16 iRecBufSw = 0 );}
-\DoxyCodeLine{169 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{170 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
-\DoxyCodeLine{171 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dsOut );}
-\DoxyCodeLine{172 xbInt16 DOW( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&sInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dDowOut );}
-\DoxyCodeLine{173 xbInt16 DTOC( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutFmtDate );}
-\DoxyCodeLine{174 xbInt16 DTOS( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutFmtDate );}
-\DoxyCodeLine{175 xbInt16 EXP( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{176 xbInt16 IIF( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bResult, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTrueResult, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFalseResult, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sResult );}
-\DoxyCodeLine{177 xbInt16 INT( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{178 xbInt16 ISALPHA( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
-\DoxyCodeLine{179 xbInt16 ISLOWER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
-\DoxyCodeLine{180 xbInt16 ISUPPER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
-\DoxyCodeLine{181 xbInt16 LEFT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 lCharCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{182 xbInt16 LEN( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dLen );}
-\DoxyCodeLine{183 xbInt16 LOG( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{184 xbInt16 LOWER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{185 xbInt16 LTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sOut );}
-\DoxyCodeLine{186 xbInt16 MAX( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn1, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn2, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{187 xbInt16 MIN( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn1, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn2, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{188 xbInt16 MONTH( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dMonthOut );}
-\DoxyCodeLine{189 xbInt16 RECCOUNT( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dRecOut );}
-\DoxyCodeLine{190 xbInt16 RECNO( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dRecOut );}
-\DoxyCodeLine{191 xbInt16 REPLICATE( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 ulRepCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{192 xbInt16 RIGHT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 iCharCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{193 xbInt16 RTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{194 xbInt16 SPACE( xbInt32 lCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{195 xbInt16 SQRT( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dBase, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dSqrRt );}
-\DoxyCodeLine{196 xbInt16 STOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&sDateOut );}
-\DoxyCodeLine{197 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{198 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{199 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{200 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sPadChar, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{201 xbInt16 STRZERO( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{202 xbInt16 SUBSTR( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{203 xbInt16 TRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{204 xbInt16 UPPER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
-\DoxyCodeLine{205 xbInt16 VAL( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
-\DoxyCodeLine{206 xbInt16 YEAR( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOutYear );}
-\DoxyCodeLine{207 \textcolor{preprocessor}{ \#endif}}
-\DoxyCodeLine{208 }
-\DoxyCodeLine{209 \textcolor{keyword}{protected}:}
-\DoxyCodeLine{210 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBcd;}
-\DoxyCodeLine{211 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbExp;}
-\DoxyCodeLine{212 }
-\DoxyCodeLine{213 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{214 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBlockRead;}
-\DoxyCodeLine{215 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
-\DoxyCodeLine{216 }
+\DoxyCodeLine{154 \textcolor{keywordtype}{void} xbSleep ( xbInt32 lMillisecs );}
+\DoxyCodeLine{155 }
+\DoxyCodeLine{156 xbInt16 GetCmdLineOpt ( xbInt32 lArgc, \textcolor{keywordtype}{char} **argv, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *sOptRqst, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sParmOut );}
+\DoxyCodeLine{157 xbInt16 GetCmdLineOpt ( xbInt32 lArgc, \textcolor{keywordtype}{char} **argv, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOptRqst, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sParmOut );}
+\DoxyCodeLine{158 }
+\DoxyCodeLine{159 }
+\DoxyCodeLine{160 \textcolor{comment}{/* xbase functions */}}
+\DoxyCodeLine{161 \textcolor{preprocessor}{ \#ifdef XB\_FUNCTION\_SUPPORT}}
+\DoxyCodeLine{162 xbInt16 ABS( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{163 xbInt16 ALLTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{164 xbInt16 ASC( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dAscOut );}
+\DoxyCodeLine{165 xbInt16 AT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sSrchFor, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sBase, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dPos );}
+\DoxyCodeLine{166 xbInt16 CDOW( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutDow );}
+\DoxyCodeLine{167 xbInt16 CHR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dAsciCd, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{168 xbInt16 CMONTH( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutMonth );}
+\DoxyCodeLine{169 xbInt16 CTOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sInDate, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
+\DoxyCodeLine{170 xbInt16 DATE( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
+\DoxyCodeLine{171 xbInt16 DAY( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOutDay );}
+\DoxyCodeLine{172 xbInt16 DEL( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut, xbInt16 iRecBufSw = 0 );}
+\DoxyCodeLine{173 xbInt16 DELETED( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bOut, xbInt16 iRecBufSw = 0 );}
+\DoxyCodeLine{174 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{175 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dOutDate );}
+\DoxyCodeLine{176 xbInt16 DESCEND( \textcolor{keyword}{const} \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dsOut );}
+\DoxyCodeLine{177 xbInt16 DOW( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&sInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dDowOut );}
+\DoxyCodeLine{178 xbInt16 DTOC( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutFmtDate );}
+\DoxyCodeLine{179 xbInt16 DTOS( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOutFmtDate );}
+\DoxyCodeLine{180 xbInt16 EXP( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{181 xbInt16 IIF( \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} bResult, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sTrueResult, \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sFalseResult, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sResult );}
+\DoxyCodeLine{182 xbInt16 INT( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{183 xbInt16 ISALPHA( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
+\DoxyCodeLine{184 xbInt16 ISLOWER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
+\DoxyCodeLine{185 xbInt16 ISUPPER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&s, \mbox{\hyperlink{namespacexb_ab1a750481dd487f0d384aa1d200dff0f}{xbBool}} \&bResult );}
+\DoxyCodeLine{186 xbInt16 LEFT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 lCharCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{187 xbInt16 LEN( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dLen );}
+\DoxyCodeLine{188 xbInt16 LOG( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{189 xbInt16 LOWER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{190 xbInt16 LTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \& sOut );}
+\DoxyCodeLine{191 xbInt16 MAX( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn1, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn2, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{192 xbInt16 MIN( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn1, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn2, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{193 xbInt16 MONTH( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dMonthOut );}
+\DoxyCodeLine{194 xbInt16 RECCOUNT( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dRecOut );}
+\DoxyCodeLine{195 xbInt16 RECNO( \mbox{\hyperlink{classxb_1_1xbDbf}{xbDbf}} * d, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dRecOut );}
+\DoxyCodeLine{196 xbInt16 REPLICATE( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 ulRepCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{197 xbInt16 RIGHT( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 iCharCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{198 xbInt16 RTRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{199 xbInt16 SPACE( xbInt32 lCnt, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{200 xbInt16 SQRT( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dBase, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dSqrRt );}
+\DoxyCodeLine{201 xbInt16 STOD( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&sDateOut );}
+\DoxyCodeLine{202 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{203 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{204 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{205 xbInt16 STR( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sPadChar, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{206 xbInt16 STRZERO( \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} dIn, xbUInt32 ulLen, xbUInt32 ulDec, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{207 xbInt16 SUBSTR( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{208 xbInt16 TRIM( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{209 xbInt16 UPPER( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sOut );}
+\DoxyCodeLine{210 xbInt16 VAL( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sIn, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOut );}
+\DoxyCodeLine{211 xbInt16 YEAR( \mbox{\hyperlink{classxb_1_1xbDate}{xbDate}} \&dInDate, \mbox{\hyperlink{namespacexb_a25f47b226ce924a5c78f97989b0744a2}{xbDouble}} \&dOutYear );}
+\DoxyCodeLine{212 \textcolor{preprocessor}{ \#endif}}
+\DoxyCodeLine{213 }
+\DoxyCodeLine{214 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{215 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBcd;}
+\DoxyCodeLine{216 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbExp;}
\DoxyCodeLine{217 }
-\DoxyCodeLine{218 xbInt16 \mbox{\hyperlink{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}{GetFunctionInfo}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExpLine, \textcolor{keywordtype}{char} \&cReturnType, xbInt16 \&iReturnLenCalc, xbInt32 \&lReturnLenVal ) \textcolor{keyword}{const};}
-\DoxyCodeLine{219 \textcolor{keyword}{static} xbInt16 xbMemcmp( \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *s1, \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *s2, \textcolor{keywordtype}{size\_t} n );}
-\DoxyCodeLine{220 }
-\DoxyCodeLine{221 \textcolor{keyword}{private}:}
+\DoxyCodeLine{218 \textcolor{preprocessor}{ \#ifdef XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{219 \textcolor{keyword}{friend} \textcolor{keyword}{class }xbBlockRead;}
+\DoxyCodeLine{220 \textcolor{preprocessor}{ \#endif }\textcolor{comment}{// XB\_BLOCKREAD\_SUPPORT}}
+\DoxyCodeLine{221 }
\DoxyCodeLine{222 }
-\DoxyCodeLine{223 \textcolor{preprocessor}{\#ifdef XB\_LOGGING\_SUPPORT}}
-\DoxyCodeLine{224 \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}} *xLog;}
-\DoxyCodeLine{225 \textcolor{preprocessor}{\#endif}}
-\DoxyCodeLine{226 }
-\DoxyCodeLine{227 \};}
-\DoxyCodeLine{228 }
-\DoxyCodeLine{229 \} \textcolor{comment}{/* namespace xb */}}
-\DoxyCodeLine{230 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBLIST\_H\_\_ */}\textcolor{preprocessor}{}}
+\DoxyCodeLine{223 xbInt16 \mbox{\hyperlink{classxb_1_1xbXBase_ae52e53340593b4253936c1372ec15ee1}{GetFunctionInfo}}( \textcolor{keyword}{const} \mbox{\hyperlink{classxb_1_1xbString}{xbString}} \&sExpLine, \textcolor{keywordtype}{char} \&cReturnType, xbInt16 \&iReturnLenCalc, xbInt32 \&lReturnLenVal ) \textcolor{keyword}{const};}
+\DoxyCodeLine{224 \textcolor{keyword}{static} xbInt16 xbMemcmp( \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *s1, \textcolor{keyword}{const} \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{char} *s2, \textcolor{keywordtype}{size\_t} n );}
+\DoxyCodeLine{225 }
+\DoxyCodeLine{226 \textcolor{keyword}{private}:}
+\DoxyCodeLine{227 }
+\DoxyCodeLine{228 \textcolor{preprocessor}{\#ifdef XB\_LOGGING\_SUPPORT}}
+\DoxyCodeLine{229 \mbox{\hyperlink{namespacexb_a4a31fbe9110c9e55495ce71e642d785c}{xbLog}} *xLog;}
+\DoxyCodeLine{230 \textcolor{preprocessor}{\#endif}}
+\DoxyCodeLine{231 }
+\DoxyCodeLine{232 \};}
+\DoxyCodeLine{233 }
+\DoxyCodeLine{234 \} \textcolor{comment}{/* namespace xb */}}
+\DoxyCodeLine{235 \textcolor{preprocessor}{\#endif }\textcolor{comment}{/* \_\_XB\_DBLIST\_H\_\_ */}\textcolor{preprocessor}{}}
\end{DoxyCode}
diff --git a/docs/howto/GettingStarted.txt b/docs/howto/GettingStarted.txt
index a88698f..d6497a2 100755
--- a/docs/howto/GettingStarted.txt
+++ b/docs/howto/GettingStarted.txt
@@ -21,7 +21,7 @@ To build the xbase library
For example
update file /etc/ld.so.conf to include /usr/local/lib
and run ldconfig
- Your milage may vary depending on Linux Distro
+ Your mileage may vary depending on Linux Distro
To update the configuration file
diff --git a/docs/html/Xbase64ClassDiagramV2.jpeg b/docs/html/Xbase64ClassDiagramV2.jpeg
new file mode 100755
index 0000000..191b061
--- /dev/null
+++ b/docs/html/Xbase64ClassDiagramV2.jpeg
Binary files differ
diff --git a/docs/html/Xbase64ClassDiagramV2.jpeg.jpeg b/docs/html/Xbase64ClassDiagramV2.jpeg.jpeg
new file mode 100755
index 0000000..6aa0a82
--- /dev/null
+++ b/docs/html/Xbase64ClassDiagramV2.jpeg.jpeg
Binary files differ
diff --git a/docs/html/index.html b/docs/html/index.html
index 0e8db33..f1e9590 100755
--- a/docs/html/index.html
+++ b/docs/html/index.html
@@ -2,32 +2,28 @@
<HTML><TITLE>Xbase DBMS Documentation Table of Contents</TITLE>
<BODY BGCOLOR=#FFFFFF>
<H1><p align="center">Xbase DBMS<br>
-Last Updated 2/11/23<br>Version 4.1.0</p></H1>
+Last Updated 04/17/23<br>Version 4.1.4</p></H1>
<h2>Documentation Table Of Contents</h2>
-<h3>Section 1 - Xbase Concepts</h3>
+<h3>Section 1 - Xbase64 Concepts</h3>
<h4>
<A HREF="xbc1.html">Chapter 1 - Getting Started</A><br>
-<A HREF="xbc2.html">Chapter 2 - Database Overview</A><br>
-<A HREF="xbc3.html">Chapter 3 - Fields and Strings</A><br>
-<A HREF="xbc4.html">Chapter 4 - Date Processing</A><br>
-<A HREF="xbc5.html">Chapter 5 - Expression Handling</A><br>
-<A HREF="xbc6.html">Chapter 6 - Index Overview</A><br>
-<A HREF="xbc7.html">Chapter 7 - NDX (DBase) Indices</A><br>
-<A HREF="xbc8.html">Chapter 8 - MDX (DBase) Indices</A><br>
-<A HREF="xbc9.html">Chapter 9 - NTX (Clipper) Indices</A><br>
-<A HREF="xbc10.html">Chapter 10 - CDX (FoxPro) Indices</A><br>
-<A HREF="xbc11.html">Chapter 11 - IDX (FoxPro) Indices</A><br>
-<A HREF="xbc12.html">Chapter 12 - Record and File Locking</A><br>
-<A HREF="xbc13.html">Chapter 13 - Logfile Support</A><br>
-<A HREF="xbc14.html">Chapter 14 - SQL Support</A><br>
-<A HREF="xbc15.html">Chapter 15 - Sequential Block Read</A><br>
+<A HREF="xbc2.html">Chapter 2 - System Overview</A><br>
+<A HREF="xbc3.html">Chapter 3 - Fields, Strings and Dates</A><br>
+<A HREF="xbc4.html">Chapter 4 - Expression Handling</A><br>
+<A HREF="xbc5.html">Chapter 5 - Index Overview</A><br>
+
+
+<A HREF="xbc6.html">Chapter 6 - SQL Support</A><br>
</h4>
<h3>Section 2 - Classes and Objects</h3>
<h4>
-<A HREF="xbc16.html">Chapter 16 - General Class Information</A><br>
-<A HREF="xbc17.html">Chapter 17 - Class xbSsv - Shared System Values</A><br>
-<A HREF="xbc18.html">Chapter 18 - Class xbXBase - The class that links it all together</A><br>
+<A HREF="xbc7.html">Chapter 7 - General Class Information</A><br>
+<A HREF="xbc8.html">Chapter 8 - Class xbSsv - Shared System Values</A><br>
+<A HREF="xbc9.html">Chapter 9 - Class xbXBase - The class that links it all together</A><br>
+<A HREF="xbc10.html">Chapter 10 - Class xbDbf - The DBF Table class</A><br>
+<A HREF="xbc11.html">Chapter 11 - Class xbLog - Class to support error logging and informational messaging.</A><br>
+<A HREF="xbc12.html">Chapter 12 - Class xbDate - Class to support dates and date fields.</A><br>
</h4>
<h3>Section 3 - Appendices</h3>
diff --git a/docs/html/ntx.index.html b/docs/html/ntx.index.html
new file mode 100755
index 0000000..82d6dd5
--- /dev/null
+++ b/docs/html/ntx.index.html
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC>
+<HTML>
+<TITLE>Xbase DBMS Chapter 10</TITLE>
+<BODY BGCOLOR=#FFFFFF>
+<H2><p align="center">NTX Indices</p></H2>
+<p align="center">Chapter Updated 04/13/23</p><hr>
+
+
+<h3>This chapter might be out of date. The NTX module is pending review and updates for release 4.x.x</h3>
+
+The objective of this chapter is to provide information regarding the
+basic concepts of how .NTX index files work in the Xbase environment.<br><br>
+
+The information in this chapter has been gathered by searching the internet
+and by examining the structure of known good NTX indexes.<br><br>
+
+<h4>NTX Index File Characteristics</h4>
+
+<ul><li>NTX indices maintain keys in ascending sort order only.<br><br>
+<li>NTX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
+
+<em>Unique</em> keys must be unique. The database update routines will
+fail if an attempt to add a non-unique key is performed.<br><br>
+
+<em>Non-unique</em> Keys are not required to be unique, duplicate
+keys are allowed if the index is created with the XB_NOT_UNIQUE
+setting. Duplicate keys are stored in record number order.<br><br>
+
+<li>NTX indexes are automatically updated by the Xbase library after the
+indices are opened.<br><br>
+
+<li>Character keys are left justified and padded on the right with spaces.<br><br>
+
+<li>Numeric keys are stored as eight byte double values.<br><br>
+
+The numeric key processing logic performs floating point numeric
+calculations on eight byte double values. This logic may be compute intensive
+and slow on older machines, especially the older intel processors without a
+math coprocessor chip.
+
+</ul>
+
+
+<h4>NTX File Internals</h4>
+
+NTX files are comprised of two or more 1024 byte blocks or nodes of
+information. There are three types of nodes: Head Nodes, Interior
+Nodes and Leaf Nodes.<br><br>
+
+The <em>Head Node</em> is the first node in the file starting at
+position zero (0) and contains information about the NTX file. There
+is only one Head Node in each index and it always starts at the
+beginning of the file.<br><br>
+
+
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>NTX Header Node</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Signature Byte<TD>The Clipper signature byte. 0x003h indicates Clipper 87. 0x006h indicates Clipper 5.x
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Indexing Version Number<TD>Documented as the "Compiler Version" but I have observed an increasing number. Incremented whenever the index is changed.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Node Offset<TD>The offset to the first node.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Unused Page Offset<TD>The offset to the first unused node.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size + 8<TD>The Key Size plus 8 bytes.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size<TD>The size (length) of the key.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Number of Decimals<TD>Number of decimal places in key.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Max Items Per Node<TD>The maximum number of key per node.
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>1/2 The Max Items Per Node<TD>Half the maximum number of key per node. Important in a B-tree system, as this is the minimum number of keys that must be on a page.
+<TR><TH ALIGN="LEFT">char<TD>256<TD>KeyExpression<TD>Key expression string
+<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br>
+ 00 - Not Unique - XB_NON_UNIQUE<br>
+ 01 - Unique - XB_UNIQUE
+<TR><TH ALIGN="LEFT">char<TD>745<TD>Unused<TD>Unused
+
+
+<TR><TH ALIGN="LEFT"><TD>1024<TD><TD>Total bytes in node
+</TABLE>
+<br><br>
+The following structure is used by the Xbase NTX routines:
+<xmp>
+
+struct NtxHeadNode { /* ntx header on disk */
+ xbUShort Signature; /* Clipper 5.x or Clipper 87 */
+ xbUShort Version; /* Compiler Version */
+ /* Also turns out to be */
+ /* a last modified counter */
+ xbULong StartNode; /* Offset in file for first node */
+ xbULong UnusedOffset; /* First free node offset */
+ xbUShort KeySize; /* Size of items (KeyLen + 8) */
+ xbUShort KeyLen; /* Size of the Key */
+ xbUShort DecimalCount; /* Number of decimal positions */
+ xbUShort KeysPerNode; /* Max number of keys per node */
+ xbUShort HalfKeysPerNode; /* Min number of keys per node */
+ char KeyExpression[256]; /* Null terminated key expression */
+ unsigned Unique; /* Unique Flag */
+ char NotUsed[745];
+};
+
+</xmp>
+
+<br><br>
+
+<h4>Interior and Leaf Nodes</h4>
+
+NTX files use a B-tree system to store keys. A B-tree is a balanced,
+on disk tree who's design minimizes disk access. Interior Nodes and
+Leaf Nodes share the same structure in an NTX file. The difference is
+that interior nodes point to other nodes. Leaf nodes point to
+nothing. Keys in both interior nodes and leaf nodes point to records
+in a DBF file.
+
+Interior nodes have field LeftNodeNo valued which points to the node
+which points to the keys which are less than the key value in the KeyVal
+field. There is one more LeftNodeNo value in the node than there are keys. The
+Last LeftNodeNo points to the node which is greater than the highest
+key value in the node. <br><br>
+
+Leaf nodes have 0 in the LeftNodeNo field.<br><br>
+
+
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>NTX Interior Node and Leaf Node Structure</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>NoOfKeysThisNode<TD>The number of key values in this node. (N)
+<TR><TH ALIGN="LEFT">Array of xbUShort<TD>2<TD>offsets[]<TD>Array of
+ <pre>HeadNode.KeysPerNode +1</pre> unsigned longs.
+ These values are the offsets (in bytes) of each key
+ in this node, from the beginning of the node.
+<TR><TH ALIGN="LEFT">char<TD>variable<TD>KeyRecs<TD>A repeating structure of
+ pointers and keys. See the next table for the KeyRec structure.
+</TABLE>
+<br><br>
+
+One primary difference between NDX files and NTX files is that NTX
+files uses an array of offsets on all interior and leaf nodes. Each
+offset is the byte count from the beginning of the node where each
+KeyRec will be found. The order of the array of offsets determines
+the order of keys on a given node. When keys are added or deleted,
+thus changing the order of the keys on a node, only the order of the
+offset array is changed. All other key data is not moved. This results
+in slightly better index performance.
+
+<BR>
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number (offset from beginning of file) of the lower node
+ for this key. 0 in Leaf Nodes.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key.
+ 0 in Interior Nodes.
+<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value.
+</TABLE>
+
+<br><br>
+For those interested in knowing how the Xbase DBMS manipulates and
+navigates index files, the following discussion may be helpfull.<br><br>
+
+Xbase DBMS navigates through NTX files by using an in-memory chain of
+nodes of the current location / key in use. It starts by reading the
+Head Node of the index, which points to the first node of the
+file. The first node of the file will be a leaf node if the index is
+small or will be an interior node if the index has more than one leaf
+node. The first interior node is loaded into memory, added to the
+node chain and points to the next node to read. The node is made up
+of one or more keys. If it is a leaf node, the logic looks for a
+matching key on the node. It continues down the tree, adding the
+nodes to the in-memory node chain until it reaches the correct
+node. If it finds a matching key in the leaf node, it returns a XB_FOUND
+condition. If it doesn't find an exact match in the leaf node, it
+returns a XB_NOT_FOUND condition and stops on the key which is greater
+than the search key given.
+
+<hr>
+<A HREF="mailto:bob@#synxis.com">
+Author: Bob Cotton - bob@synxis.com</A><br>
+<p><img src="xbase.jpg"><br><hr>
+</BODY>
+</HTML>
diff --git a/docs/html/xbae.html b/docs/html/xbae.html
index e860911..3de3fb5 100755
--- a/docs/html/xbae.html
+++ b/docs/html/xbae.html
@@ -2,8 +2,8 @@
<HTML>
<TITLE>Xbase DBMS Appendix E</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Eror Codes</p></H2>
-<p align="center">Chapter Updated 1/31/23</p><hr>
+<H2><p align="center">Error Codes</p></H2>
+<p align="center">Chapter Updated 04/07/23</p><hr>
<h3>Error Codes and Error Processing</h3>
@@ -34,6 +34,7 @@ Error codes are defined in the xbretcod.h file.<br><br><br>
<TR><TD> XB_NO_ERROR </TD><TD> 0 </TD><TD> general </TD></TR>
<TR><TD> XB_NO_MEMORY </TD><TD> -100 </TD><TD> general </TD></TR>
<TR><TD> XB_INVALID_OPTION </TD><TD> -101 </TD><TD> general </TD></TR>
+<TR><TD> XB_INVALID_PARAMETER </TD><TD> -102 </TD><TD> general </TD></TR>
<TR><TD> XB_DUP_TABLE_OR_ALIAS </TD><TD> -110 </TD><TD> table manager </TD></TR>
<TR><TD> XB_INVALID_NODELINK </TD><TD> -120 </TD><TD> linklist </TD></TR>
<TR><TD> XB_KEY_NOT_UNIQUE </TD><TD> -121 </TD><TD> linklist </TD></TR>
diff --git a/docs/html/xbaf.html b/docs/html/xbaf.html
index 110db7b..3ef171c 100755
--- a/docs/html/xbaf.html
+++ b/docs/html/xbaf.html
@@ -3,42 +3,41 @@
<TITLE>Xbase DBMS Chapter 15</TITLE>
<BODY BGCOLOR=#FFFFFF>
<H1><p align=center>Sample Programs</p></H1>
-<p align=center>Page Updated 12/20/22</p><hr><br><br>
+<p align=center>Page Updated 05/12/23</p><hr><br><br>
<CENTER>
<TABLE BORDER>
<CAPTION ALIGN=TOP><H3>XBase Example Programs</H3></CAPTION>
<TR ALIGN=BASELINE>
<TR><TH ALIGN=LEFT>Program<TD>Program Description
-<TR><TH ALIGN=LEFT>xb_ex_string<TD>Example program to demonstrate xbString class usage
-<TR><TH ALIGN=LEFT>xb_ex_v3_create_dbf<TD>Example program to create V3 DBF file
-<TR><TH ALIGN=LEFT>xb_ex_v3_upd_dbf<TD>Example program to update V3 DBF file
-<TR><TH ALIGN=LEFT>xb_ex_v4_create_dbf<TD>Example Program to create V4 DBF file
-<TR><TH ALIGN=LEFT>xb_ex_v4_upd_dbf<TD>Example program to update V4 DBF file
+<TR><TH ALIGN=LEFT>xb_ex_string<TD>Example program to demonstrate xbString class usage.
+<TR><TH ALIGN=LEFT>xb_ex_v3_create_dbf<TD>Example program to create V3 DBF file.
+<TR><TH ALIGN=LEFT>xb_ex_v3_upd_dbf<TD>Example program to update V3 DBF file.
+<TR><TH ALIGN=LEFT>xb_ex_v4_create_dbf<TD>Example Program to create V4 DBF file.
+<TR><TH ALIGN=LEFT>xb_ex_v4_upd_dbf<TD>Example program to update V4 DBF file.
</TABLE></CENTER>
<br><br>
-
<CENTER>
<TABLE BORDER>
<CAPTION ALIGN=TOP><H3>XBase Utility Programs</H3></CAPTION>
<TR ALIGN=BASELINE>
<TR><TH ALIGN=LEFT>Program<TD>Program Description
-<TR><TH ALIGN=LEFT>xb_cfg_check<TD>This program prints the compile settings and options in use
-<TR><TH ALIGN=LEFT>xb_copydbf<TD>This program copies a DBF file structure
-<TR><TH ALIGN=LEFT>xb_dbfutil1<TD>Menu program for executing Xbase functions
-<TR><TH ALIGN=LEFT>xb_deletall<TD>This program marks all records in a DBF file for deletion
-<TR><TH ALIGN=LEFT>xb_dumpdbt<TD>Debug memo files
-<TR><TH ALIGN=LEFT>xb_dumphdr<TD>This program opens an Xbase file and prints its header
-<TR><TH ALIGN=LEFT>xb_dumprecs<TD>This program dumps records for an XBase file
-<TR><TH ALIGN=LEFT>xb_execsql<TD>This program executes SQL statements
-<TR><TH ALIGN=LEFT>xb_pack<TD>This program packs (removes deleted records) from a DBF database file
-<TR><TH ALIGN=LEFT>xb_undelall<TD>This program undeletes all deleted records in a dbf file
-<TR><TH ALIGN=LEFT>xb_zap<TD>This program removes all records from a DBF file
+<TR><TH ALIGN=LEFT>xb_cfg_check<TD>This program prints the compile settings and options in use.
+<TR><TH ALIGN=LEFT>xb_copydbf<TD>This program copies a DBF file structure.
+<TR><TH ALIGN=LEFT>xb_dbfutil1<TD>Menu program for executing Xbase functions.
+<TR><TH ALIGN=LEFT>xb_deletall<TD>This program marks all records in a DBF file for deletion.
+<TR><TH ALIGN=LEFT>xb_dumpdbt<TD>Debug memo files.
+<TR><TH ALIGN=LEFT>xb_dumphdr<TD>This program opens an Xbase file and prints its header.
+<TR><TH ALIGN=LEFT>xb_dumprecs<TD>This program dumps records for an XBase file.
+<TR><TH ALIGN=LEFT>xb_execsql<TD>This program executes SQL statements.
+<TR><TH ALIGN=LEFT>xb_import<TD>This program is used to import delimited data into a DBF file/table.
+<TR><TH ALIGN=LEFT>xb_pack<TD>This program packs (removes deleted records) from a DBF database file.
+<TR><TH ALIGN=LEFT>xb_undelall<TD>This program undeletes all deleted records in a dbf file.
+<TR><TH ALIGN=LEFT>xb_zap<TD>This program removes all records from a DBF file.
</TABLE></CENTER>
<br><br>
-
<hr>
<p><img src="xbase.jpg"><br><hr>
</BODY>
diff --git a/docs/html/xbc1.html b/docs/html/xbc1.html
index c07e5f6..d042048 100755
--- a/docs/html/xbc1.html
+++ b/docs/html/xbc1.html
@@ -1,10 +1,10 @@
<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 1</TITLE>
-<BODY BGCOLOR=#FFFFFF>
+<html>
+<title>Xbase DBMS Chapter 1</title>
+<body BGCOLOR=#FFFFFF>
<h1><p align="center">Getting Started</p></h1>
-<p align="center">Chapter Updated 12/09/22</p>
+<p align="center">Chapter Updated 4/28/23</p>
<hr><h2>Overview</h2>
@@ -50,6 +50,16 @@ The Xbase library is designed to be flexible in which options can be compiled
into or out fo the library and also which environments it can be run on.
+<br><br>
+<h3>Library Features</h3>
+<li>Supports 32 and 64 bit architectures
+<li>Supports big endian and little endian architectures
+<li>Compatible code, same API across multiple platforms / archtiectures
+<li>Supports single and multi user configurations with record and file locking
+<li>Includes support for logfiles
+
+
+
<br><br><br>
<hr><h2>System Requirements</h2>
@@ -62,7 +72,7 @@ The original source code was developed on a Linux platform with the GCC
public domain C/C++ compiler.
<br><br>
-Xbase64 DBMS has been successfully ported and runs on Linux, Mac and and Windows.
+Xbase64 DBMS has been successfully ported and runs on Linux, Mac and Windows.
<br><br>
<hr><h2>Classes and User Interface</h2>
@@ -110,12 +120,12 @@ To build the xbase64 library, verify you have:<br>
<li>Compiler and linker
<br><br>
-Verify you have access rights to the target location of the library
+If you run into issues, verify you have access rights to the target location of the library.
<br><br>
For Linux:
<br><br>
-<li>cd xbase/Linux
+<li>cd build/linux64 or cd build/linux32
<li>cmake .
<li>make
<li>make test
@@ -127,7 +137,7 @@ update file /etc/ld.so.conf to include /usr/local/lib and run ldconfig.
For Mac:
<br><br>
<li>Verify you have xcode installed and operational.
-<li>cd xbase/Mac
+<li>cd build/mac64
<li>cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
<li>make
<li>make test
@@ -136,7 +146,7 @@ For Mac:
For Windows 64 bit with Visual Studio:
<br><br>
<li>Open a Visual Studio 64 bit Shell
-<li>cd xbase\Win64VS
+<li>cd build\win64vs
<li>buildwin.bat
<li>nmake test
<li>From a VS Studio 64 bit shell in admin mode: nmake install
@@ -145,7 +155,7 @@ For Windows 64 bit with Visual Studio:
For Windows 32 bit with Visual Studio:
<br><br>
<li>Open a Visual Studio 32 bit Shell
-<li>cd xbase\Win32VS
+<li>cd build\win32vs
<li>buildwin.bat
<li>nmake test
<li>From a VS Studio 32 bit shell in admin mode: nmake install
@@ -153,9 +163,12 @@ For Windows 32 bit with Visual Studio:
For Windows 32 bit with Borland 5.5 free compiler
<br><br>
-<li>cd xbase\Win32Borland
+<li>cd build\borland5.5
<li>BuildBorland.bat
<li>make test
+<li>make install (if errors, run in administrator mode)
+<li>xb_cfg_check (if errors, add path c:\Program Files\xbase64\bin)
+
<br><br>
For other platforms:
@@ -195,5 +208,5 @@ Maximum expression result length - 100 bytes<br>
Maximum NDX index key length - 100 bytes<br><br>
<hr><br>
<p><img src=xbase.jpg><br><hr>
-</BODY>
-</HTML>
+</body>
+</html>
diff --git a/docs/html/xbc10.html b/docs/html/xbc10.html
index 04f5158..2889e6d 100755
--- a/docs/html/xbc10.html
+++ b/docs/html/xbc10.html
@@ -2,11 +2,937 @@
<HTML>
<TITLE>Xbase DBMS Chapter 10</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">CDX Indices</p></H2>
-<p align="center">Chapter Updated 11/28/22</p><hr>
+<H2><p align="center">Class xbDbf, xbDbf3, xbDbf4</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
-<h3>Pending CDX index module development.</h3>
+<h4>This chapter documents the following classes:</h4><br><br>
+<li>Class xbDbf - Base class for handling DBF files.
+<li>Class xbDbf3 - Derived class for handling DBF version III files.
+<li>Class xbDbf4 - Derived class for handling DBF version IV files.
+
+
+<br><br><br>
+<h4>Highlights</h4>
+
+<li>The xbDbf3 and xbDbf4 classes are used for accessing DBF data files.
+
+<li>In line with relational theory, a each DBF file can be considered as a table.
+The documentation uses the terms DBF and table interchangeably.<br>
+
+<li>These classes contain methods for accessing and updating DBF files.
+
+<li>The class structure is designed to support additional database file layouts.
+To modify the library to support a new file type not currently supported,
+create a derived class using xbDbf as a base class and create/modify methods needed
+to support the new dbf file version.<br>
+
+<li>Each open DBF file would have an associated instance of the approprate class.
+Each instance maintains a record buffer, an original record buffer (if changes applied)
+current reccord number, selected tag, lock status, record updated flag and other
+misc info.
+
+<li>The record updated flag tells the software to commit any updates to the data base
+automatically if the auto commit option is turned on (default setting is on).
+
+<li>To use a DBF data file, first open it or create it. When done, close it.
+
+<li>The first byte of each record is a deletion flag. Deleted records are marked for deletion
+and not physically removed from the DBF file. They and can be undeleted with xbDbf::UndeleteRecord().
+To physically remove deleted records from the DBF file, use xbDbf::Pack().
+
+
+<li>The library will automatically post any updates if Auto Commit is turned on (default setting).
+If Auto Commit is not on, the application program will need to issue xbDbf::Commit() or
+xbDbf::Abort() commands to post updates.
+
+<li>
+The library automatically updates any open indices. MDX indices are opened automatically.
+For NDX style indices, early versions of DBase required the NDX files be explicitly opened in the
+application. More current versions of available DBase ODBC drivers automatically open NDX indices
+with the addition of an <em>tablename.INF</em> file. Xbase64 supports both scenarios.
+
+<li>Xbase64 handles all record and file locking automatically and is programmed to work the same as the
+original DBase products as far as locking goes. If auto locking is be turned off, the application
+is responsible for all locking activities in multi user environments.
+
+<li>All field related methods operate on the current record.
+
+<li>When accessing fields on a given record, processing fields by field number offers slightly better
+performance than processing by field name because the number has to be looked up if
+the name is used. The field number can be retrieved with xbDbf::FieldNo() when the application program
+is initializing.
+
+<li>Unless otherwise specified, the methods return either XB_NO_ERROR or an error as defined here: <a href=xbae.html>Error Codes</a>
+
+
+<br><br><br><br>
+
+
+
+
+<center>
+<h2>Table Methods</h2>
+<table border=1>
+<tr><th width=35%>Method</th><th>Description</th><th>Parms</th></tr>
+<tr><td>virtual xbInt16 Abort()</td><td>Cancel any updates not already committed to the table.</td></tr>
+<tr><td>virtual xbInt16 AppendRecord()</td><td>Append the record buffer to the end of the table.</td></tr>
+<tr><td>virtual xbInt16 BlankRecord()</td><td>Blank the current record buffer.</td></tr>
+<tr><td>virtual xbInt16 Commit()</td><td>Commit any updates to the DBF file/table.</td></tr>
+<tr><td>virtual xbInt16 Close()</td><td>Close the DBF file/table.</td></tr>
+<tr><td>virtual xbInt16 CopyDbfStructure( xbDbf *dNewTable, const xbString &sTableName, const xbString &sTableAlias, xbInt16 iOverlay, xbInt16 iShareMode )</td><td>Copy structure to new DBF file.</td>
+ <td>
+ <em>dNewTable</em> - Pointer to new xbDbf class<br>
+ <em>sTableName</em> - New Table name<br>
+ <em>sTableAlias</em> - Alias for new table</br>
+ <em>iOverlay</em><br>
+ <li>xbTrue - Overlay if file exists<br>
+ <li>xbFalse - Don't overlay<br>
+ <em>iShareMode</em><br>
+ <li>XB_SINGLE_USER<br>
+ <li>XB_MULTI_USER
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 CreateTable( const xbString &sTableName, const xbString &sAlias, xbSchema *pSchema, xbInt16 iOverlay, xbInt16 iShareMode ) = 0</td><td>Create new table / DBF file.</td>
+ <td>
+ <em>sTableName</em> - New Table name<br>
+ <em>sAlias</em> - Alias for new table<br>
+ <em>pSchema</em> - Pointer to field definition structure<br>
+ <em>iOverlay</em><br>
+ <li>xbTrue - Overlay if file exists<br>
+ <li>xbFalse - Don't overlay<br>
+ <em>iShareMode</em><br>
+ <li>XB_SINGLE_USER<br>
+ <li>XB_MULTI_USER
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 DeleteTable()</td><td>Delete table / DBF file and all associated indices and memo files.</td></tr>
+
+<tr><td>virtual xbInt16 DeleteAll( xbInt16 iOption )</td><td>Set or remove delete flags for all records in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>0 - Set all delete flags<br>
+ <li>1 - Remove all delete flags
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 DeleteAllRecords()</td><td>Set delete flags for all records in the table.</td></tr>
+<tr><td>virtual xbInt16 DeleteRecord()</td><td>Delete the current record.</td></tr>
+
+<tr><td>virtual xbInt16 DumpHeader( xbInt16 iOption ) const</td><td>Dump DBF header information to the console.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>1 = Print header only<br>
+ <li>2 = Field data only<br>
+ <li>3 = Header and Field data<br>
+ <li>4 = Header, Field and Memo header data if applicable
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 DumpRecord( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 )</td><td>Dump the contents of the specified record.</td>
+ <td>
+ <em>ulRecNo</em> - Record number of record to be dumped
+ <em>iOutputDest</em><br>
+ <li>0 = stdout<br>
+ <li>1 = Syslog<br>
+ <li>2 = Both<br>
+ <em>iOutputFmt</em><br>
+ <li>0 = with field names<br>
+ <li>1 = 1 line per rec, no field names<br>
+ <li>2 = 1 line per rec, first line is a list of field names.
+ </td>
+ </tr>
+
+<tr><td>virtual xbInt16 GetAutoCommit() const</td><td>Get the Auto Commit status.</td></tr>
+<tr><td>virtual xbInt16 GetAutoCommit( xbInt16 iOption ) const</td><td>Get the Auto Commit status.</td><td><em>iOption:</em><br>0 = Table Status<br>1 = System Status.</td></tr>
+<tr><td>virtual xbBool GetBof()</td><td>Returns true if beginning of file.</td></tr>
+<tr><td>virtual xbUInt32 GetCurRecNo() const</td><td>Returns the current record number.</td></tr>
+<tr><td>virtual xbInt16 GetDbfStatus() const</td><td>Returns Status<br>
+ <li>0 - Closed<br>
+ <li>1 - Open<br>
+ <li>2 - Updates Pending
+ </td>
+</tr>
+
+<tr><td>virtual xbBool GetEof()</td><td>Returns true if end of file.</td></tr>
+<tr><td>virtual xbInt32 GetFieldCnt() const</td><td>Returns the number of fields in the table.</td></tr>
+<tr><td>virtual xbInt16 GetFirstRecord()</td><td>Retrieve the first active (not deleted) record in the table.</td></tr>
+<tr><td>virtual xbInt16 GetFirstRecord( xbInt16 iOption )</td><td>Retrieve the first record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS
+ </td>
+</tr>
+<tr><td>virtual xbUInt16 GetHeaderLen() const</td><td>Returns the length of the header portion within the DBF file.</td></tr>
+<tr><td>virtual xbInt16 GetLastRecord()</td><td>Retrieve the last active (not deleted) record in the table.</td></tr>
+<tr><td>virtual xbInt16 GetLastRecord( xbInt16 iOption )</td><td>Retrieve the last record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 GetNextRecord()</td><td>Retrieve the next active (not deleted) record in the table.</td></tr>
+<tr><td>virtual xbInt16 GetNextRecord( xbInt16 iOption )</td><td>Retrieve the next record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetNextRecord( xbInt16 iOption, xbUInt32 ulStartRec )</td><td>Retrieve the next record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS<br>
+ <em>ulStartRec</em> is the position to start from.
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetPrevRecord()</td><td>Retrieve the previous active (not deleted) record in the table.</td></tr>
+<tr><td>virtual xbInt16 GetPrevRecord( xbInt16 iOption )</td><td>Retrieve the previous record in the table.</td>
+ <td>
+ <em>iOption</em><br>
+ <li>XB_ALL_RECS<br>
+ <li>XB_ACTIVE_RECS<br>
+ <li>XB_DELETED_RECS
+ </td>
+</tr>
+<tr><td>virtual xbInt16 GetRecord( xbUInt32 ulRecNo )</td><td>Retrieve record <em>ulRecNo</em>.</td><td><em>ulRecNo</em> - Record number to retrieve</td></tr>
+
+<tr><td>virtual xbInt16 GetRecordCnt( xbUInt32 & ulRecCnt )</td><td>Returns record count in <em>ulRecCnt</em>.</td>
+ <td>
+ <em>ulRecCnt</em> - Output number of records in table</tr>
+
+<tr><td>virtual char * GetRecordBuf( xbInt16 iOpt = 0 ) const</td><td>Returns pointer to record buffer.</td>
+ <td>
+ <em>iOpt</em><br>
+ <li>0 for RecBuf (current contents)<br>
+ <li>1 for RecBuf2 (original contents)
+ </td>
+</tr>
+
+<tr><td>virtual xbUInt16 GetRecordLen() const</td><td>Returns the record length</td></tr>
+<tr><td>virtual const xbString &GetTblAlias() const</td><td>Returns the table alias. Aliases can be used to manage multiple instances of the same open table.</td></tr>
+<tr><td>virtual xbInt16 GetVersion() const = 0</td><td>Returns 3 for DBase III version files, returns 4 for DBase IV version files.</td></tr>
+<tr><td>virtual xbXBase *GetXbasePtr() const</td><td>Returns the xbase pointer.</td></tr>
+<tr><td>virtual xbBool MemoFieldsExist() const</td><td>Returns true if the table has any associated memo fields.</td></tr>
+
+<tr><td>virtual xbInt16 Open( const xbString &sTableName )</td><td>Open a table (DBF file).</td>
+ <td>
+ <em>sTableName</em> - Table name
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 Open( const xbString &sTableName, const xbString &sAlias )</td><td>Open a table (DBF file).</td>
+<td>
+ <em>sTableName</em> - Table name<br>
+ <em>sAlias</em> - Alias name
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0</td><td>Open a table (DBF file).</td>
+ <td>
+ <em>sTableName</em> - Table name<br>
+ <em>sAlias</em> - Alias name<br>
+ <em>iOpenMode</em><br>
+ <li>XB_READ<br>
+ <li>XB_READ_WRITE<br>
+ <em>iShareMode</em><br>
+ <li>XB_SINGLE_USER<br>
+ <li>XB_MULTI_USER
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 Pack()</td><td>Pack the table, physically remove any records flagged for deletion.</td></tr>
+<tr><td>virtual xbInt16 Pack( xbUInt32 &ulDeletedRecCnt )</td><td>Pack the table, physically remove any records flagged for deletion.<br></td>
+ <td><em>ulDeletedRecordCnt</em> - Output - number of deleted records.</td></tr>
+
+<tr><td>virtual xbInt16 PutRecord()</td><td>Write record buffer to current location</td></tr>
+
+<tr><td>virtual xbInt16 PutRecord( xbUInt32 ulRecNo )</td><td>Write record buffer to record position <em>ulRecNo</em>.</td>
+ <td>
+ <em>ulRecNo</em> - Record number to write.
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 RecordDeleted( xbInt16 iOpt = 0 ) const</td><td>Returns true if currect record is flagged for deletion, otherwise returns false.</td>
+ <td>
+ <em>iOpt</em><br>
+ <li>0 - check RecBuf (current contents)<br>
+ <li>1 - check RecBuf2 (original contents)
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 Rename( const xbString sNewName ) = 0</td><td>Rename the table.</td>
+ <td>
+ <em>sNewName</em> - New tablename.
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 SetAutoCommit( xbInt16 iAutoCommit )</td><td>Set table specific auto commit setting.</td>
+ <td>
+ <em>iAutoCommit</em><br>
+ <li>0 - Auto Commit off<br>
+ <li>1 - Auto Commit on
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 UndeleteAllRecords()</td><td>Undelete all records in table flagged for deletion.</td></tr>
+<tr><td>virtual xbInt16 UndeleteRecord()</td><td>Undelete the current record.</td></tr>
+<tr><td>virtual xbInt16 Zap()</td><td>Initialize the table.</td></tr>
+</table>
+
+<br><br><br>
+
+
+
+<h2>Field Methods</h2>
+
+<table border=1>
+<tr><th width=50%>Method</th><th>Description</th><th>Parms</th></tr>
+<tr><td>virtual xbInt16 GetField(xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw ) const</td><td>Get string field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>sFieldValue</em> Output string<br>
+ <em>iRecBufSw</em> Record buffer to pull data from.<br>
+ <li>0 - current buffer
+ <li>1 - original buffer
+</td></tr>
+
+<tr><td>virtual xbInt16 GetField(xbInt16 iFieldNo, xbString &sFieldValue) const</td><td>Get string field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>sFieldValue</em> Output string</td></tr>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetField(const xbString &sFieldName, xbString &sFieldValue) const</td><td>Get string field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>sFieldValue</em> Output string</td></tr>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &iFieldDecimal ) const</td><td>Get decimal field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>iFieldDecimal</em> Output - Number of decimals defined for field
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldDecimal( const xbString &sFieldName, xbInt16 &iFieldDecimal ) const</td><td>Get decimal field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>iFieldDecimal</em> Output - Number of decimals defined for field
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &iFieldLen ) const</td><td>Get field length.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>iFieldLen</em> Output - Field length of field
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldLen( const xbString &sFieldName, xbInt16 &iFieldLen ) const</td><td>Get field length.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>iFieldLen</em> Output - Field length of field
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldName( xbInt16 iFieldNo, xbString &sFieldName ) const</td><td>Get field name.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>sFieldName</em> Output - Field name<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldNo( const xbString &sFieldName, xbInt16 &iFieldNo ) const</td><td>Get field number.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>iFieldNo</em> Output - Field number<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldNo( const xbString &sFieldName ) const</td><td>Returns a field number for a given field name.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 GetFieldType( xbInt16 iFieldNo, char &cFieldType ) const</td><td>Get field type.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>cFieldType</em> Output - Field type
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFieldType( const xbString &sFieldName, char &cFieldType ) const</td><td>Get field type.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>cFieldType</em> Output - Field type
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutField( const xbString &sFieldName, const xbString &sFieldData )</td><td>Put string field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>sFieldData</em> Input - Update value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutField( xbInt16 iFieldNo, const xbString &sFieldData )</td><td>Put string field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>sFieldData</em> Input - Update value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLogicalField( xbInt16 iFieldNo, const xbString &sFieldData )</td><td>Put logicial field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>sFieldData</em> Input - Update value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLogicalField( const xbString &sFieldName, const xbString &sFieldData )</td><td>Put logical field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>sFieldData</em> Input - Update value<br></td></tr>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbString &sFieldData ) const</td><td>Get logical field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>sFieldData</em> Output - String name to put result<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( const xbString &sFieldName, xbString &sFieldData) const</td><td>Get logical field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>sFieldData</em> Output - String name to put result<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLogicalField( xbInt16 iFieldNo, xbBool bFieldData )</td><td>Put logical field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLogicalField( const xbString &sFieldName, xbBool bFieldData )</td><td>Put logical field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldData ) const</td><td>Get logical field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldData, xbInt16 iRecBufSw ) const</td><td>Get logical field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ <em>iRecBufSw</em> Record buffer to pull data from.<br>
+ <li>0 - current buffer
+ <li>1 - original buffer, before any updates
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLogicalField( const xbString &sFieldName, xbBool &bFieldData) const</td><td>Get logical field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>bFieldData</em> Output - Bool value<br>
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &lFieldValue ) const</td><td>Get long field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ </em>lFieldValue<em> Output - xbInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetLongField( const xbString &sFieldName, xbInt32 &lFieldValue ) const</td><td>Get long field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ </em>lFieldValue<em> Output - xbInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue )</td><td>Put long field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>lFieldValue<em> Output - xbInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutLongField( const xbString &sFieldName, xbInt32 lFieldValue )</td><td>Put long field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>lFieldValue<em> Output - xbInt32 update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &lFieldValue ) const</td><td>Get unsigned long field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>ulFieldValue<em> Output - xbUInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetULongField( const xbString &sFieldName, xbUInt32 &lFieldValue ) const</td><td>Get unsigned long field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>ylFieldValue<em> Output - xbUInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue )</td><td>Put unsigned long field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>lFieldValue<em> Output - xbInt32 update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutULongField( const xbString &sFieldNo, xbUInt32 lFieldValue )</td><td>Put unsigned long field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>lFieldValue<em> Output - xbUInt32 update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDoubleField( xbInt16 FieldNo, xbDouble &dFieldValue ) const</td><td>Get double field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>dFieldValue<em> Output - xbDouble field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDoubleField( xbInt16 FieldNo, xbDouble &dFieldValue, xbInt16 iRecBufSw ) const</td><td>Get double field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>dFieldValue<em> Output - xbDouble field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDoubleField( const xbString &sFieldName, xbDouble &dFieldValue ) const</td><td>Get double field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>dFieldValue<em> Output - xbDouble field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutDoubleField( xbInt16 FieldNo, xbDouble dFieldValue )</td><td>Put double field.</td>
+ <td>
+ <em>sFieldNo</em> Input - Field number to update<br>
+ <em>dFieldValue<em> Output - xbDouble update value
+ </td>
+</tr>
+
+
+<tr><td>virtual xbInt16 PutDoubleField( const xbString &FieldName, xbDouble dFieldValue )</td><td>Put double field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>dFieldValue<em> Output - xbDouble update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFloatField( xbInt16 iFieldNo, xbFloat &fFieldValue ) const</td><td>Get float field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>fFieldValue<em> Output - xbFloat field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetFloatField( const xbString &sFieldName, xbFloat &fFieldValue ) const</td><td>Get float field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>fFieldValue<em> Output - xbFloat field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutFloatField( xbInt16 iFieldNo, xbFloat fFieldValue )</td><td>Put float field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field number to update<br>
+ <em>fFieldValue<em> Output - xbFloat update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutFloatField( const xbString &sFieldName, xbFloat fFieldValue )</td><td>Put float field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>fFieldValue<em> Output - xbFloat update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDateField( xbInt16 iFieldNo, xbDate &dt ) const</td><td>Get date field.</td>
+ <td>
+ <em>iFieldNo</em> Input - Field number to retrieve<br>
+ <em>dt<em> Output - xbDate field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetDateField( const xbString &sFieldName, xbDate &dt ) const</td><td>Get date field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to retrieve<br>
+ <em>dt<em> Output - xbDate field to put result
+ </td
+</tr>
+
+<tr><td>virtual xbInt16 PutDateField( xbInt16 iFieldNo, const xbDate &dt )</td><td>Put date field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field number to update<br>
+ <em>dt</em> Output - xbDate update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 PutDateField( const xbString &sFieldName, const xbDate &dt )</td><td>Put date field.</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to update<br>
+ <em>dt</em> Output - xbDate update value
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull ) const<br>
+ virtual xbInt16 GetNullSts( const xbString &sFieldName, xbBool &bIsNull ) const<br>
+ virtual xbInt16 GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull, xbInt16 iRecBufSw ) const</td>
+ <td>Get Field Null Status</td>
+ <td>
+ <em>sFieldName</em> Input - Field name to check<br>
+ <em>iFieldNo</em> Input - Field no to check<br>
+ <em>bIsNull</em> Output - True if the field is null (all spaces).<br>
+ <em>iRecBufSw</em> Record buffer to pull data from.<br>
+ <li>0 - current buffer
+ <li>1 - original buffer
+ </td>
+</tr>
+
+</table>
+
+
+
+<br><br><br>
+<h2>Memo File/Field Methods</h2>
+
+<table border=1>
+<tr><th>Method</th><th>Description</th><th>Parms</th></tr>
+<tr><td>virtual xbInt16 GetMemoFieldCnt() const</td><td>Returns number of memo fields in the table.</td></tr>
+<tr><td>virtual xbMemo *GetMemoPtr()</td><td>Returns a pointer to the associated memo file instance.</td></tr>
+<tr><td>virtual xbUInt32 GetCreateMemoBlockSize() const</td><td>Returns the block size a new memo file will be created with. Block sizes are in 512 byte increments.</td></tr>
+<tr><td>virtual xbInt16 GetMemoField( xbInt16 iFldNo, xbString &sMemoData )</td><td>Get memo field data.</td>
+ <td>
+ <em>iFldNo</em> Input - Memo field number to retrieve<br>
+ <em>sMemoData</em> Output - xbString field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetMemoField( const xbString & sFldName, xbString &sMemoData )</td><td>Get memo field data.</td>
+ <td>
+ <em>iFldName</em> Input - Memo field name to retrieve<br>
+ <em>sMemoData</em> Output - xbString field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetMemoFieldLen( xbInt16 iFldNo, xbUInt32 &ulMemoFieldLen )</td><td>Get memo field length.</td>
+ <td>
+ <em>iFldNo</em> Input - Memo field number to retrieve<br>
+ <em>ulMemoFieldLen</em> Output - xbUInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 GetMemoFieldLen( const xbString & sFldName, xbUInt32 &ulMemoFieldLen )</td><td>Get memo field length.</td>
+ <td>
+ <em>iFldName</em> Input - Memo field name to retrieve<br>
+ <em>ulMemoFieldLen</em> Output - xbUInt32 field to put result
+ </td>
+</tr>
+
+<tr><td>virtual xbBool MemoFieldExists( xbInt16 iFieldNo ) const</td><td>Returns xbTrue if memo field exists, else returns xbFalse.</td>
+ <td>
+ <em>iFieldNo</em> Input - field number
+ </td>
+</tr>
+
+<tr><td>virtual xbBool MemoFieldExists( const xbString &sFieldName ) const</td><td>Returns xbTrue if memo field exists, else returns xbFalse.</td>
+ <td>
+ <em>sFieldName</em> Input - field name
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0</td><td>Set the block size for the memo file. Must be called before memo file is created.</td>
+ <td>
+ <em>ulBlockSize</em> Input - New block size in 512 byte increments
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 UpdateMemoField( xbInt16 iFldNo, const xbString &sMemoData )</td><td>Update memo field.</td>
+ <td>
+ <em>iFldNo</em> Input - Memo field number to update<br>
+ <em>sMemoData</em> Input - Memo data to update
+ </td>
+</tr>
+
+<tr><td>virtual xbInt16 UpdateMemoField( const xbString & sFldName, const xbString &sMemoData )</td><td>Update memo field.</td>
+ <td>
+ <em>iFldName</em> Input - Memo field name to update<br>
+ <em>sMemoData</em> Input - Memo data to update
+ </td>
+</tr>
+</table>
+
+
+
+
+<br><br><br>
+<h2>Lock Methods</h2>
+<table border=1>
+<tr><td colspan=3>
+
+If auto locking is turned on (default setting), xbase64 handles locking automatically.<br>
+If auto locking is turned off and application is running in a multi user environment, then
+locking functions will need to be handled by the application program.
+</td></tr>
+
+<tr><th>Method</th><th>Description</th><th>Parms</th></tr>
+<tr><td>virtual xbInt16 LockTable( xbInt16 iLockFunction )</td><td>Lock the table.</td>
+ <td>
+ <em>LockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>virtual xbInt16 LockRecord( xbInt16 iLockFunction, xbUInt32 ulRecNo )</td><td>Lock record.</td>
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK <br>
+ <li>XB_UNLOCK<br>
+ <em>ulRecNo</em> - Record number to lock or unlock
+ </td>
+</tr>
+<tr><td>virtual xbInt16 LockAppend( xbInt16 iLockFunction )</td><td>Lock append bytes for adding new record.</td>
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>virtual xbInt16 LockHeader( xbInt16 iLockFunction )</td><td>Lock table header bytes for updating table.</td>
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>virtual xbInt16 LockMemo( xbInt16 iLockFunction )</td><td>Lock memo table for update.
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>virtual xbBool GetMemoLocked() const</td><td>Returns the memo lock status.</td></tr>
+
+<tr><td>virtual xbInt16 LockIndices( xbInt16 iLockFunction )</td><td>Lock indices for update.</td>
+ <td>
+ <em>iLockFunction</em><br>
+ <li>XB_LOCK<br>
+ <li>XB_UNLOCK
+ </td>
+</tr>
+<tr><td>xbInt16 GetAutoLock() const</td><td>Retrieve current auto lock status.</td></tr>
+
+<tr><td>void SetAutoLock( xbInt16 iAutoLock )</td><td>Set autolock status for table</td>
+ <td>
+ <em>iAutoLock</em><br>
+ <li>1 - Use auto lock for this table.<br>
+ <li>0 - Don't use auto lock for this table.<br>
+ <li>-1 - (minus one) Use system default.
+ </td>
+</tr>
+
+<tr><td>xbInt16 GetLockFlavor() const</td><td>Always returns 1. Included for potential future alternative locking schemes.</td></tr>
+<tr><td>void SetLockFlavor( xbInt16 iLockFlavor )</td><td>For future use. Included for potential future alternative locking schemes.</td></tr>
+<tr><td>xbBool GetTableLocked() const</td><td>Returns Table Locked status.</td></tr>
+<tr><td>xbBool GetHeaderLocked() const</td><td>Returns Header Locked Status.</td></tr>
+<tr><td>xbUInt32 GetAppendLocked() const</td><td>Returns Append Bytes locked status.</td></tr>
+<tr><td>xbLinkListNode<xbUInt32> * GetFirstRecLock() const</td><td>Returns pointer to linked list of record locks.</td></tr>
+<tr><td>void DumpTableLockStatus() const</td><td>Dumps all lock information for debugging purposes.</td></tr>
+</table>
+
+
+
+<br><br><br>
+<h2>Index Methods</h2>
+<table border=1>
+<tr><th width=35%>Method</th><th width=35%>Description</th><th>Parms</th></tr>
+<tr><td> virtual xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt )</td><td>For debugging, check tag integrity.</td>
+ <td>
+ <em>iTagOpt</em><br>
+ <li>0 - Check current tag<br>
+ <li>1 - Check all tags<br>
+ <em>iOutputOpt</em><br>
+ <li>0 = stdout<br>
+ <li>1 = Syslog<br>
+ <li>2 = Both
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 CloseIndexFile( xbIx *pIx )</td><td>Close an index file.</td>
+ <td>
+ <em>pIx</em> Pointer to index file instance.
+</tr>
+
+<tr><td> virtual xbInt16 CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut )</td>
+ <td>Create index tag</td>
+ <td>
+ <em>sIxType</em> Input - MDX or NDX<br>
+ <em>sName</em> Input - Tag Name<br>
+ <em>sKey</em> Input - Key Expression<br>
+ <em>sFilter</em> Input - Filter Expression (MDX only)<br>
+ <em>iDescending</em> Input - xbTrue for descending, xbFalse ascending<br>
+ <em>iUnique</em> Input - xbTrue for unique, xbFalse not unique<br>
+ <em>iOverlay</em> Input - xbTrue to overlay if existing file exists<br>
+ <em>**xbIxOut</em> Output - Pointer to ix instance<br>
+ <em>**vpTagOut</em> Output - Pointer to tag
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 DeleteTag( const xbString &sIxType, const xbString &sName )</td><td>Delete a tag.</td>
+ <td>
+ <em>sIxType</em> Input - MDX or NDX<br>
+ <em>sName</em> Input - Tag Name<br>
+ <em>sKey</em> Input - Key Expression
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 DeleteAllIndexFiles()</td><td>Delete all indices for table.</td></tr>
+
+<tr><td> virtual xbInt16 Find( xbString &sKey )</td><td>Find xbString key for current tag (assumes character index).</td>
+ <td>
+ <em>sKey</em> - String search key
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 Find( xbDate &dtKey )</td><td>Find xbDate key for current tag(assumes date index).</td>
+ <td>
+ <em>dtKey</em> - Date search key
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 Find( xbDouble &dKey )</td><td>Find numeric key for current tag (assumes numeric index).</td>
+ <td>
+ <em>dKey</em> - Nueric search key
+ </td>
+</tr>
+
+<tr><td> virtual xbIx *GetCurIx() const</td><td>Returns pointer to current index file.</td></tr>
+<tr><td> virtual void *GetCurTag() const</td><td>Returns pointer to current tag.</td></tr>
+<tr><td> virtual xbInt16 GetFirstKey()</td><td>Get the first key for the current tag, reposition current record.</td></tr>
+<tr><td> virtual xbInt16 GetNextKey()</td><td>Get the next key for the current tag, reposition current record.</td></tr>
+<tr><td> virtual xbInt16 GetPrevKey()</td><td>Get the previous key for the current tag, reposition current record.</td></tr>
+<tr><td> virtual xbInt16 GetLastKey()</td><td>Get the last key for the current tag, reposition current record.</td></tr>
+<tr><td> virtual const xbString &GetCurIxType() const</td><td>Returns the current index type.</td></tr>
+<tr><td> virtual const xbString &GetCurTagName() const</td><td>Returns the current tag name.</td></tr>
+<tr><td> virtual xbIxList *GetIxList() const</td><td>Returns a pointer to list of open indices.</td></tr>
+<tr><td> virtual xbInt32 GetPhysicalIxCnt () const</td><td>Returns the count of open index files for the table.</td></tr>
+<tr><td> xbLinkListNode<xbTag *> *GetTagList () const</td><td>Returns a pointer to a list of tags for the table.</td></tr>
+<tr><td> virtual xbInt16 OpenIndex( const xbString &sIxType, const xbString &sIndexName )</td>
+ <td>Open the index.<br>MDX index files are opened automatically.<br>NDX index files can be opened automatically.</td>
+ <td>
+ <em>sIxType</em><br>
+ <li>NDX<br>
+ <li>MDX<br>
+ <em>sIndexName</em> - index file name
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 Reindex( xbInt16 iTagOpt )</td><td>Reindex</td>
+ <td>
+ <em>iTagOpt</em><br>
+ <li>0 - Reindex current tag<br>
+ <li>1 - Reindex all tags
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 SetCurTag( const xbString &sTagName )</td><td>Set current tag.</td>
+ <td>
+ <em>sTagName</em> Tag name
+ </td>
+</tr>
+
+<tr><td> virtual void SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag )</td><td>Set current tag.</td>
+ <td>
+ <em>sIxType</em><br>
+ <li>NDX<br>
+ <li>MDX<br>
+ <em>pIx</em> - Pointer to index object<br>
+ <em>vpTag</em> - Pointer to tag object
+ </td>
+</tr>
+
+<tr><td> virtual xbInt16 AssociateIndex( const xbString &sType, const xbString &sName, xbInt16 iOption )</td>
+ <td>Use this method to add an NDX index file name to an INF file.<br>
+ When a DBF file is opened, Xbase64 automatically opens NDX index files that are included in the appropriate INF file.
+ This is also used for ODBC compatibility with other xbase type tools.
+ </td>
+ <td>
+ <em>sIxType</em> Currently only NDX.<br> Future versions can support additional non prod index types.<br>
+ <em>sIxName</em> The index name.<br>
+ <em>iOpt</em><br>
+ <li>0 - Add index to .INF if not already there<br>
+ <li>1 - Remove index from .INF if it exists
+ </td>
+</tr>
+
+<tr><td> xbLinkListNode<xbString> *GetInfList() const</td><td>Returns list of INF file entries.</td></tr>
+</table>
+
+<br><br><br>
+<h2>Block Read Methods</h2>
+<table border=1>
+<tr><th>Method</th><th>Description</th></tr>
+<tr><td>xbInt16 DisableBlockReadProcessing()</td><td>Disable block read processing for table.
+<tr><td>xbInt16 EnableBlockReadProcessing()</td>
+ <td>Enable block read processing for table.<br>
+ This significantly speeds up processing speed if reading from the file sequentially.<br>
+ For random access, better performance will be achieved with block reading turned off.
+ </td>
+</tr>
+<tr><td>xbBool GetBlockReadStatus() const</td><td>Get block read status.</td></tr>
+</table>
+
+</center>
+
+
+
+<br><br>
<hr>
+<p><img src="xbase.jpg"><br><hr>
</BODY>
</HTML>
diff --git a/docs/html/xbc11.html b/docs/html/xbc11.html
index 4230f3f..315ccc5 100755
--- a/docs/html/xbc11.html
+++ b/docs/html/xbc11.html
@@ -1,12 +1,146 @@
<!DOCTYPE HTML PUBLIC>
<HTML>
-<TITLE>Xbase DBMS Chapter 10</TITLE>
+<TITLE>Xbase DBMS Chapter 11</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">CDX Indices</p></H2>
-<p align="center">Chapter Updated 11/28/22</p><hr>
+<H2><p align="center">Logging</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
-<h3>Pending IDX index module development.</h3>
+<br><br>
+The objective of this chapter is to provide information regarding the logging funcitionality contained within the Xbase64 library.
+<br><br>
+When the Xbase64 generates an error, it writes an entry in the logfile if logging is enabled.
+The library generates an error mesage with an error code value and an error stop value.
+The error code identifies what the error is, the error stop identifies where it errored in the libary.
+
+<br><br>
+The xbLog class supports the following functionality:<br><br>
+<li>Error and message logging.
+<li>Rolling log files. When log file fills, full file is closed and new file is opened.
+<li>Configurable size.
+<li>Configurable name.
+<li>Configurable location.
+<br><br><br>
+
+
+<h3>Default Logfile Settings:</h3>
+<table border=1>
+<tr><th>Setting</th><th>Default Value</th><th>Initialization Source</th></tr>
+<tr><td>Folder:</td><td>#define PROJECT_LOG_DIR</td><td>CMakelists.txt</td></tr>
+<tr><td>Name:</td><td>#define PROJECT_DFLT_LOGFILE</td><td>xbconfig.h.in</td></tr>
+<tr><td>Size:</td><td>100000</td><td>xbLog::xbLog()</td></tr>
+</table>
+
+<br><br>
+<br><br>
+
+The logfile is controlled by the main xbXBase class via the methods listed in the table below.
+To change the logfile location or name or size, use the DisableMsgLogging() and EnableMessageLogging()
+to get the updates to take effect.
+
+<br><br>
+
+
+<h3>Methods for managing the logfile</h3>
+<table border=1>
+<tr><th>Method</th><th>Description</th></tr>
+<tr><td>xbString& xbSsv::GetLogDirectory() const</td><td>Get the log file directory.</td><tr>
+<tr><td>xbString& xbSsv::GetLogFileName() const</td><td>Get the log file name.</td></tr>
+<tr><td>xbString& xbSsv::SetLogDirectory( const xbString &sLogDirectory )</td><td>Set the log file directory.</td><tr>
+<tr><td>void xbSsv::SetLogFileName( const xbString &sLogFileName )</td><td>Set the log file name.</td></tr>
+<tr><td>void xbXBase::DisableMsgLogging()</td><td>Disable message logging.</td></tr>
+<tr><td>void xbXBase::EnableMsgLogging()</td><td>Enable message logging.</td></tr>
+<tr><td>xbInt16 xbXBase::FlushLog()</td><td>Flush any buffered log file messages to disk.</td></tr>
+<tr><td>const xbXBase::xbString &GetLogFqFileName() const</td><td>Get fully qualified logfile name.</td></tr>
+<tr><td>size_t xbXBase::GetLogSize() const</td><td>Get the log file roll over size.</td></tr>
+<tr><td>xbBool xbXBase::GetLogStatus() const</td><td>Get the logging file status.</td></tr>
+<tr><td>void xbXBase::SetLogSize( size_t lSize )</td><td>Set the logfile roll over size.</td></tr>
+</table>
+
+
+<br><br>
+<h3>Example program demonstrating logfile related methods.</h3>
+
+<xmp>
+/* xb_ex_log.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program demostrates how to use logging
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main( int argCnt, char **av )
+{
+
+ #ifdef XB_LOGGING_SUPPORT
+
+ xbXBase x;
+ xbString sMsg;
+
+
+ std::cout << "Default Logfile Name is: [" << x.GetLogFqFileName().Str()
+ << "] Rollover size = [" << x.GetLogSize()
+ << "]" << std::endl;
+
+ if( x.GetLogStatus() )
+ std::cout << "Logging is active" << std::endl;
+ else
+ std::cout << "Logging is inactive" << std::endl;
+
+ x.SetLogDirectory( PROJECT_LOG_DIR ); // use the library log directory
+ x.SetLogFileName ( "MySpecialLogFile.txt" ); // set to use a special name
+ x.SetLogSize ( x.GetLogSize() * 2 ); // double the log file size
+
+ // enable the logfile and write a message for the new settings to take effect
+ x.EnableMsgLogging();
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+
+ std::cout << "New Logfile Name is: [" << x.GetLogFqFileName().Str()
+ << "] Rollover size = [" << x.GetLogSize()
+ << "]" << std::endl;
+
+ if( x.GetLogStatus() )
+ std::cout << "Logging is active" << std::endl;
+ else
+ std::cout << "Logging is inactive" << std::endl;
+
+ // write some messages to the logfile
+ for( int i = 0; i < 5; i++ ){
+ sMsg.Sprintf( "Test message [%d]", i );
+ x.WriteLogMessage( sMsg );
+ }
+
+ sMsg.Sprintf( "Program [%s] terminating..", av[0] );
+ x.WriteLogMessage( sMsg );
+
+ x.FlushLog(); // not really needed, but here for demonstration purposes
+
+ #endif // B_LOGGING_SUPPORT
+
+ return 0;
+}
+
+</xmp>
+
+
+<br><br>
<hr>
+<p><img src="xbase.jpg"><br><hr>
</BODY>
</HTML>
diff --git a/docs/html/xbc12.html b/docs/html/xbc12.html
index a40c7e0..29d6dc1 100755
--- a/docs/html/xbc12.html
+++ b/docs/html/xbc12.html
@@ -2,85 +2,278 @@
<HTML>
<TITLE>Xbase DBMS Chapter 12</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Record and File Locking</p></H1>
-<p align="center">Chapter Updated 12/13/22</p><hr>
+<H2><p align="center">Dates</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
-<h3>Locking Overview</h3>
+<br><br>
-Xbase64 supports multi-user processing through file and record locks.
-Record locking restricts multiple cooperating programs from simultaneously
-accessing the same data and corrupting it. Without record and file locking
-in a multi-user environment, simultaneous access to the data and index files
-can cause the files to become inaccurate and unusable.<br><br>
+<h3>Class xbDate methods</h3>
+<table border=1>
+<tr><th>Method</th><th>Description</th></tr>
-Automatic record locking is on by default in the Xbase64 library. To disable it,
-use method xbXBase::DisableDefaultAutoLock() and to enable it, use method xbXBase::EnableDefaultAutoLock().
-<br><br>
-Locking can also be enabled / disabled at the table level with with xbDbf::SetAutoLock().<br><br>
-If autolocking is disabled and the code base is being used in a multi user environment, it is
-up to the application program to verify the needed locks are set as there is no checking or
-setting any locks if autolocking is turned off. It is only safe to turn off the autolocking functionality
-if the library is being used in a single user environment.
-<br><br>
-The current Xbase64 record locking logic is modeled after DBase (tm) V7 locking.
-<br><br>
+<tr><td>xbDate()<br>xbDate( const char * Date8 )<br>xbDate( const xbString &Date8 )<br>xbDate( xbInt32 lJulDate )</td><td>xbDate constructor.</td></tr>
+<tr><td>xbDate( xbUInt16 iInit )</td><td>Special xbDate constructor, called to initialize static variables and/or set to Sysdate</td></tr>
-The locking methods return either XB_LOCK_FAILED or XB_NO_ERROR. If they return
-XB_LOCK_FAILED the actual reason can be found in the global variable
-<em>errno</em> or function <em>perror()</em> can be executed to view the
-results.
-<br><br>
+<tr><td>void operator=( const xbDate &d )</td><td>Set a date equal to another date.</td></tr>
+<tr><td>void operator+=( xbInt32 i )</td><td>Increment a date.</td><tr>
+<tr><td>void operator-=( xbInt32 i )</td><td>Decrement a date.</td><tr>
+<tr><td>void operator++( xbInt32 i )</td><td>Increment a date.</td><tr>
+<tr><td>void operator--( xbInt32 i )</td><td>Decrement a date.</td><tr>
-The errno field may contain one of the following values if the lock was not
-successful.<br><br>
-<TABLE BORDER>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Error Code<TD>Description
-<TR><TH ALIGN="LEFT">EBADF<TD>Invalid file descriptor
-<TR><TH ALIGN="LEFT">EINVAL<TD>Invalid lock information or file does not support locks
-<TR><TH ALIGN="LEFT">EACCESS<BR>EAGAIN<TD>Lock can not be set because it is blocked by an existing lock on the file.
-<TR><TH ALIGN="LEFT">ENOLCK<TD>The system is out of lock resources, too many file locks in place.
-<TR><TH ALIGN="LEFT">EDEADLK<TD>Deadlock condition
-<TR><TH ALIGN="LEFT">EINTR<TD>Process was interrupted by a signal while it was waiting
-</TABLE>
-<br><br>
+<tr><td>xbInt32 operator-( const xbDate & ) const</td><td>Determine the number of days between two dates.</td><tr>
+<tr><td>const char * operator-( xbInt32 i )</td><td>Subtract <em>i</em> days from a date.</td><tr>
+<tr><td>const char * operator+( xbInt32 i )</td><td>Add <em>i</em> days to a date.</td><tr>
-<h3>Linux/Windows File Locking Compatibility Issue</h3>
+<tr><td>xbBool operator==( const xbDate & ) const</td><td>Compare for equal dates.</td><tr>
+<tr><td>xbBool operator!=( const xbDate & ) const</td><td>Compare for not equal dates.</td><tr>
+<tr><td>xbBool operator< ( const xbDate & ) const</td><td>Compare for less than date.</td><tr>
+<tr><td>xbBool operator> ( const xbDate & ) const</td><td>Compare for greater than date.</td><tr>
+<tr><td>xbBool operator<=( const xbDate & ) const</td><td>Compare for less than or euql to date.</td><tr>
+<tr><td>xbBool operator>=( const xbDate & ) const</td><td>Compare for greater than or equal to date.</td><tr>
-There is a compatibility locking issue to be aware of. Windows environments allow for the exclusive
-opening of file handles and Linux/Unix platforms do not. If you are writing an application that will be
-using a tool like Dbase on a Windows machine, accessing a file on a Linux/Samba configure machine,
-be aware that the file could be opened in exclusive mode by DBase on the Windows system, and the same file could
-be simultaneously opened with a program on the Unix box. That could cause some issues.
-<br><br>
-In Unix, a program can not lock a file so another process can not access it.<br>
-In Windows, a program can lock a file so another process can not access it.<br>
-DBase(tm) supports routines to open files exclusively, preventing other users from opening a file.<br>
-Locking on the Mac/Apple platform only works on NFS shares. It does not work with SMB shares.
+<tr><td>xbInt16 CalcRollingCenturyForYear( xbInt16 year ) const</td><td>Calculate century for a give 2 digit year. Uses 80/20 method.</td><tr>
+<tr><td>xbInt16 CenturyOf() const</td><td>Return century of the date.</td><tr>
+<tr><td>xbInt16 CharDayOf( xbString &sOutCharDay )</td><td>Retrieve the character day.</td><tr>
+<tr><td>xbInt16 CharMonthOf( xbString &sOutCharMonth )</td><td>Retrive the character month.</td><tr>
+<tr><td>xbBool DateIsValid ( const xbString &sDate8 ) const;</td><td>Check if a given date is valid.</td><tr>
+<tr><td>xbInt16 DayOf( xbInt16 iFormat ) const</td><td>Return Day of week, month or year depending on the option.</td><tr>
+<tr><td>xbInt16 CTOD( const xbString &sCtodInDate )</td><td>Sets the date from input date in format MM/DD/YY</td><tr>
+<tr><td>xbInt16 FormatDate( const xbString &sFmtIn, xbString &sFmtOut )</td><td>Create a formatted date string based on input format.</td><tr>
+<tr><td>const char *Str() const</td><td>Return a pointer the date value.</td><tr>
+<tr><td>xbBool IsLeapYear( xbInt16 iYear ) const<br>IsLeapYear() const</td><td>Returns true if leap year, otherwise returns false.</td><tr>
+<tr><td>xbBool IsNull() const</td><td>Returns xbTrue is the date is null, else returns false.</td><tr>
+<tr><td>xbInt32 JulianDays() const</td><td>Return the Julian days value.</td><tr>
+<tr><td>xbInt16 JulToDate8( xbInt32 lJulDate )</td><td>Convert a Julian date to xbDate value.</td><tr>
+<tr><td>xbInt16 LastDayOfMonth()</td><td>Calculate the last day of a month for the given teat and month.</td><tr>
+<tr><td>xbInt16 MonthOf() const</td><td>Return the numeric month of the date.</td><tr>
+<tr><td>xbInt16 Set( const xbString &Date8 )</td><td>Set the date to valid input date.</td><tr>
+<tr><td>xbInt16 Sysdate()</td><td>Set the date to the system date.</td><tr>
+<tr><td>xbInt16 YearOf() const</td><td>Return the numeric year of the date.</td><tr>
+
+</table>
+
+<br><br><hr><br><br>
+<h2>Example program using xbDate class</h2>
+
+<xmp>
+/* xb_ex_date.cpp
+
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This program demonstrates using the xbDate class
+
+*/
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main()
+{
+
+ xbXBase x; /* initial date static variables */
+
+ xbString StringDate( "19601007" ); /* oct 7 1960 */
+ char CharDate[9] = "19611109"; /* nov 9 1961 */
+
+ xbDate d1; /* today is default */
+ xbDate d2( StringDate ); /* from string data */
+ xbDate d3( CharDate ); /* from char data */
+ xbDate d4; /* another date class */
+ xbString s;
+
+ std::cout << "This program demonstrates usage of the xbDate class" << std::endl;
+ std::cout << "Date 1 (Sysdate) is " << d1.Str() << std::endl;
+ std::cout << "Date 2 (StringDate) is " << d2.Str() << std::endl;
+ std::cout << "Date 3 (CharDate) is " << d3.Str() << std::endl;
+
+ std::cout << "This year is " << d1.YearOf() << std::endl;
+ std::cout << "Year of xbString Date is " << d2.YearOf()
+ << std::endl;
+ std::cout << "Year of char Date is " << d3.YearOf()
+ << std::endl;
+
+ std::cout << "This Month is " << d1.MonthOf() << std::endl;
+ std::cout << "Month of xbString Date is " << d2.MonthOf()
+ << std::endl;
+ std::cout << "Month of char Date is " << d3.MonthOf()
+ << std::endl;
+
+ std::cout << "Today is day " << d1.DayOf( XB_FMT_WEEK ) << " of the week" << std::endl;
+ std::cout << "StringDate is day " << d2.DayOf( XB_FMT_MONTH ) << " of the month" << std::endl;
+ std::cout << "CharDate is day " << d3.DayOf( XB_FMT_YEAR ) << " of the year" << std::endl;
-<br><h3>Samba settings</h3>
+ if( d1.IsLeapYear())
+ std::cout << "This is a leap year" << std::endl;
+ else
+ std::cout << "This is not a leap year." << std::endl;
-If you will be using Samba on Linux/Unix and sharing files between Linux and Windows machines,
-you will need to disable oplocks. In the smb.conf file, set:<br>
-<br>
-[sharename]<br>
-oplocks = False<br>
-level2 oplocks = False
+ if( d2.IsLeapYear())
+ std::cout << "StringDate is a leap year" << std::endl;
+ else
+ std::cout << "StringDate is not a leap year." << std::endl;
+ if( d3.IsLeapYear())
+ std::cout << "CharDate is a leap year" << std::endl;
+ else
+ std::cout << "CharDate is not a leap year." << std::endl;
-<br><h3>iLockFlavor</h3>
+ std::cout << "Today is " << d1.Sysdate() << std::endl;
-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.
+ if( d1.DateIsValid( "19951301" ))
+ std::cout << "19951301 is a valid date" << std::endl;
+ else
+ std::cout << "19951301 is not a valid date" << std::endl;
+ if( d1.DateIsValid( "19920229" ))
+ std::cout << "19920229 is a valid date" << std::endl;
+ else
+ std::cout << "19920229 is not a valid date" << std::endl;
+ if( d2.DateIsValid( StringDate ))
+ std::cout << StringDate.Str() << " is a valid date" << std::endl;
+ else
+ std::cout << StringDate.Str() << " is not a valid date" << std::endl;
+ std::cout << "Today's Julian date " << d1.JulianDays() << std::endl;
+ std::cout << "Julian date of Jan 01, 1970 " << d2.JulianDays() << std::endl;
+ std::cout << "StringDate Julian date " << d2.JulianDays() << std::endl;
-<br><br><br>
-<hr><br>
+ std::cout << "There are " << (d1.JulianDays() - d2.JulianDays()) << " days between " << d1.Str() << " and " << d2.Str() << std::endl;
+
+ std::cout << "Todays Julian date (Number of days since Jan 1 0100):" << d1.JulianDays() << std::endl;
+
+ d4 = d1; // set d4 class = to sysdate
+ std::cout << "Object d4 initialized to " << d4.Str() << std::endl;
+ std::cout << "This should be todays date: "
+ << d4.JulToDate8(d4.JulianDays()) << std::endl;
+ std::cout << "In 7 days it will be "
+ << d4.JulToDate8(d4.JulianDays() + 7L ) << std::endl;
+
+ d1.CharDayOf( s );
+ std::cout << "Today is " << s.Str() << std::endl;
+
+ d2.CharDayOf( s );
+ std::cout << "StringDate day is " << s.Str() << std::endl;
+ d1.CharMonthOf( s );
+ std::cout << "This month is " << s.Str() << std::endl;
+ d2.CharMonthOf( s );
+ std::cout << "StringDate month is " << s.Str() << std::endl;
+
+
+ /* various format routines using different formats, strings and chars */
+ xbString sOutDate;
+
+ d1.FormatDate( "YYDDD", sOutDate );
+ std::cout << "Format (YYDDD) = " << sOutDate.Str() << std::endl;
+
+ d1.FormatDate( "MM/DD/YY", sOutDate );
+ std::cout << "Format (MM/DD/YY) = " << sOutDate.Str() << std::endl;
+
+ d1.FormatDate( "YY-MM-DD", sOutDate );
+ std::cout << "Format (YY-MM-DD) = " << sOutDate.Str() << std::endl;
+
+ d1.FormatDate( "DDDDDDDDD, MMMMMMMMMM DD YYYY", sOutDate );
+ std::cout << "Format (DDDDDDDDD, MMMMMMMMMM DD YYYY) = " << sOutDate.Str() << std::endl;
+
+ std::cout << "Last day this month " << d1.LastDayOfMonth() << std::endl;
+ std::cout << "Last day of month for StringDate is " << d2.LastDayOfMonth() << std::endl;
+
+ std::cout << "Overloaded operators test..." << std::endl;
+
+ if( d1 == d2 )
+ std::cout << d1.Str() << " is equal to " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not equal to " << d2.Str()
+ << std::endl;
+
+ if( d1 != d3 )
+ std::cout << d1.Str() << " is not equal to " << d3.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is equal to " << d3.Str()
+ << std::endl;
+
+ if( d1 < d2 )
+ std::cout << d1.Str() << " is less than " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not less than " << d2.Str()
+ << std::endl;
+
+ if( d1 > d2 )
+ std::cout << d1.Str() << " is greater than " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not greater than " << d2.Str()
+ << std::endl;
+
+ if( d1 <= d2 )
+ std::cout << d1.Str() << " is less than or equal to " << d2.Str()
+ << std::endl;
+ else
+ std::cout << d1.Str() << " is not less than or equal to "
+ << d2.Str() << std::endl;
+
+ if( d1 >= d2 )
+ std::cout << d1.Str() << " is greater than or equal to "
+ << d2.Str() << std::endl;
+ else
+ std::cout << d1.Str() << " is not greater than or equal to "
+ << d2.Str() << std::endl;
+
+ d1.Sysdate();
+ d1++;
+ std::cout << "Tomorrow is " << d1.Str() << std::endl;
+ d1-=2;
+ std::cout << "Yesterday was " << d1.Str() << std::endl;
+ std::cout << "There are " << d1 - d2 << " days between " << d1.Str()
+ << " and " << d2.Str() << std::endl;
+
+ d1="20140701";
+ std::cout << "Operator = example " << d1.Str() << std::endl;
+
+ d1+=5;
+ std::cout << "Operator += 5 example " << d1.Str() << std::endl;
+
+ d1--;
+ std::cout << "Operator -- example " << d1.Str() << std::endl;
+
+ d1-4;
+ std::cout << "Operator -4 example " << d1.Str() << std::endl;
+
+ d1+10;
+ std::cout << "Operator +10 example " << d1.Str() << std::endl;
+ std::cout << "CenturyOf() " << d1.CenturyOf() << std::endl;
+
+ xbString sWorkDate;
+ d1.CTOD( "10/07/60" );
+ std::cout << "CTOD( '10/07/60' ) " << d1.Str() << std::endl;
+
+ d1.Set( "19590118" );
+ std::cout << "Set( '19590118' ) " << d1.Str() << std::endl;
+
+ std::cout << "CalcRollingCenturyForYear( 95 ) = " << d1.CalcRollingCenturyForYear( 95 ) << std::endl;
+ return 0;
+}
+</xmp>
+
+<br><br>
+<hr>
<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
+</body>
+</html>
diff --git a/docs/html/xbc13.html b/docs/html/xbc13.html
deleted file mode 100755
index 9f51a85..0000000
--- a/docs/html/xbc13.html
+++ /dev/null
@@ -1,46 +0,0 @@
-
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 13</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Logfiles</p></H2>
-<p align="center">Chapter Updated 11/29/22</p><hr>
-
-
-<h3>Logging</h3>
-
-The Xbase library includes a logging module that can be turned on or off for auditing purposes.
-
-See example code below for how to use the logging routines.
-
-<hr>
-
-#include "xbase.h"<br>
-using namespace xb;<br>
-<br>
-int main( int argCnt, char **av ){<br>
-
- #ifdef XB_LOGGING_SUPPORT<br>
- xbString sMsg;<br>
- xbString sLogFileName;<br>
- xbXBase x;<br>
- sLogFileName = "/home/xbase/logfiles/LogFile.txt";<br>
- x.SetLogFileName( sLogFileName );<br>
- x.EnableMsgLogging(); <br><br>
-
-
- std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;<br>
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );<br>
- x.WriteLogMessage( sMsg );<br>
- std::cout << "Logging status is " << x.GetLogStatus() << std::endl;<br>
- sMsg = "A logfile message";<br>
- x.WriteLogMessage( sMsg );<br>
- x.DisableMsgLogging();<br>
- #endif /* XB_LOGGING_SUPPORT */<br>
- return 0;<br>
-}<br>
-
-<hr>
-<p><img src="xbase.jpg"><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc14.html b/docs/html/xbc14.html
deleted file mode 100755
index 2c086df..0000000
--- a/docs/html/xbc14.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 14</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">CDX Indices</p></H2>
-<p align="center">Chapter Updated 12/08/22</p><hr>
-
-<h3>SQL Command Status</h3>
-
-Development of SQL support is still underway and very preliminary. As of the 4.0.3 version, the following SQL commands
-are available.<br><br>
-The SQL commands are modeled after industry standard SQL specifications and do what you would expect an SQL command to do.
-<br>
-Use of <em>[brackets]</em> in this chapter identifies optional components of a given command.
-<br><br>
-<hr>
-<h3>ALTER TABLE</h3>
-Expected format:<br>
-ALTER TABLE tablename.DBF RENAME TO newtablename.DBF
-<br><br>
-<hr>
-<h3>CREATE INDEX</h3>
-Expected format to create an Dbase 3, NDX index:<br>
-CREATE INDEX ixname.NDX ON tablename.dbf ( EXPRESSION ) [ASSOCIATE]
-
-<br><br>
-Expected format to create an Dbase 4, tag on an MDX index:<br>
-CREATE [UNIQUE] INDEX tagname ON tablename.DBF ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()]
-
-<br><br>
-The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate non production (NDX) index file to a dbf
-file so it will be automatically opened with the dbf file whenever the dbf file is opened by the xbase64 routines.
-<br><br>
-The [ASSOCIATE] parameter is not used with MDX production indices
-<br><br>
-Xbase first looks for ".NDX" in the file name to determine if an NDX index should be created.
-If .NDX is not in the filename, it looks in the uda for "IXTYPE" for either NDX or MDX to
-detmermine the index type to create. if IXTYPE is not found, it creates an MDX tag.
-<br><br>
-The optional DESC parameter defines an entire index key as descending. This is
-different than other SQL implementations where specific fields can be descending.
-<br><br>
-The optional FILTER parameter is specific to the XBASE64 library, is it used to assign a filter to a tag in an
-MDX style index. Everything to the right of the keyword FILTER is considered part of the filter.
-<br><br>
-The original DBASE indices used to '+' to create an index on more than one field
-<br>ie: FIELD1+FIELD2+FIELD3
-<br><brSQL uses commas: ie: FIELD1, FIELD2, FIELD3
-<br>
-The Xbase library supports either '+' or ',' when creating mutli field indices.
-<br><br>
-<hr>
-
-
-
-<h3>CREATE TABLE</h3>
-Expected format:<br>
-CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... )
-<br><br>
-<table border=1>
-<tr><th>SQL TYPE</th><th>XBASE Field Type</th></tr>
-<tr><td>SMALLINT</td><td>NUMERIC(6,0)</td></tr>
-<tr><td>INTEGER</td><td>NUMERIC(11,0)</td></tr>
-<tr><td>DECIMAL(x,y)</td><td>NUMERIC(x+1,y)</td></tr>
-<tr><td>NUMERIC(x,y)</td><td>NUMERIC(x,y)</td></tr>
-<tr><td>FLOAT(x,y)</td><td>FLOAT(x,y)</td></tr>
-<tr><td>CHAR(n)</td><td>CHARACTER(n)</td></tr>
-<tr><td>DATE</td><td>DATE</td></tr>
-<tr><td>VARCHAR</td><td>MEMO</td></tr>
-<tr><td>LOGICAL</td><td>LOGICAL</td></tr>
-</table>
-<br>
-<hr>
-
-
-<h3>DELETE</h3>
-Expected format:<br>
-DELETE FROM tablename.DBF [WHERE expression]
-<br><br>
-<hr>
-
-
-<h3>DROP INDEX</h3>
-Expected format:<br>
-DROP INDEX [IF EXISTS] ixname.NDX ON tablename.DBF<br>
-DROP INDEX [IF EXISTS] tagname ON tablename.DBF<br>
-<br>
-
-
-<hr>
-<h3>DROP TABLE</h3>
-Expected format:<br>
-DROP TABLE [IF EXISTS] tablename.DBF
-<br>
-<hr>
-<h3>INSERT</h3>
-Expexted format:<br>
-INSERT INTO tablename (field1, field2, field3,...) VALUES ( 'charval', numval, 'what is the correct odbc date format to use? CCYYMMDD');
-<br><br>
-<hr>
-<h3>SET</h3>
-Used to set a variable name<br>
-Expected format:<br>
-SET ATTRIBUTE = DATAVALUE<br>
-SET ATTRIBUTE = ^ (to delete an entry) <br>
-<br>
-<hr><br><br>
-<p><img src=xbase.jpg><br><hr>
-
-</BODY>
-</HTML>
-
-
diff --git a/docs/html/xbc15.html b/docs/html/xbc15.html
deleted file mode 100755
index fde33b8..0000000
--- a/docs/html/xbc15.html
+++ /dev/null
@@ -1,96 +0,0 @@
-
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 15</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Block Read Functionality</p></H2>
-<p align="center">Chapter Updated 2/1/23</p><hr>
-
-
-<h3>Block Reads</h3>
-
-As of release 4.1.1, the Xbase library includes functionality for reading a DBF file in blocks, rather than one record at a time.<br><br>
-
-This functionality can be used to improve application performance in situations where a data file is being read sequentially.
-For situations where records are retrieved randomly from the file, enabling this probably won't help much. In short, this
-can be turned on when accessing a file sequentially and should be left off when not processing sequentially.<br><br>
-
-The logic is all handled internally within the library, all that is needed is to enable it and the library handles the rest.<br><br>
-
-<h3>One Caveat</h3>
-This functionality was originally designed with reporting in mind and doesn't currently have any auto locking associated with it.
-<br><br>
-
-
-<h3>Sample Code</h3>
-See example code below for how to enable and disable the feature.
-
-
-<hr>
-
-#include "xbase.h"<br>
-using namespace xb;<br>
-<br>
-int main(int ac,char** av)<br>
-{<br>
- xbXBase x;<br>
- xbInt16 iRc;<br>
- x.EnableMsgLogging();<br>
- x.SetLogSize( 1000000L );<br>
-<br>
- if (ac <= 1) {<br>
- std::cout << "Usage: xb_dumprecs filename..." << std::endl;<br>
- return 1;<br>
- }<br>
-<br>
- xbDbf *MyFile = NULL;<br>
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){<br>
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;<br>
- x.DisplayError( iRc );<br>
- return 0;<br>
- }<br>
-<br>
-// std::cout << "Processing file sequentially from beginning..." << std::endl;<br>
-<br>
-<br>
-<b>
- // turn on Block Read Processing<br>
- #ifdef XB_BLOCKREAD_SUPPORT<br>
- MyFile->EnableBlockReadProcessing();<br>
- #endif<br>
-</b>
-<br>
- xbUInt32 j = 0;<br>
- xbUInt32 ulRecCnt = 0;<br>
-<br>
- iRc = MyFile->GetRecordCnt( ulRecCnt );<br>
-<br>
- if( iRc < XB_NO_ERROR )<br>
- return iRc;<br>
- while( j < ulRecCnt ){<br>
- if( j == 0 )<br>
- iRc = MyFile->DumpRecord(++j, 2, 2 );<br>
- else<br>
- iRc = MyFile->DumpRecord(++j, 2, 1 );<br>
- if( iRc != XB_NO_ERROR ){<br>
- x.DisplayError( iRc );<br>
- return 1;<br>
- }<br>
- }<br>
- std::cout << j << " Records processed." << std::endl;<br>
-<br>
-<br><b>
- // optionally turn off Block Read Processing<br>
- #ifdef XB_BLOCKREAD_SUPPORT<br>
- MyFile->DisableBlockReadProcessing();<br>
- #endif<br></b>
-<br>
- MyFile->Close();<br>
- return 0;<br>
-}<br>
-<br>
-
-<hr>
-<p><img src="xbase.jpg"><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc16.html b/docs/html/xbc16.html
deleted file mode 100755
index 873264d..0000000
--- a/docs/html/xbc16.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 16</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Class Inventory</p></H2>
-<p align="center">Chapter Updated 2/1/23</p><hr>
-<br>
-<center><h3>Class Descriptions</h3></center>
-
-<center>
-<table border=1>
-<tr><th>Class</th><th>Description</th></tr>
-<tr><td>xbBcd</td><td>Supports binary coded decimal data</td></tr>
-<tr><td>xbBlockRead<td>Supports block read functionality for improved sequential file access performance.</td></tr>
-<tr><td>xbDate</td><td>Support date operations on a given date formatted as YYYYMMDD</td></tr>
-<tr><td>xbDbf</td><td>Base class for DBF file handling. If you are adding support for a new file type, <br>derive new file type class from this.</td></tr>
-<tr><td>xbDbf3</td><td>Derived from xbDbf, supports DBase V3 files</td></tr>
-<tr><td>xbDbf4</td><td>Derived from xbDbf, supports DBase V4 files</td></tr>
-<tr><td>xbExp</td><td>Class for supporting expression logic</td></tr>
-<tr><td>xbExpNode</td><td>Class definition of a single node, utilized by xbExp</td></tr>
-<tr><td>xbFile</td><td>Main file class. If you are porting this library to another platform, start here</td></tr>
-<tr><td>xbFilter</td><td>Supports filters</td></tr>
-<tr><td>xbIx</td><td>Base class for index file support. If you are adding support for a new index type, <br>derive new index type class from this.</td></tr>
-<tr><td>xbIxNdx</td><td>Derived from xbIx, supports NDX style indices.</td></tr>
-<tr><td>xbIxMdx</td><td>Derived from xbIx, supports MDX style indices</td></tr>
-<tr><td>xbLinkList</td><td>Class supporting linked list functionality</td></tr>
-<tr><td>xbLinkListOrd</td><td>Class supporting ordered linked list functionality</td></tr>
-<tr><td>xbLinkListNode</td><td>Class defining one node, used by xbLinkList and xbLinkListOrd</td></tr>
-<tr><td>xbLog</td><td>Class supporting general log file activity</td></tr>
-<tr><td>xbMemo</td><td>Base class for supporting memo (.DBT) files. If you are adding support for a new memo type, <br>derive new memo type class from this.</td></tr>
-<tr><td>xbMemoDbt3</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
-<tr><td>xbMemoDbt4</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
-<tr><td>xbSql</td><td>Supports SQL access</td></tr>
-<tr><td>xbSsv</td><td>Base class, shared system values</td></tr>
-<tr><td>xbString</td><td>String handling class</td></tr>
-<tr><td>xbTag</td><td>Class to support index tags</td></tr>
-<tr><td>xbTblMgr</td><td>Class used internally in the library for managing multiple open files/tables</td></tr>
-<tr><td>xbUda</td><td>Class for supporting fields for the xbSql functions. Stands for User data area</td></tr>
-<tr><td>xbXBase</td><td>Class to tie everything together. Every application program starts with one of these</td></tr>
-</table>
-</center>
-
-<hr>
-<br><br>
-Fix me...
-<p><img src="Xbase64ClassDiagram.jpg"><br>
-
-<br><br>
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc17.html b/docs/html/xbc17.html
deleted file mode 100755
index c0b2208..0000000
--- a/docs/html/xbc17.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 17</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Class xbSsv</p></H2>
-<p align="center">Chapter Updated 2/7/23</p><hr>
-
-<h3>Class xbSsv - Shared System Values.</h3>
-
-Base class xbSsv is used for maintaining static variables used system
-wide by the XBase library routines and is a base class that is used by the xbXBase class.
-See the diagram in chapter 15 to gain an understanding of where the xbSsv class sits in relation to the
-other classes. Accessing the methods in this class are done via the xbXBase class instance.<br><br>
-Additionally, there are a few other misc routines contained in this class that are available to all
-subordinate classes/objects.
-<br><br><br><br>
-
-
-<center>
-<table border=1>
-<tr><th width=40%>Method</th><th>Description</th></tr>
-
-<tr><td>void BitDump( unsigned char c ) const<br>void BitDump( char c ) const</td><td>These routines dump the bits for a specified char field to stdout.</td></tr>
-<tr><td>xbBool BitSet( unsigned char c, xbInt16 iBitNo ) const</td><td>This routine will set a specified bit in a char field.</td></tr>
-<tr><td>void DisplayError( xbInt16 ErrorCode ) const</td><td>This routine prints a description for a specifed error to stdout.</td></tr>
-
-<tr><td>xbString& GetDataDirectory() const<br>void SetDataDirectory( const xbString &sDataDirectory )</td>
- <td>Get and Set the current directory where the library routines expect to find the .DBF, .DBT, .NDX and .MDX files.</td></tr>
-
-<tr><td>xbString& GetDefaultDateFormat() const<br>void SetDefaultDateFormat( const xbString &sDefaultDateFormat )</td>
- <td>Get and Set the current default date format used by the date formatting routines if no format specifier is provided.</td></tr>
-
-<tr><td>xbInt16 GetEndianType() const</td><td>Returns the current Endian type of the machine the library is operating on.</td></tr>
-<tr><td>const char *GetErrorMessage( xbInt16 ErrorCode ) const</td><td>Returns a pointer to an error message for a given error number.</td></tr>
-
-<tr><td>xbBool GetDefaultAutoCommit() const<br>void SetDefaultAutoCommit( xbBool bDefaultAutoCommit )</td>
- <td>Get and Set the default auto commit status. If auto commit is on, the library will automatically post any updates to the database when navigating away from an updated record.</td></tr>
-
-<tr><td>xbBool GetHomeDir( xbString &sHomeDirOut )</td><td>Get the home directory for the current user.</td></tr>
-
-<tr><td>xbString& GetLogDirectory() const<br>void SetLogDirectory( const xbString &sLogDirectory )</td>
- <td>Get and set the directory location for any system generated logfiles.</td></tr>
-<tr><td>xbString& GetLogFileName() const</td><td>Returns the default log file name.</td></tr>
-
-
-<tr><td>xbBool GetMultiUser() const<br>void SetMultiUser( xbBool bMultiUser )</td>
- <td>Get and set multi user status. This turns the auto locking on and off. For better performance in single user applications, turn multuser off.</td></tr>
-
-<tr><td>xbInt16 GetUniqueKeyOpt() const<br>xbInt16 SetUniqueKeyOpt( xbInt16 iUniqueKeyOpt )</td>
- <td>Determines library behavior for unique key processing. The original Dbase (tm) product allowed duplicate recrds in the .DBF file when the unique option was specified for a given index tag.
- The Xbase library supports either the original DBase behavior (XB_EMULATE_DBASE), or the prevention of duplicate records for duplicate keys (XB_HALT_ON_DUPKEY).</td></tr>
-
-
-<tr><td>xbInt16 GetDefaultLockRetries() const<br>void SetDefaultLockRetries( xbInt16 iRetryCount )</td>
- <td>Get and Set the number of times to attempt a lock</td></tr>
-
-<tr><td>xbInt32 GetDefaultLockWait() const<br>void SetDefaultLockWait( xbInt32 lRetryWait )
- </td><td>Get and Set the wait time between lock attempts.</td></tr>
-
-<tr><td>xbInt16 GetDefaultLockFlavor() const<br>void SetDefaultLockFlavor( xbInt16 iLockFlavor )
- </td><td>For future use. With current versions, only DBase (TM) locking offsets are supported.</td></tr>
-
-<tr><td>xbBool GetDefaultAutoLock() const<br>void SetDefaultAutoLock( xbBool bAutoLock )<br>void EnableDefaultAutoLock()<br>void DisableDefaultAutoLock()
- </td><td>Set, Get or update Auto Lock Status</td></tr>
-
-
-<tr><td>xbInt16 GetCreateMdxBlockSize() const<br>xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize )
- </td><td>Set or get MDX Index block size. Must be a multiple of 512.</td></tr>
-
-<tr><td>xbUInt32 GetDefaultBlockReadSize() const<br>void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize )
- </td><td>Set or Get the default block size for Block Read functionality. Block reading is used to improve sequentential access performance.</td></tr>
-</table>
-
-<br><br>
-
-<h3>Example program using xbSsv methods</h3>
-</center>
-<xmp>
-/* xb_ex_ssv.cpp
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-This program demonstrates using functionality of the xbSsv class (Shared system values)
-
-*/
-
-#include "xbase.h"
-
-using namespace xb;
-
-int main( int ac, char ** av ){
-
- xbXBase x; // set up xbase for business
- xbString sMsg; // a message string
-
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- std::cout << sMsg.Str() << std::endl;
-
- // example code to set up log file usage
- #ifdef XB_LOGGING_SUPPORT
- char cSeperator; // is this a unix (/) or windows (\) file system
- xbString sLog; // general string for log file activities
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
-
- cSeperator = sLog.GetPathSeparator(); // get the seperator from
- std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
-
- sLog.Sprintf( "..%c", cSeperator );
- x.SetLogDirectory( sLog );
- std::cout << "sLog = [" << sLog.Str() << "]\n";
-
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
-
- // turn on logging after file name set
- x.EnableMsgLogging();
- #endif // XB_LOGGING_SUPPORT
-
- // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
- // void DisplayError( xbInt16 ErrorCode ) const;
- std::cout << "DisplayError( -100 ) - ";
- x.DisplayError( -100 );
- // << "]" << std::endl;
-
-
- // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
- // xbString& GetDefaultDateFormat() const;
- std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl;
-
- // void SetDataDirectory ( const xbString &sDataDirectory );
- // xbString& GetDataDirectory() const;
- std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl;
-
- // xbInt16 GetEndianType() const;
- if( x.GetEndianType() == 'L' )
- std::cout << "Little Endian Architecture." << std::endl;
- else
- std::cout << "Bid Endian Architecture." << std::endl;
-
- //xbBool GetDefaultAutoCommit() const;
- //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
- if( x.GetDefaultAutoCommit())
- std::cout << "AutoCommit is on." << std::endl;
- else
- std::cout << "AutoCommit is off." << std::endl;
-
- //xbBool GetMultiUser () const;
- //void SetMultiUser ( xbBool bMultiUser );
- if( x.GetMultiUser())
- std::cout << "Multi user (locking) is enabled." << std::endl;
- else
- std::cout << "Multi user (locking) not enabled." << std::endl;
-
- #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
- // xbInt16 GetUniqueKeyOpt () const;
- // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
- // XB_HALT_ON_DUPKEY
- // XB_EMULATE_DBASE
- if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
- std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
- else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
- std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
- #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-
- #ifdef XB_LOCKING_SUPPORT
- //xbInt16 GetDefaultLockRetries () const;
- //void SetDefaultLockRetries ( xbInt16 iRetryCount );
- //xbInt32 GetDefaultLockWait () const;
- //void SetDefaultLockWait ( xbInt32 lRetryWait );
- //xbInt16 GetDefaultLockFlavor () const;
- //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
- //xbBool GetDefaultAutoLock () const;
- //void SetDefaultAutoLock ( xbBool bAutoLock );
- //void EnableDefaultAutoLock ();
- //void DisableDefaultAutoLock ();
-
- std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
- std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
- std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_MDX_SUPPORT
- // xbInt16 GetCreateMdxBlockSize() const;
- // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
- std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
- #endif // XB_MDX_SUPPORT
-
- #ifdef XB_BLOCKREAD_SUPPORT
- // xbUInt32 GetDefaultBlockReadSize() const;
- // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
- std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
- #endif // XB_BLOCKREAD_SUPPORT
-
- //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
- //void BitDump ( unsigned char c ) const;
- //void BitDump ( char c ) const;
- std::cout << "BitDump( 'A' ) - ";
- x.BitDump( 'A' );
-
- return 0;
-}
-
-
-</xmp>
-
-<br><br>
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc18.html b/docs/html/xbc18.html
deleted file mode 100755
index 36f3b50..0000000
--- a/docs/html/xbc18.html
+++ /dev/null
@@ -1,252 +0,0 @@
-<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 18</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Class xbXBase</p></H2>
-<p align="center">Chapter Updated 2/7/23</p><hr>
-
-<h3>Class xbXBase - Core Level Class</h3>
-
-
-The xbXBase class is the core class that needs to be in every application program.
-Established an instance of class xbXBase before any other Xbase calls are made.
-
-<i>xbXBase x</i>
-
-<br><br>
-xbXBase is derived from base classes xbTblMgr and xbSsv.
-<br><br><br><br>
-
-
-
-
-
-<center>
-<table border=1>
-<tr><th width=40%>Method</th><th>Description</th><th>Category</th></tr>
-
-<tr><td>xbInt16 CloseAllTables()</td><td>Close all open tables.</td><td>Table</tr>
-
-<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf &dbf, int dummy )</td><td>Open highest version available for sTableName.</td><td>Table</tr>
-<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf **dbf )</td><td>Open highest version available for sTableName.</td><td>Table</tr>
-<tr><td>xbDbf * Open( const xbString &sTableName, xbInt16 &iRc )</td><td>Open the highest available version of the dbf file. Defaults to XB_READ_WRITE and XB_MULTI_USER mode.</td><td>Table</tr>
-<tr><td>xbDbf * Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &iRc )</td><td>Open table.</td><td>Table</tr>
-
-<tr><td colspan=3><hr></td></tr>
-<tr><td>void DisableMsgLogging()</td><td>Disable logging routines.</td><td>Logging</td></tr>
-<tr><td>void EnableMsgLogging ()</td><td>Enable logging routines.</td><td>Logging</td></tr>
-<tr><td>xbInt16 FlushLog()</td><td>Flush any queued logfile updates to disk.</td><td>Logging</td></tr>
-<tr><td>const xbString &GetLogDirectory () const</td><td>Get the current logfile directory.</td><td>Logging</td></tr>
-<tr><td>const xbString &GetLogFileName () const</td><td>Get the current logfile name.</td><td>Logging</td></tr>
-<tr><td>const xbString &GetLogFqFileName() const</td><td>Get fully qualified logfile name.</td><td>Logging</td></tr>
-<tr><td>xbBool GetLogStatus () const</td><td>Get the logging status.</td><td>Logging</td></tr>
-<tr><td>void SetLogDirectory( const xbString &sLogFileDirectory )</td><td>Set the log directory. Must be done while logging is off.</td><td>Logging</td></tr>
-<tr><td>void SetLogFileName( const xbString &sLogFileName )</td><td>Set the log file name. Must be done while logging is off.</td><td>Logging</td></tr>
-<tr><td>void SetLogSize( size_t lSize )</td><td>Set the logfile size. After the size is reached, the log file roll.</td><td>Logging</td></tr>
-<tr><td>xbInt16 WriteLogBytes ( xbUInt32 lCnt, const char *p )</td><td>Write lCnt bytes pointed to by pointer p to the logfile.</td><td>Logging</td></tr>
-<tr><td>xbInt16 WriteLogMessage( const xbString &sLogMessage, xbInt16 iOutputOpt = 0 )</td><td>Write a string to the logfile.</td><td>Logging</td></tr>
-
-<tr><td colspan=3><hr></td></tr>
-<tr><td>xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, xbString &sOptRqst, xbString &sParmOut )<br>
-xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, const char *sOptRqst, xbString &sParmOut )</td><td>Parse command line values seeking given parameter info.</td><td>Misc</td></tr>
-
-<tr><td>void xbSleep( xbInt32 lMillisecs )</td><td>Sleep command, used mainly in lock commands for waiting between retries.</td><td>Misc</td></td></tr>
-
-<tr><td colspan=3><hr></td></tr>
-<tr><td>xbInt16 ABS( xbDouble dIn, xbDouble &dOut )</td><td>Dbase ABS function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ALLTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase ALLTRIM function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ASC( const xbString &s, xbDouble &dAscOut )</td><td>Dbase ASC function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 AT( const xbString &sSrchFor, const xbString &sBase, xbDouble &dPos )</td><td>Dbase AT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 CDOW( xbDate &dInDate, xbString &sOutDow )</td><td>Dbase CDOW function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 CHR( xbDouble dAsciCd, xbString &sOut )</td><td>Dbase CHR function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 CMONTH( xbDate &dInDate, xbString &sOutMonth )</td><td>Dbase CMONTH function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 CTOD( const xbString &sInDate, xbDate &dOutDate )</td><td>Dbase CTOD function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DATE( xbDate &dOutDate )</td><td>Dbase DATE function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DAY( const xbDate &dInDate, xbDouble &dOutDay )</td><td>Dbase DAY function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DEL( xbDbf * d, xbString &sOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DEL function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DELETED( xbDbf * d, xbBool &bOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DELETED function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DESCEND( const xbString &sIn,xbString &sOut )<br>xbInt16 DESCEND( const xbDate &dInDate, xbDate &dOutDate )<br>xbInt16 DESCEND( const xbDouble dIn, xbDouble &dsOut )</td><td>Dbase DESCEND function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DOW( const xbDate &sInDate, xbDouble &dDowOut )</td><td>Dbase DOW function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DTOC( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOC function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 DTOS( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOS function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 EXP( xbDouble dIn, xbDouble &dOut )</td><td>Dbase EXP function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult )</td><td>Dbase IIF function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 INT( xbDouble dIn, xbDouble &dOut )</td><td>Dbase INT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ISALPHA( const xbString &s, xbBool &bResult )</td><td>Dbase ISALPHA function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ISLOWER( const xbString &s, xbBool &bResult )</td><td>Dbase ISLOWER function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 ISUPPER( const xbString &s, xbBool &bResult )</td><td>Dbase ISUPPER function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LEFT( const xbString &sIn, xbUInt32 lCharCnt, xbString &sOut )</td><td>Dbase LEF function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LEN( const xbString &sIn, xbDouble &dLen )</td><td>Dbase LEN function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LOG( xbDouble dIn, xbDouble &dOut )</td><td>Dbase LOG function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LOWER( const xbString &sIn, xbString &sOut )</td><td>Dbase LOWER function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 LTRIM( const xbString &sIn, xbString & sOut )</td><td>Dbase LTRIM function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 MAX( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MAX function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 MIN( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MIN function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 MONTH( xbDate &dInDate, xbDouble &dMonthOut )</td><td>Dbase MONTH function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 RECCOUNT( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECCOUNT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 RECNO( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECNO function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut )</td><td>Dbase REPLICATE function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 RIGHT( const xbString &sIn, xbUInt32 iCharCnt, xbString &sOut )</td><td>Dbase RIGHT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 RTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase RTRIM function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 SPACE( xbInt32 lCnt, xbString &sOut )</td><td>Dbase SPACE function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 SQRT( xbDouble dBase, xbDouble &dSqrRt )</td><td>Dbase SQRT function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 STOD( const xbString &sIn, xbDate &sDateOut )</td><td>Dbase STOD function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 STR( xbDouble dIn, xbString &sOut )</td><td>Dbase function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut )<br>
- xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )<br>
- xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut )</td><td>Dbase STR function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )</td><td>Dbase STRZERO function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut )</td><td>Dbase SUBSTR function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 TRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase TRIM function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 UPPER( const xbString &sIn, xbString &sOut )</td><td>Dbase UPPER function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 VAL( const xbString &sIn, xbDouble &dOut )</td><td>Dbase VAL function.</td><td>Expression</td></tr>
-<tr><td>xbInt16 YEAR( xbDate &dInDate, xbDouble &dOutYear )</td><td>Dbase YEAR function.</td><td>Expression</td></tr>
-</table>
-
-<br><br>
-<hr>
-
-<h3>Example program using xbXbase methods</h3>
-</center>
-<xmp>
-/* xb_ex_ssv.cpp
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-This program demonstrates using functionality of the xbSsv class (Shared system values)
-
-*/
-
-#include "xbase.h"
-
-using namespace xb;
-
-int main( int ac, char ** av ){
-
- xbXBase x; // set up xbase for business
- xbString sMsg; // a message string
-
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
- std::cout << sMsg.Str() << std::endl;
-
- // example code to set up log file usage
- #ifdef XB_LOGGING_SUPPORT
- char cSeperator; // is this a unix (/) or windows (\) file system
- xbString sLog; // general string for log file activities
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
-
- cSeperator = sLog.GetPathSeparator(); // get the seperator from
- std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
-
- sLog.Sprintf( "..%c", cSeperator );
- x.SetLogDirectory( sLog );
- std::cout << "sLog = [" << sLog.Str() << "]\n";
-
- sLog = x.GetLogFqFileName().Str(); // get the system default log file name
- std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
-
- // turn on logging after file name set
- x.EnableMsgLogging();
- #endif // XB_LOGGING_SUPPORT
-
- // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
- // void DisplayError( xbInt16 ErrorCode ) const;
- std::cout << "DisplayError( -100 ) - ";
- x.DisplayError( -100 );
- // << "]" << std::endl;
-
-
- // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
- // xbString& GetDefaultDateFormat() const;
- std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl;
-
- // void SetDataDirectory ( const xbString &sDataDirectory );
- // xbString& GetDataDirectory() const;
- std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl;
-
- // xbInt16 GetEndianType() const;
- if( x.GetEndianType() == 'L' )
- std::cout << "Little Endian Architecture." << std::endl;
- else
- std::cout << "Bid Endian Architecture." << std::endl;
-
- //xbBool GetDefaultAutoCommit() const;
- //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
- if( x.GetDefaultAutoCommit())
- std::cout << "AutoCommit is on." << std::endl;
- else
- std::cout << "AutoCommit is off." << std::endl;
-
- //xbBool GetMultiUser () const;
- //void SetMultiUser ( xbBool bMultiUser );
- if( x.GetMultiUser())
- std::cout << "Multi user (locking) is enabled." << std::endl;
- else
- std::cout << "Multi user (locking) not enabled." << std::endl;
-
- #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
- // xbInt16 GetUniqueKeyOpt () const;
- // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
- // XB_HALT_ON_DUPKEY
- // XB_EMULATE_DBASE
- if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
- std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
- else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
- std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
- #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
-
- #ifdef XB_LOCKING_SUPPORT
- //xbInt16 GetDefaultLockRetries () const;
- //void SetDefaultLockRetries ( xbInt16 iRetryCount );
- //xbInt32 GetDefaultLockWait () const;
- //void SetDefaultLockWait ( xbInt32 lRetryWait );
- //xbInt16 GetDefaultLockFlavor () const;
- //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
- //xbBool GetDefaultAutoLock () const;
- //void SetDefaultAutoLock ( xbBool bAutoLock );
- //void EnableDefaultAutoLock ();
- //void DisableDefaultAutoLock ();
-
- std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
- std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
- std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
- #endif // XB_LOCKING_SUPPORT
-
- #ifdef XB_MDX_SUPPORT
- // xbInt16 GetCreateMdxBlockSize() const;
- // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
- std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
- #endif // XB_MDX_SUPPORT
-
- #ifdef XB_BLOCKREAD_SUPPORT
- // xbUInt32 GetDefaultBlockReadSize() const;
- // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
- std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
- #endif // XB_BLOCKREAD_SUPPORT
-
- //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
- //void BitDump ( unsigned char c ) const;
- //void BitDump ( char c ) const;
- std::cout << "BitDump( 'A' ) - ";
- x.BitDump( 'A' );
-
- return 0;
-}
-
-
-</xmp>
-
-<br><br>
-<hr>
-<p><img src="xbase.jpg"><br><hr>
-</BODY>
-</HTML>
diff --git a/docs/html/xbc2.html b/docs/html/xbc2.html
index 72a6009..71d4585 100755
--- a/docs/html/xbc2.html
+++ b/docs/html/xbc2.html
@@ -2,24 +2,38 @@
<HTML>
<TITLE>Xbase DBMS Chapter 2</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">Database Overview</p></H2>
-<p align="center">Chapter Updated 11/21/22</p><hr>
-
-The objective of this chapter is to provide information regarding how
-the database files are utilized and document the various record structures.
-With the exception of the brief section on the record buffer, the
-information presented in this chapter is not required to use the
-Xbase library. It is mainly information describing internal file
-structures utilized by the Xbase routines.<br><br>
-
-Xbase DBF files are comprised of a variable length header record which stores
-information about the file and describes
-the fixed length record format, followed by a series of fixed length
-data records.
+<H2><p align="center">System Overview</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+<br><br>
+The <em>XBase64</em> library is a cross platform object oriented C++ set of classes for
+accessing and manipulating the following Xbase file types:<br><br>
+
+
+<table border=1>
+<tr><th>Extension</th><th>Description</th><th>Supported by Xbase64 library?</th></tr>
+<tr><td>*.DBF</td><td>Main DBF file or table name</td><td><center>Y</center></td></tr>
+<tr><td>*.DBT</td><td>Verson 3 or Version 4 memo file</td><td><center>Y</center></td></tr>
+<tr><td>*.NDX</td><td>Single tag index file</td><td><center>Y</center></td></tr>
+<tr><td>*.MDX</td><td>Multi tag index file</td><td><center>Y</center></td></tr>
+<tr><td>*.INF</td><td>ODBC file used for auto open of NDX files</td><td><center>Y</center></td></tr>
+<tr><td>*.NTX</td><td>Clipper indexfile </td><td><center>Future</center></td></tr>
+<tr><td>*.CDX</td><td>Fox Pro indexfile </td><td><center>Future</center></td></tr>
+<tr><td>*.IDX</td><td>Fox Pro index file</td><td><center>Future</center></td></tr>
+</table>
+
+
+
+
+<br><br>
+
+DBF files are comprised of a variable length header record which stores
+information about the file and describes he fixed length record format,
+followed by a series of fixed length data records.
<br><br>
Each fixed length data record is preceded by a one byte indicator
-which identifiies if the record has been deleted. If the record is
+which identifies if the record has been deleted. If the record is
not deleted, the indicator is a space (0x20). If deleted, the
indicator contains an asterisk (0x2A). Data fields are stored in records
without field separators or record terminators.<br><br>
@@ -70,7 +84,6 @@ method will back out any updates to the record buffer.
<br><br>
-
<hr>
<br>
<h3>Xbase Database File Header - DBF Version III and Version IV</h3>
@@ -156,16 +169,8 @@ Type 4 memo fields can be used for storing BLOB (binary large object)
data reliably, as the internal file structure does not rely on any
special characters embedded in the data.<br><br>
-A special note on storing string data in a memo field. For those users
-that are new to C/C++ programming, string fields typically end with
-a null (0x00) terminator character. As a general rule of thumb when using
-the library, add one to the length of any string when
-specifying the length of the data. This stores the null terminating byte
-with the data. For example, when storing string "This is a string"
-specified size should be 17, not 16.
-
-<h4>Technical memo file information</h4>
+<h3>Technical memo file information</h3>
The following info on memo fields is for the curious.
It is not required
@@ -261,6 +266,102 @@ is added to the free block chain.
Version 3 and 4 memo fields are terminated with two contiguous 0x1A bytes of data.
<br><br>
<hr>
+
+
+<h3>Block Reads</h3>
+
+As of release 4.1.1, the Xbase library includes functionality for reading a DBF file in blocks, rather than one record at a time.<br><br>
+
+This functionality can be used to improve application performance in situations where a data file is being read sequentially.
+For situations where records are retrieved randomly from the file, enabling this probably won't help much. In short, this
+can be turned on when accessing a file sequentially and should be left off when not processing sequentially.<br><br>
+
+The logic is handled internally within the library, all that is needed is to
+enable it and the library handles the rest. Additionally, the block read functionality
+was designed with for sequential file access and is designed with reporting in mind.
+It doesn't currently have any auto locking associated with it.
+<br><br>
+
+To enable and disable Block Reading for a DBF file, use
+<em>xbDbf::EnableBlockReadProcessing()</em>
+and <em>xbDbf::DisableBlockReadProcessing()</em>.
+<br><br>
+
+<hr>
+<h3>Locking Overview</h3>
+
+Xbase64 supports multi-user processing through file and record locks.
+Record locking restricts multiple cooperating programs from simultaneously
+accessing the same data and corrupting it. Without record and file locking
+in a multi-user environment, simultaneous access to the data and index files
+can cause the files to become inaccurate and unusable.<br><br>
+
+Automatic record locking is on by default in the Xbase64 library. To disable it,
+use method xbXBase::DisableDefaultAutoLock() and to enable it, use method xbXBase::EnableDefaultAutoLock().
+<br><br>
+Locking can also be enabled / disabled at the table level with with xbDbf::SetAutoLock().<br><br>
+If autolocking is disabled and the code base is being used in a multi user environment, it is
+up to the application program to verify the needed locks are set as there is no checking or
+setting any locks if autolocking is turned off. It is only safe to turn off the autolocking functionality
+if the library is being used in a single user environment.
+
+<br><br>
+The current Xbase64 record locking logic is modeled after DBase (tm) V7 locking.
+<br><br>
+
+The locking methods return either XB_LOCK_FAILED or XB_NO_ERROR. If they return
+XB_LOCK_FAILED the actual reason can be found in the global variable
+<em>errno</em> or function <em>perror()</em> can be executed to view the
+results.
+<br><br>
+
+The errno field may contain one of the following values if the lock was not
+successful.<br><br>
+<TABLE BORDER>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Error Code<TD>Description
+<TR><TH ALIGN="LEFT">EBADF<TD>Invalid file descriptor
+<TR><TH ALIGN="LEFT">EINVAL<TD>Invalid lock information or file does not support locks
+<TR><TH ALIGN="LEFT">EACCESS<BR>EAGAIN<TD>Lock can not be set because it is blocked by an existing lock on the file.
+<TR><TH ALIGN="LEFT">ENOLCK<TD>The system is out of lock resources, too many file locks in place.
+<TR><TH ALIGN="LEFT">EDEADLK<TD>Deadlock condition
+<TR><TH ALIGN="LEFT">EINTR<TD>Process was interrupted by a signal while it was waiting
+</TABLE>
+<br><br>
+
+<h3>Linux/Windows File Locking Compatibility Issue</h3>
+
+There is a compatibility locking issue to be aware of. Windows environments allow for the exclusive
+opening of file handles and Linux/Unix platforms do not. If you are writing an application that will be
+using a tool like Dbase on a Windows machine, accessing a file on a Linux/Samba configure machine,
+be aware that the file could be opened in exclusive mode by DBase on the Windows system, and the same file could
+be simultaneously opened with a program on the Unix box. That could cause some issues.
+
+<br><br>
+In Unix, a program can not lock a file so another process can not access it.<br>
+In Windows, a program can lock a file so another process can not access it.<br>
+DBase(tm) supports routines to open files exclusively, preventing other users from opening a file.<br>
+Locking on the Mac/Apple platform only works on NFS shares. It does not work with SMB shares.
+
+<br><h3>Samba settings</h3>
+
+If you will be using Samba on Linux/Unix and sharing files between Linux and Windows machines,
+you will need to disable oplocks. In the smb.conf file, set:<br>
+<br>
+[sharename]<br>
+oplocks = False<br>
+level2 oplocks = False
+
+
+<br><h3>iLockFlavor</h3>
+
+The library was constructed in a manner so that it could be updated to support alternate lock "flavors".
+The 4.x.x library is built to mirror the DBase locking, but the structure is in place to expand to other locking
+types if needed.
+
+
+<br><br>
+<hr>
<p><img src="xbase.jpg"><hr>
</BODY>
</HTML>
diff --git a/docs/html/xbc3.html b/docs/html/xbc3.html
index f2f4a1d..866850f 100755
--- a/docs/html/xbc3.html
+++ b/docs/html/xbc3.html
@@ -2,8 +2,8 @@
<HTML>
<TITLE>Xbase DBMS Chapter 3</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Fields and Strings</p></H1>
-<p align="center">Chapter Updated 11/21/22</p><hr>
+<H1><p align="center">Fields, Strings and Dates</p></H1>
+<p align="center">Chapter Updated 04/28/23</p><hr>
<br><br>
The main objective of this chapter is to provide basic information regarding
@@ -13,7 +13,6 @@ Field names can be up to ten bytes in length and can contain characters, numbers
or special characters in the name. The field methods are used to manipulate
the data in a record of a data file. There are several types of fields.<br><br>
-
<TABLE BORDER>
<CAPTION ALIGN="TOP"><h3>Field Types</H3></CAPTION>
<TR VALIGN="BASELINE">
@@ -33,7 +32,7 @@ After the file is created, the field characteristics can not be changed. To
change field characteristics, a new database table must be defined with the new
field requirements.<br><br>
-<h2>Memo Fields</h2>
+<h3>Memo Fields</h3>
Memo fields are variable length data fields which are stored in two parts.
This first part is a ten byte field which is stored
@@ -52,14 +51,14 @@ using.
To utilize memo fields, the application program must allocate a buffer
which is large enough to handle the memo data.<br><br>
-<h2>Fields and Field Numbers</h2>
+<h3>Fields and Field Numbers</h3>
The Xbase routines can access field data via using field names or field
numbers. Field numbers are numbered 0-n where the first field in a datafile
is field 0 going through the last field n. Accessing fields by number is
slightly more efficient than accessing by name.<br><br>
-<h2>Strings</h2>
+<h3>Strings</h3>
Xbase64 includes support for a string class <em>xbString</em>.
The xbString class interface was originally derived from the
@@ -67,6 +66,37 @@ The xbString class interface was originally derived from the
If you are familiar with other string classes, this one should be similar.
Strings can be used to manage strings of character data.
<br><br>
+
+<h3>Date Fields</h3>
+
+All dates are stored in the .DBF files as Gregorian dates with format CCYYMMDD.<br><br>
+The library date routines work with dates formated with the same CCYYMMDD format.<br><br>
+
+<h3>Null Dates</h3>
+Date fields in the database stored as eight spaces are considered null dates.<br><br>
+
+<h3>Leap Years</h3>
+
+A leap year is a year having 366 days, which can be evenly
+divisible by 4 and not by 100 or divisible by 400. There are also leap centuries.
+Leap centuries are years which are evenly divisible by 400.
+
+<h3>Julian Dates</h3>
+
+The Julian date routines calculate a Julian date as the number of days
+since 01/01/0001 with an offset of 1721425L.
+<br><br>
+
+Julian dates are useful for doing date arithmetic such as determining the
+difference between two dates or calculating a future or past date.<br><br>
+
+To determine the difference between two dates, convert both dates to a
+Julian date and subtract one from the other.<br><br>
+
+To calculate a future or past date, convert the base date to a Julian date,
+add (or subtract) the number of days necessary to (from) it and convert the
+Julian date back to a Gregorian date.<br><br>
+
<hr>
<p><img src="xbase.jpg"><hr>
</BODY>
diff --git a/docs/html/xbc4.html b/docs/html/xbc4.html
index a0275ed..f8a48d9 100755
--- a/docs/html/xbc4.html
+++ b/docs/html/xbc4.html
@@ -1,79 +1,206 @@
<!DOCTYPE HTML PUBLIC>
-<HTML>
-<TITLE>Xbase DBMS Chapter 4</TITLE>
-<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Date Processing</p></H1>
-<p align="center">Chapter Updated 12/09/22</p><hr>
-
-The objective of this chapter is to provide information regarding
-the basic concepts of date arithmetic and supply generic
-C/C++ date methods.<br><br>
-
-<h2>Leap Years</h2>
-
-Due to the fact that it actually takes about 365 1/4 days for
-the earth to circle the sun, every fourth year and every fourth
-century have an extra day added to the end of February and the year
-is called a leap year. Leap years have 366 days, non leap years
-have 365 days. The following code segment describes how to
-determine if a given year is a leap year.
-
-A leap year is a year having 366 days, which can be evenly
-divisible by 4 and not by 100 or divisible by 400.
-
-There are also leap centuries. Leap centuries are years which
-are evenly divisible by 400.
-
-To calculate a leap year, the following code segment can be used
-
-<xmp>
- int year;
-
- if(( year % 4 == 0 && year % 100 != 0 ) || year % 400 = 0 )
- LEAP_YEAR = TRUE;
- else
- LEAP_YEAR = FALSE
-</xmp>
-
-
-<h2>Julian Dates</h2>
-
-Around the time of Jesus Christ, a fellow with the name of Julias Ceasar
-established the Julian calendar. The Julian calendar established every
-fourth year as a leap year with 366 days and all other years having 365 days.
-The months were set up the same as they are with a Gregorian calendar, which
-is what we use today. A Julian date is defined as as the number of days from the
-first day of the year; February 1 would have a Julian day of 32.<br><br>
-
-From a programmer's perspective, Julian dates are useful for doing date
-arithmetic, determining the difference between two dates or calculating
-a future or past date.<br><br>
-
-To determine the difference between two dates, convert both dates to a
-Julian date and subtract one from the other.<br><br>
-
-To calculate a future or past date, convert the base date to a Julian date,
-add (or subtract) the number of days necessary to (from) it and convert the
-julian date back to a Gregorian date.<br><br>
-
-The Julian date routines use a base date of 01/01/0001. DBase julian Dates have an offset of 1721425L, reason unknown.
+<html>
+<title>Xbase DBMS Chapter 4</title>
+<body bgcolor=#FFFFFF>
+<h1><p align="center">Expression Handling<br></h1>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+
+<h3>Overview</h3>
+
+The main objective of this chapter is to provide information regarding the
+basic concepts of using the Xbase64 Expression module.<br><br>
+
+The Xbase64 library includes an expression parsing routine which assists
+application programmers by providing a high level data manipulation tool and
+also allows for building complex index keys.
+
+The functions included were derived from dBASE III Plus, dBASE IV and Clipper.
+<br><br>
+Expressions are primarily used for index key definitions and filter criteria, but
+can also be used for other tasks as well.
+<br><br>
+
+<h3>Internal fuctioning</h3>
+The expression module works in two phases. Firstly, method
+<em>ParseExpression</em> is called and builds an expression tree from
+all the components of the expression. The tree is made up of individual
+nodes. The expression is checked for valid field names, literals,
+operands and functions. Any field references are resolved. If fields
+are used in an expression and the database name for the field is not
+included in the name with the -> operand, the routines assume the
+associated database has been successfully opened.
<br><br>
+Secondly, method <em>ProcessExpression</em> is called to process the
+expression tree created by ParseExpression(). The routine parses each
+node in the expression tree, executing functions, processing operands
+and manipulating data to produce the desired result.<br><br>
-<h2>Gregorian Dates</h2>
+If an expression will be processed repeatedly, it is best to pre-parse the
+tree using <em>ParseExpression</em>, then for each new call to the expression,
+execute method <em>ProcessExpression</em> which processes the tree.
+
+<h3>Expression Return Types</h3>
+Expressions will return a type of CHAR, NUMERIC, DATE or LOGICAL.<br><br>
+
+An expression return type can be determined with method <em>
+GetExpressionResultType</em> after parsing it.<br><br>
+
+Expressions returning a return type of CHAR are limited to a 200 byte internal
+buffer. There is also a 100 byte limit for NDX and MDX index key support. If
+the 200 byte limit is not large enough for your application, adjust field
+<em>enum { WorkBufMaxLen = 200 };</em> in file <em>exp.h</em>.
-In 1582, Pope Gregor XIII introduced a corrected form of the Julian calendar.
-Every 4th year still has 366 days except for century years. Century years
-were added as leap years if evenly divisible by 400. The year 2000 is a leap century.
<br><br>
+<table border=1>
+<tr><th>Return Type</th><th>XBase Type</th></tr>
+<tr><td>CHAR</td><td>xbString</td></tr>
+<tr><td>NUMERIC</td><td>xbDouble</td></tr>
+<tr><td>DATE</td><td>xbDate</td></tr>
+<tr><td>LOGICAL</td><td>xbBool</td></tr>
+</table>
-The methods supplied with this software are based on gregorian dates with
-the format of CCYYMMDD for century, year, month and day.<br><br>
+<br><br>
+Date routines return an xbDate result. In addition, the date value can be
+extracted using GetStringResult() which returns YYYYMMDD or GetDoubleResult()
+which returns a julian value.
+<br><br>
+<h3>Expression Functions</h3>
+Each expression function also has a corresponding C++ function. It is
+slightly more efficient to call the C++ functions directly, rather than
+execute the expression parsing routines.<br><br>
+
+To add a new function, find a function that is similar to what you need, copy
+the code and modify xbxbase.h, xbfuncs.cpp, xbexp.cpp and xb_test_expression.cpp.<br><br>
+
+
+<table border=1>
+<tr><th>Function Name</th><th>Return Type</th><th>Description</th></tr>
+<tr><td>ABS</td><td>N</td><td>Calculate absolute value of numeric expression</td></tr>
+<tr><td>ALLTRIM</td><td>C</td><td>Trim leading andtrailing whitespace from a string</td></tr>
+<tr><td>ASC</td><td>N</td><td>Return ASCII code for first character in a string</td></tr>
+<tr><td>AT</td><td>N</td><td>Return starting position of a string within a string</td></tr>
+<tr><td>CDOW</td><td>C</td><td>Retun character weekday name for a date</td></tr>
+<tr><td>CHR</td><td>C</td><td>Convert numeric expression to a character</td></tr>
+<tr><td>CMONTH</td><td>C</td><td>Return month name for a date</td></tr>
+<tr><td>CTOD</td><td>D</td><td>Return date from a character date input</td></tr>
+<tr><td>DATE</td><td>D</td><td>Return system date</td></tr>
+<tr><td>DAY</td><td>N</td><td>Return the day of the month from a date</td></tr>
+<tr><td>DEL</td><td>C</td><td>Return record deletion status for a record</td></tr>
+<tr><td>DELETED</td><td>L</td><td>Return record deletion status for a record<</td></tr>
+<tr><td>DESCEND</td><td>1</td><td>Clipper DESCEND function</td></tr>
+<tr><td>DOW</td><td>N</td><td>Return number of day of week</td></tr>
+<tr><td>DTOC</td><td>C</td><td>Return character date from input date</td></tr>
+<tr><td>DTOS</td><td>C</td><td>Return character CCYYMMDD date from input date</td></tr>
+<tr><td>EXP</td><td>N</td><td>Return exponent value</td></tr>
+<tr><td>IIF</td><td>C</td><td>Immediate If</td></tr>
+<tr><td>INT</td><td>N</td><td>Convert number to integer, truncate any decimals</td></tr>
+<tr><td>ISALPHA</td><td>L</td><td>Check if string begins with alpha character</td></tr>
+<tr><td>ISLOWER</td><td>L</td><td>Check if string begins with lower case alpha character</td></tr>
+<tr><td>ISUPPER</td><td>L</td><td>Check if string begins with upper case character</td></tr>
+<tr><td>LEFT</td><td>C</td><td>Return left characters from a string</td></tr>
+<tr><td>LEN</td><td>N</td><td>Return lenght of string</td></tr>
+<tr><td>LOG</td><td>N</td><td>Calculate logarithm</td></tr>
+<tr><td>LOWER</td><td>C</td><td>Convert upper case to lower case</td></tr>
+<tr><td>LTRIM</td><td>C</td><td>Trim left side of a string</td></tr>
+<tr><td>MAX</td><td>N</td><td>Return higher of two values</td></tr>
+<tr><td>MIN</td><td>N</td><td>Return lesser of two values</td></tr>
+<tr><td>MONTH</td><td>N</td><td>Return number of month for a given date</td></tr>
+<tr><td>RECNO</td><td>N</td><td>Return current rec number for a given table</td></tr>
+<tr><td>RECCOUNT</td><td>N</td><td>Return number of records in a given table</td></tr>
+<tr><td>REPLICATE</td><td>C</td><td>Repeat character expression N times</td></tr>
+<tr><td>RIGHT</td><td>C</td><td>Return right characters from as tring</td></tr>
+<tr><td>RTRIM</td><td>C</td><td>Trim right side of string</td></tr>
+<tr><td>SPACE</td><td>C</td><td>Generate a string of N spaces</td></tr>
+<tr><td>SQRT</td><td>N</td><td>Calculate square root</td></tr>
+<tr><td>STOD</td><td>D</td><td>Convert 8 byte CCYYMMDD date to date</td></tr>
+<tr><td>STR</td><td>C</td><td>Convert number to character string</td></tr>
+<tr><td>STRZERO</td><td>C</td><td>Convert number to character string with leading zeroes. Clipper Function.</td></tr>
+<tr><td>SUBSTR</td><td>C</td><td>Extract portion oif one string from another string</td></tr>
+<tr><td>TRIM</td><td>C</td><td>Trim left and right sides of a string</td></tr>
+<tr><td>UPPER</td><td>C</td><td>Conver lower case to upper case</td></tr>
+<tr><td>VAL</td><td>N</td><td>Convert numeric characters to number</td></tr>
+<tr><td>YEAR</td><td>N</td><td>Return year for a given date</td></tr>
+</table>
+
+<br><br>
+<h3>Expression Components</h3>
+Expressions are made up of one or more tokens. A token is one of literal,
+database field, operand or function. Literals are either numeric or character.
+Character literals are enclosed in 'single' or "double" quotes. numeric
+literals are a series of one or more contiguous numerals, ".", "+" or "-'".
+<br><br>
+A field is simply a field name in the default database, or is in the form
+of database->fieldname.
+
+
+<br><br>
+<h3>Expression Literals</h3>
+
+<table border=1>
+<tr><th>Type</th><th>Example</th></tr>
+<tr><td>CHAR</td><td>"literal" or 'literal'</td></tr>
+<tr><td>NUMERIC</td><td>+99999.99</td></tr>
+<tr><td>DATE</td><td>{10/07/60} or {02/09/1989}</td></tr>
+</table>
+
+<br><br>
+<h3>Expression Operators</h3>
+<table border=1>
+<tr><th>Type</th><th>Operator</th><th>Precedence</th><th>Result</th><th>Notes</th></tr>
+<tr><td>Parens</td><td>()</td><td>12</td></tr>
+<tr><td>Numeric Operator</td><td>+ (unary)</td><td>11</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>- (unary)</td><td>11</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>--X</td><td>10</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>++X</td><td>10</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>**</td><td>9</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>^</td><td>9</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>%</td><td>8</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>*</td><td>8</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>/</td><td>8</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>+ Addition</td><td>7</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>- Subtraction</td><td>7</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>X--</td><td>6</td><td>N</td></tr>
+<tr><td>Numeric Operator</td><td>X++</td><td>6</td><td>N</td></tr>
+<tr></tr>
+<tr><td>String Operator</td><td>+</td><td>5</td><td>C</td><td>Concatonate 1</td></tr>
+<tr><td>String Operator</td><td>-</td><td>5</td><td>C</td><td>Concatonate 2</td></tr>
+<tr></tr>
+<tr><td>Relational Operator</td><td>=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>#, <>, !=</td><td>4</td><td?L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td><</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>></td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td><=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>>=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>$</td><td>4</td><td>L</td><td>N,C,D</td></tr>
+<tr><td>Relational Operator</td><td>==</td><td></td><td></td><td>Clipper operator, not implemented yet</td></tr>
+<tr></tr>
+<tr><td>Logical Operator</td><td>NOT</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>.NOT.</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>AND</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>.AND.</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>OR</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+<tr><td>Logical Operator</td><td>.OR.</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
+</table>
+
+<br><br>
+<h3>Example Expressions</h3>
+<li>CUSTOMERS->LNAME + ", " + CUSTOMERS->FNAME
+<li>LNAME + ", " + FNAME
+<li>STARTDT + 90
+<li>DATE() - 7
+<li>YEAR( TODAY() )
+<li>IIF( "A" = "N", "true result", "false result" )
+<li>IIF( "A" = "N" .OR. 2 > 1 , "true result", "false result" )
+<li>IIF( .NOT. "A" = "N", "true result", "false result" )
+<li>.NOT. DELETED()
+<br><br>
-<h2>Date Formats</h2>
-All dates are stored in the .DBF files with format CCYYMMDD.<br><br>
-All date routines work with dates formated with the same CCYYMMDD format.<br><br>
+<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>
diff --git a/docs/html/xbc5.html b/docs/html/xbc5.html
index 9708b17..66b0f62 100755
--- a/docs/html/xbc5.html
+++ b/docs/html/xbc5.html
@@ -1,205 +1,434 @@
<!DOCTYPE HTML PUBLIC>
<html>
<title>Xbase DBMS Chapter 5</title>
-<body bgcolor=#FFFFFF>
-<h1><p align="center">Expression Handling<br></h1>
-<p align="center">Chapter Updated 12/26/22</p><hr>
+<body BGCOLOR=#FFFFFF>
+<H1><p align="center">Index Overview</p></H1>
+<p align="center">Chapter Updated 04/29/23</p><hr>
-<h3>Overview</h3>
+The objective of this chapter is to provide information regarding
+the basic concepts of index processing for the Xbase library.<br><br>
-The main objective of this chapter is to provide information regarding the
-basic concepts of using the Xbase64 Expression module.<br><br>
-The Xbase64 library includes an expression parsing routine which assists
-application programmers by providing a high level data manipulation tool and
-also allows for building complex index keys.
+<h3>Overview</h3>
-The functions included were derived from dBASE III Plus, dBASE IV and Clipper.
-<br><br>
-Expressions are primarily used for index key definitions and filter criteria, but
-can also be used for other tasks as well.
-<br><br>
+The Xbase64 library is designed to support multiple index types simultaneously.
+Dbase, Clipper and Foxbase each had their own index formats and ultimately the
+goal is to provide support for all the legacy index file formats.
-<h3>Internal fuctioning</h3>
-The expression module works in two phases. Firstly, method
-<em>ParseExpression</em> is called and builds an expression tree from
-all the components of the expression. The tree is made up of individual
-nodes. The expression is checked for valid field names, literals,
-operands and functions. Any field references are resolved. If fields
-are used in an expression and the database name for the field is not
-included in the name with the -> operand, the routines assume the
-associated database has been successfully opened.
<br><br>
-Secondly, method <em>ProcessExpression</em> is called to process the
-expression tree created by ParseExpression(). The routine parses each
-node in the expression tree, executing functions, processing operands
-and manipulating data to produce the desired result.<br><br>
+The 4.0.x rewrite includes the NDX and MDX formats. Earlier versions of the
+library included an NTX format which will be brought forward into the
+library rewrite at some point in the future.
+
+
+<h3>Tags</h3>
+
+Each index file contains one or more tags depending on the file type. Each tag is a sort order
+and has characteristics: Sort order (ASC or DESC), unique or not unique and some formats support filtering.
+Each open table (dbf file) has an "active tag" for database operations.
+
+<h3>Index processing design</h3>
-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.
+The library is construcuted to handle index files with multiple tags per file. Single tag files like the NDX indices
+are treated as a multi tag file, but there is only one tag. This allows for maximum flexibility for future
+additional index types.
-<h3>Expression Return Types</h3>
-Expressions will return a type of CHAR, NUMERIC, DATE or LOGICAL.<br><br>
-An expression return type can be determined with method <em>
-GetExpressionResultType</em> after parsing it.<br><br>
-Expressions returning a return type of CHAR are limited to a 200 byte internal
-buffer. There is also a 100 byte limit for NDX and MDX index key support. If
-the 200 byte limit is not large enough for your application, adjust field
-<em>enum { WorkBufMaxLen = 200 };</em> in file <em>exp.h</em>.
+<h3>Index updates</h3>
+
+The library automatically updates all tags in all open index files.
+
<br><br>
+<h3>Index File Types</h3>
+
<table border=1>
-<tr><th>Return Type</th><th>XBase Type</th></tr>
-<tr><td>CHAR</td><td>xbString</td></tr>
-<tr><td>NUMERIC</td><td>xbDouble</td></tr>
-<tr><td>DATE</td><td>xbDate</td></tr>
-<tr><td>LOGICAL</td><td>xbBool</td></tr>
+<tr><th>File<br>Type</th><th>Source</th><th>Max Tags<br>Per File</th><th>Auto Opened</th><th>Sort Order</th><th>Unique Keys</th>
+ <th>Reclaimed Nodes</th><th>Filter Support</th><th>Status</th></tr>
+<tr>
+ <td>NDX</td><td>dBase</td>
+ <td><center>1</center></td>
+ <td><center>Optional</center></td>
+ <td>ASC only</td>
+ <td><center>Y</center></td>
+ <td><center>N</center></td>
+ <td><center>N</center></td>
+ <td><center>Available in 4.0.1</center></td>
+</tr>
+<tr>
+ <td>MDX</td><td>dBase</td>
+ <td><center>47</center></td>
+ <td><center>Yes</center></td>
+ <td><center>ASC or DESC</center></td>
+ <td><center>Y</center></td>
+ <td><center>Y</center></td>
+ <td><center>Y</center></td>
+ <td><center>Available in 4.0.1</center></td>
+</tr>
+<tr>
+ <td>NTX</td>
+ <td>Clipper</td>
+ <td><center>1</center></td>
+ <td><center>Optional</center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center>Pending retrofit</center></td>
+</tr>
+<tr>
+ <td>CDX</td>
+ <td>Fox Pro</td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center></center></td>
+ <td><center>Pending development</center></td>
+<tr>
+<tr>
+ <td>IDX</td><td>Fox Pro</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td>Pending development</td>
+<tr>
+
</table>
<br><br>
-Date routines return an xbDate result. In addition, the date value can be
-extracted using GetStringResult() which returns YYYYMMDD or GetDoubleResult()
-which returns a julian value.
+<h3>Index/Tag Methods</h3>
+
+<table border=1>
+<tr><th width=45%>Method</th><th>Description</th></tr>
+<tr>
+ <td>xbInt16 xbDbf::CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt )
+ </td><td>Checks a tag for missing or duplicate entries. Available if XB_DEBUG_SUPPORT is on.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::CloseIndexFile( xbIx *pIx )
+ </td><td>Close an index file. Indices are automatically closed when the table is closed.
+ <br>Not typically called in an application program.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const xbString &sKey, const xbString &sFilter,
+ xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
+ </td><td>Create a new tag.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName )
+ </td><td>Delete existing tag.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::Find( xbString &sKey )<br>xbInt16 xbDbf::Find( xbDate &dtKey )<br>xbInt16 xbDbf::Find( xbDouble &dKey )
+ </td><td>Find key value for the active tag.</td>
+</tr>
+<tr>
+ <td>xbIx * xbDbf::GetCurIx() const
+ </td><td>Returns a pointer to the current index object.</td>
+</tr>
+ <td>xbString & xbDbf::GetCurIxType() const
+ </td><td>Returns the current index type.</td>
+</tr>
+</tr>
+ <td>void * xbDbf::GetCurTag() const
+ </td><td>Retrieve pointer to the current active tag.</td>
+</tr>
+<tr>
+ <td>const xbString & xbDbf::GetCurTagName() const
+ </td><td>Returns the current tag name.</td>
+</tr>
+ <td>xbInt16 xbDbf::GetFirstKey()
+ </td><td>Retrieve the first key for the active tag.</td>
+</tr>
+<tr>
+ <td>xbIxList * xbDbf::GetIxList() const
+ </td><td>Returns a pointer to the list of active indices.
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::GetLastKey()
+ </td><td>Retrieve the last key for the active tag.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::GetNextKey()
+ </td><td>Retrieve the next key for the active tag.</td>
+</tr>
+<tr>
+ <td>xbInt32 xbDbf::GetPhysicalIxCnt() const
+ </td><td>Returns count of number of physical files opened for DBF table.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::GetPrevKey()
+ </td><td>Retrieve the previous key for the active tag.</td>
+<tr>
+ <td>xbLinkListNode<xbTag *> * xbDbf::GetTagList() const
+ </td><td>Returns pointer to linked list of open tags for the DBF file/table.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::OpenIndex( const xbString &sIxType, const xbString &sIndexName )
+ </td><td>Open an index file. Only used for index files that aren't automatically opened.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::Reindex( xbInt16 iTagOpt )
+ </td><td>Rebuild a tag. Available if XB_DEBUG_SUPPORT is on.</td>
+</tr>
+<tr>
+ <td>xbInt16 xbDbf::SetCurTag( const xbString &sTagName )<br>
+ void xbDbf::SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag )
+ </td><td>Set current tag.</td>
+</tr>
+</table>
<br><br>
-<h3>Expression Functions</h3>
-Each expression function also has a corresponding C++ function. It is
-slightly more efficient to call the C++ functions directly, rather than
-execute the expression parsing routines.<br><br>
-To add a new function, find a function that is similar to what you need, copy
-the code and modify xbxbase.h, xbfuncs.cpp, xbexp.cpp and xb_test_expression.cpp.<br><br>
+<h3>Internal Data Storage</h3>
<table border=1>
-<tr><th>Function Name</th><th>Return Type</th><th>Description</th></tr>
-<tr><td>ABS</td><td>N</td><td>Calculate absolute value of numeric expression</td></tr>
-<tr><td>ALLTRIM</td><td>C</td><td>Trim leading andtrailing whitespace from a string</td></tr>
-<tr><td>ASC</td><td>N</td><td>Return ASCII code for first character in a string</td></tr>
-<tr><td>AT</td><td>N</td><td>Return starting position of a string within a string</td></tr>
-<tr><td>CDOW</td><td>C</td><td>Retun character weekday name for a date</td></tr>
-<tr><td>CHR</td><td>C</td><td>Convert numeric expression to a character</td></tr>
-<tr><td>CMONTH</td><td>C</td><td>Return month name for a date</td></tr>
-<tr><td>CTOD</td><td>D</td><td>Return date from a character date input</td></tr>
-<tr><td>DATE</td><td>D</td><td>Return system date</td></tr>
-<tr><td>DAY</td><td>N</td><td>Return the day of the month from a date</td></tr>
-<tr><td>DEL</td><td>C</td><td>Return record deletion status for a record</td></tr>
-<tr><td>DELETED</td><td>L</td><td>Return record deletion status for a record<</td></tr>
-<tr><td>DESCEND</td><td>1</td><td>Clipper DESCEND function</td></tr>
-<tr><td>DOW</td><td>N</td><td>Return number of day of week</td></tr>
-<tr><td>DTOC</td><td>C</td><td>Return character date from input date</td></tr>
-<tr><td>DTOS</td><td>C</td><td>Return character CCYYMMDD date from input date</td></tr>
-<tr><td>EXP</td><td>N</td><td>Return exponent value</td></tr>
-<tr><td>IIF</td><td>C</td><td>Immediate If</td></tr>
-<tr><td>INT</td><td>N</td><td>Convert number to integer, truncate any decimals</td></tr>
-<tr><td>ISALPHA</td><td>L</td><td>Check if string begins with alpha character</td></tr>
-<tr><td>ISLOWER</td><td>L</td><td>Check if string begins with lower case alpha character</td></tr>
-<tr><td>ISUPPER</td><td>L</td><td>Check if string begins with upper case character</td></tr>
-<tr><td>LEFT</td><td>C</td><td>Return left characters from a string</td></tr>
-<tr><td>LEN</td><td>N</td><td>Return lenght of string</td></tr>
-<tr><td>LOG</td><td>N</td><td>Calculate logarithm</td></tr>
-<tr><td>LOWER</td><td>C</td><td>Convert upper case to lower case</td></tr>
-<tr><td>LTRIM</td><td>C</td><td>Trim left side of a string</td></tr>
-<tr><td>MAX</td><td>N</td><td>Return higher of two values</td></tr>
-<tr><td>MIN</td><td>N</td><td>Return lesser of two values</td></tr>
-<tr><td>MONTH</td><td>N</td><td>Return number of month for a given date</td></tr>
-<tr><td>RECNO</td><td>N</td><td>Return current rec number for a given table</td></tr>
-<tr><td>RECCOUNT</td><td>N</td><td>Return number of records in a given table</td></tr>
-<tr><td>REPLICATE</td><td>C</td><td>Repeat character expression N times</td></tr>
-<tr><td>RIGHT</td><td>C</td><td>Return right characters from as tring</td></tr>
-<tr><td>RTRIM</td><td>C</td><td>Trim right side of string</td></tr>
-<tr><td>SPACE</td><td>C</td><td>Generate a string of N spaces</td></tr>
-<tr><td>SQRT</td><td>N</td><td>Calculate square root</td></tr>
-<tr><td>STOD</td><td>D</td><td>Convert 8 byte CCYYMMDD date to date</td></tr>
-<tr><td>STR</td><td>C</td><td>Convert number to character string</td></tr>
-<tr><td>STRZERO</td><td>C</td><td>Convert number to character string with leading zeroes. Clipper Function.</td></tr>
-<tr><td>SUBSTR</td><td>C</td><td>Extract portion oif one string from another string</td></tr>
-<tr><td>TRIM</td><td>C</td><td>Trim left and right sides of a string</td></tr>
-<tr><td>UPPER</td><td>C</td><td>Conver lower case to upper case</td></tr>
-<tr><td>VAL</td><td>N</td><td>Convert numeric characters to number</td></tr>
-<tr><td>YEAR</td><td>N</td><td>Return year for a given date</td></tr>
+<tr><th>Type<th>Stored in DBF as</th><th>Stored in NDX as</th><th>Stored in MDX as</th></tr>
+<tr><td>C</td><td>Character data</td><td>Character data</td><td>Character data</td></tr>
+<tr><td>F</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
+<tr><td>N</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
+<tr><td>D</td><td>Text YYYYMMDD</td><td>xbDouble Julian</td><td>xbDouble Julian</td></tr>
</table>
+<br><br>
+
+<hr>
+<h2>NDX Indices</h2>
+The objective of this section is to provide information regarding the
+basic concepts of how .NDX index files work in the Xbase64 library.
+Information in this section has been acquired by searching the internet
+and by examining the structure of known good NDX indexes.<br><br>
+
+<h4>NDX Index File Characteristics</h4>
+<li>NDX indices maintain keys in ascending sort order only.<br><br>
+<li>NDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
+
+<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE.
+If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will
+add a record to the table, but not add a corresponding duplicate key to the index tag.
+The UniqueKeyOption is off (don't allow duplicates) by default.
<br><br>
-<h3>Expression Components</h3>
-Expressions are made up of one or more tokens. A token is one of literal,
-database field, operand or function. Literals are either numeric or character.
-Character literals are enclosed in 'single' or "double" quotes. numeric
-literals are a series of one or more contiguous numerals, ".", "+" or "-'".
+
+<em>Non-unique</em> Keys are not required to be unique, duplicate
+keys are allowed if the index is created with the XB_NOT_UNIQUE
+setting. Duplicate keys are stored in record number order.<br><br>
+
+<li>NDX indexes are automatically updated by the Xbase library after the
+indices are opened.<br>
+<li>Character keys are left justified and padded on the right with spaces.<br>
+<li>Numeric keys are stored as eight byte double values.<br>
+<li>Date kets are stored as julian eigth byte double values.<br>
+
+<h4>NDX File Internals</h4>
+
+NDX files are comprised of two or more 512 byte blocks or nodes of
+information. There are three types of nodes: Head Nodes, Interior
+Nodes and Leaf Nodes.<br><br>
+
+<li>The <em>Head Node</em> is the first node in the file starting at
+position zero (0) and contains information about the NDX file. There
+is only one Head Node in each index and it always starts at the
+beginning of the file.<br><br>
+
+
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>NDX Header Node</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>StartNode<TD>This identifies the root node of
+ the index. The Header node is node 0.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Total Nodes<TD>This is the count of the total
+ nodes in the index. The count includes the header node.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeys<TD>Total number of keys in the index +1
+<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyLen<TD>The index key length
+<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeysPerNode<TD>The maximum number of keys per node
+<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyType<TD>Type of key<br>
+00 - Character<br>01 - Numeric
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Keysize<TD>Key record size + 8
+<TR><TH ALIGN="LEFT">char<TD>1<TD>Unknown<TD>Reserved
+<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br>
+00 - Not Unique - XB_NON_UNIQUE<br>01 - Unique - XB_UNIQUE
+<TR><TH ALIGN="LEFT">char<TD>488<TD>KeyExpression<TD>Key expression string
+<TR><TH ALIGN="LEFT"><TD>512<TD><TD>Total bytes in node
+</TABLE>
<br><br>
-A field is simply a field name in the default database, or is in the form
-of database->fieldname.
+The following structure is used by the Xbase64 NDX routines:
+<xmp>
+ struct NdxHeadNode{
+ xbLong StartNode; /* header node is node 0 */
+ xbLong TotalNodes; /* includes header node */
+ xbLong NoOfKeys; /* actual count + 1 */
+ xbUShort KeyLen; /* length of key data */
+ xbUShort KeysPerNode; /* max number of keys per node */
+ xbUShort KeyType; /* 00 = Char, 01 = Numeric */
+ xbLong KeySize; /* KeyLen + 8 */
+ char Reserved1; /* Not sure about this one */
+ char Unique; /* 00 = not unique, 01 = unique*/
+ char KeyExpression[488]; /* key definition */
+ }
+</xmp>
+<br><br>
+
+<h4>Interior and Leaf Nodes</h4>
+
+Interior Nodes and Leaf Nodes share the same structure in an NDX file.
+The difference between the two types is that interior nodes point to
+other interior nodes or leaf nodes and leaf nodes point to records in
+a DBF file. Interior nodes are optional nodes in an NDX file,
+however if there are more than a few keys in the index there will
+certainly be one or more interior nodes in the file. There will
+always be at least one leaf node in the file. Leaf nodes contain DBF
+record numbers which point to the location of the record in the
+DBF file.<br><br>
+Interior nodes have field LeftNodeNo valued which points to the node
+which points to the keys which are less than the key value in the KeyVal
+field. There is one more LeftNodeNo value in the node than there are keys.
+The Last LeftNodeNo points to the node which is greater than the highest
+key value in the node. Interior nodes have 0 in the value for the
+DbfRecNo field.<br><br>
+Leaf nodes have 0 in the LeftNodeNo field but do have a value in the
+DbfRecNo field which points to a DFB record.<br><br>
+
+
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>NDX Interior Node and Leaf Node Structure</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeysThisNode<TD>The number of key values in this node.
+<TR><TH ALIGN="LEFT">char<TD>508<TD>KeyRec<TD>A repeating structure of
+ pointers and keys. See the next table for the KeyRec structure.
+</TABLE>
<br><br>
-<h3>Expression Literals</h3>
+<TABLE BORDER>
+<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION>
+<TR VALIGN="BASELINE">
+<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number of the lower node
+ for this key. 0 in Leaf Nodes.
+<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key.
+ 0 in Interior Nodes.
+<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value.
+</TABLE>
-<table border=1>
-<tr><th>Type</th><th>Example</th></tr>
-<tr><td>CHAR</td><td>"literal" or 'literal'</td></tr>
-<tr><td>NUMERIC</td><td>+99999.99</td></tr>
-<tr><td>DATE</td><td>{10/07/60} or {02/09/1989}</td></tr>
-</table>
+<br><br>
+For those interested in knowing how the Xbase64 DBMS manipulates and
+navigates index files, the following discussion may be helpfull.<br><br>
+Xbase64 DBMS navigates through NDX files by using an in-memory chain
+of nodes of the current location / key in use. It starts by reading the
+Head Node of the index, which points to the first node of the file. The
+first node of the file will be a leaf node if the index is small or will
+be an interior node if the index has more than one leaf node. The first
+interior node is loaded into memory, added to the node chain and points
+to the next node to read. The node is made up of one or more keys. If
+it is a leaf node, the logic looks for a matching key on the node.
+Otherwise, if it is an interior node, the logic looks at the keys until the
+search key is greater than or equal to the key in the node and then
+traverses down the tree to the next node. It continues down the tree,
+adding the nodes to the in-memory node chain until it reaches the correct
+leaf node. If it finds a matching key in the leaf node, it returns a
+XB_FOUND condition. If it doesn't find an exact match in the leaf node, it
+returns a XB_NOT_FOUND condition and stops on the key which is greater than
+the search key given.
<br><br>
-<h3>Expression Operators</h3>
-<table border=1>
-<tr><th>Type</th><th>Operator</th><th>Precedence</th><th>Result</th><th>Notes</th></tr>
-<tr><td>Parens</td><td>()</td><td>12</td></tr>
-<tr><td>Numeric Operator</td><td>+ (unary)</td><td>11</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>- (unary)</td><td>11</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>--X</td><td>10</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>++X</td><td>10</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>**</td><td>9</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>^</td><td>9</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>%</td><td>8</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>*</td><td>8</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>/</td><td>8</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>+ Addition</td><td>7</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>- Subtraction</td><td>7</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>X--</td><td>6</td><td>N</td></tr>
-<tr><td>Numeric Operator</td><td>X++</td><td>6</td><td>N</td></tr>
-<tr></tr>
-<tr><td>String Operator</td><td>+</td><td>5</td><td>C</td><td>Concatonate 1</td></tr>
-<tr><td>String Operator</td><td>-</td><td>5</td><td>C</td><td>Concatonate 2</td></tr>
-<tr></tr>
-<tr><td>Relational Operator</td><td>=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>#, <>, !=</td><td>4</td><td?L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td><</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>></td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td><=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>>=</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>$</td><td>4</td><td>L</td><td>N,C,D</td></tr>
-<tr><td>Relational Operator</td><td>==</td><td></td><td></td><td>Clipper operator, not implemented yet</td></tr>
-<tr></tr>
-<tr><td>Logical Operator</td><td>NOT</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>.NOT.</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>AND</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>.AND.</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>OR</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-<tr><td>Logical Operator</td><td>.OR.</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr>
-</table>
+<hr>
+<h2>MDX Indices</h2>
+The objective of this section is to provide information regarding the
+basic concepts of how .MDX index files work in the Xbase64 library.<br>
+Information for MDX files has been gathered by searching the internet
+and by examining the structure of known good MDX index files.<br><br>
+
+<h4>MDX Index File Characteristics</h4>
+
+<li>MDX files are the same name as the corresponding DBF file with an MDX extension.
+<li>MDX files are automatically opened by the library when the DBF file is opened.
+<li>MDX index files (aka prod indices) contain from one to 47 tags, where each tag has it's own key characteristics.
+<li>MDX indices maintain keys in either ascending or descending sort order.
+<li>MDX indices support filtered keys. For example, a filter of <b>.NOT. DELETED()</b> will keep deleted records out
+of the index tag.
+<li>MDX indices are automatically updated by the Xbase library after the
+indices are opened.
+<li>MDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
+
+<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE.
+If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will
+add a record to the table, but not add a corresponding duplicate key to the index tag.
+The UniqueKeyOption is off (don't allow duplicates) by default.
<br><br>
-<h3>Example Expressions</h3>
-<li>CUSTOMERS->LNAME + ", " + CUSTOMERS->FNAME
-<li>LNAME + ", " + FNAME
-<li>STARTDT + 90
-<li>DATE() - 7
-<li>YEAR( TODAY() )
-<li>IIF( "A" = "N", "true result", "false result" )
-<li>IIF( "A" = "N" .OR. 2 > 1 , "true result", "false result" )
-<li>IIF( .NOT. "A" = "N", "true result", "false result" )
-<li>.NOT. DELETED()
+
+<em>Non-unique</em> Keys are not required to be unique, duplicate
+keys are allowed if the index is created with the XB_NOT_UNIQUE
+setting. Duplicate keys are stored in record number order.<br><br>
+
+
+<li>Character keys are left justified and padded on the right with spaces.
+<li>Numeric keys are stored as twelve byte BCD values.
+<li>Date keys are stored as eight byte double julian values.
+
+<h4>MDX File Internals</h4>
+
+The following information is not needed to use the library, it is just included
+for general information.<br><br>
+
+MDX files are comprised of 512 pages where multiple pages make a block. The default
+setting is 1024 blocks, each block containing two pages.<br><br>
+
+The first four pages contain:
+<li>Bytes 0 - 543 contain general file information.
+<li>Bytes 544 - 2047 is a 47 item table containing specific tag information.
+<br><br>
+
+Pages five and beyound:
+<li>Bytes 2048 and beyond contain tag header blocks, interior nodes and leaf nodes.
+
+<br><br>
+
+<h4>Interior and Leaf Nodes</h4>
+
+Interior Nodes and Leaf Nodes share the same structure in an NDX file with
+the exception that interior nodes have a non zero number immediately
+after the rightmost key on the node.
+
+Interior nodes point to other interior nodes or leaf nodes and leaf nodes point
+to records in a DBF file. Interior nodes are optional nodes in an MDX file,
+however if there are more than a few keys in the index there will
+certainly be one or more interior nodes in the file. There will
+always be at least one leaf node per tag in the file. Leaf nodes
+contain DBF record numbers which point to the location of the record
+in the DBF file.<br><br>
+
+<hr>
+<br><br>
+<h2>TDX Indices</h2>
+TDX index files are an Xbase64 library specific implementation of indexing which
+can be used for creating temporary indices. They can be created as needed and are
+automatically deleted when the table/DBF file is closed.<br><br>
+
+TDX files are built on the MDX index logic and supports the following functionality:
+<li>Complex Key Expressions
+<li>Filters
+<li>Unique / Non-unique keys
+<li>Ascending / Descending keys
+<li>Max of 47 unique temporary index tags
<br><br>
+To create a temporary index, set the Type field to "TDX" when using the xbDbf::CreateTag() method.
+All other functionality is the same when using temp indices. The only requirement is to set the
+type when creating it.<br><br>
-<h3>Example program</h3>
-For an example on how to use the expression logic, see program
-<em>src/examples/xb_ex_expression.cpp</em>.
+Additionally, the create tag only defines the index. If the table is populated with data and
+you need the index populated accordingly, use the xbDbf::Reindex() method to bring it up to data after
+creating it.
<br><br>
<hr>
diff --git a/docs/html/xbc6.html b/docs/html/xbc6.html
index 094545f..aa38ad4 100755
--- a/docs/html/xbc6.html
+++ b/docs/html/xbc6.html
@@ -2,152 +2,112 @@
<HTML>
<TITLE>Xbase DBMS Chapter 6</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H1><p align="center">Index Overview</p></H1>
-<p align="center">Chapter Updated 12/09/22</p><hr>
+<H2><p align="center">SQL Support</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
-The objective of this chapter is to provide information regarding
-the basic concepts of index processing for the Xbase library.<br><br>
-
-
-<h2>Overview</h2>
-
-The Xbase library is designed to support multiple index types simultaneously.
-Dbase, Clipper and Foxbase each had their own index formats and ultimately the
-goal is to provide support for all the legacy index file formats.
+<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>
-The 4.0.x rewrite includes the NDX and MDX formats. Earlier versions of the
-library included NTX and CDX formats which will be brought forward into the
-library rewrite at some point in the future.
-
-
-<h2>Tags</h2>
-
-Each index file contains one or more tags depending on the file type. Each tag is a sort order
-and has characteristics: Sort order (ASC or DESC), unique or not unique and some formats support filtering.
-Each open table (dbf file) has an "active tag" for database operations.
-
-<h2>Index processing design</h2>
+<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]
-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.
+<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>
-<h2>Index updates</h2>
-The library automatically updates all tags in all open index files.
+<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>
-<h2>Index File Types</h2>
+<hr>
-<table border=1>
-<tr><th>File<br>Type</th><th>Source</th><th>Max Tags<br>Per File</th><th>Auto Opened</th><th>Sort Order</th><th>Unique Keys</th>
- <th>Reclaimed Nodes</th><th>Filter Support</th><th>Status</th></tr>
-<tr>
- <td>NDX</td><td>dBase</td>
- <td><center>1</center></td>
- <td><center>Optional</center></td>
- <td>ASC only</td>
- <td><center>Y</center></td>
- <td><center>N</center></td>
- <td><center>N</center></td>
- <td><center>Available in 4.0.1</center></td>
-</tr>
-<tr>
- <td>MDX</td><td>dBase</td>
- <td><center>47</center></td>
- <td><center>Yes</center></td>
- <td><center>ASC or DESC</center></td>
- <td><center>Y</center></td>
- <td><center>Y</center></td>
- <td><center>Y</center></td>
- <td><center>Available in 4.0.1</center></td>
-</tr>
-<tr>
- <td>NTX</td>
- <td>Clipper</td>
- <td><center>1</center></td>
- <td><center>Optional</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>Pending upgrades</center></td>
-</tr>
-<tr>
- <td>CDX</td>
- <td>Fox Pro</td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>?</center></td>
- <td><center>Pending upgrades</center></td>
-<tr>
-<tr>
- <td>IDX</td><td>Fox Pro</td><td></td><td></td><td></td><td></td><td></td><td></td><td>Undeveloped</td>
-<tr>
-</table>
+<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>
-<br><br>
-<h2>Index/Tag Methods</h2>
-<table border=1>
-<tr><th>Method</th><th>Description</th></tr>
-
-<tr>
- <td>xbDbf::CheckTagIntegrity</td><td>Checks a tag for missing or duplicate entries. Available if XB_DEBUG_SUPPORT is on.</td>
-</tr>
-<tr>
- <td>xbDbf::CreateTag</td><td>Create a new tag.</td>
-</tr>
-<tr>
- <td>xbDbf::DeleteTag</td><td>Delete existing tag.</td>
-</tr>
-<tr>
- <td>xbDbf::Find</td><td>Find key value for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetFirsKey</td><td>Retrieve the first key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetLastKey</td><td>Retrieve the last key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetNextKey</td><td>Retrieve the next key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetPrevKey</td><td>Retrieve the previous key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::GetCurTag</td><td>Retrieve the tag name key for the active tag.</td>
-</tr>
-<tr>
- <td>xbDbf::OpenIndex</td><td>Open an index file. Only used for index files that aren't automatically opened.</td>
-</tr>
-<tr>
- <td>xbDbf::Reindex</td><td>Rebuild a tag. Available if XB_DEBUG_SUPPORT is on.</td>
-</tr>
-<tr>
- <td>xbDbf::SetCurTag</td><td>Set current tag.</td>
-</tr>
-</table>
-<br><br>
-<h2>Internal Data Storage</h2>
-<table border=1>
-<tr><th>Type<th>Stored in DBF as</th><th>Stored in NDX as</th><th>Stored in MDX as</th></tr>
-<tr><td>C</td><td>Character data</td><td>Character data</td><td>Character data</td></tr>
-<tr><td>F</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
-<tr><td>N</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr>
-<tr><td>D</td><td>Text YYYYMMDD</td><td>xbDouble Julian</td><td>xbDouble Julian</td></tr>
-</table>
+<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>
-<p><img src="xbase.jpg"><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/xbc7.html b/docs/html/xbc7.html
index 20a60de..6aa7135 100755
--- a/docs/html/xbc7.html
+++ b/docs/html/xbc7.html
@@ -2,151 +2,51 @@
<HTML>
<TITLE>Xbase DBMS Chapter 7</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">NDX Indices</p></H2>
-<p align="center">Chapter Updated 11/27/22</p><hr>
+<H2><p align="center">Class Inventory</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+<br>
+<center><h3>Class Descriptions</h3></center>
+
+<center>
+<table border=1>
+<tr><th>Class</th><th>Description</th></tr>
+<tr><td>xbBcd</td><td>Supports binary coded decimal data</td></tr>
+<tr><td>xbBlockRead<td>Supports block read functionality for improved sequential file access performance.</td></tr>
+<tr><td>xbDate</td><td>Support date operations on a given date formatted as YYYYMMDD</td></tr>
+<tr><td>xbDbf</td><td>Base class for DBF file handling. If you are adding support for a new file type, <br>derive new file type class from this.</td></tr>
+<tr><td>xbDbf3</td><td>Derived from xbDbf, supports DBase V3 files</td></tr>
+<tr><td>xbDbf4</td><td>Derived from xbDbf, supports DBase V4 files</td></tr>
+<tr><td>xbExp</td><td>Class for supporting expression logic</td></tr>
+<tr><td>xbExpNode</td><td>Class definition of a single node, utilized by xbExp</td></tr>
+<tr><td>xbFile</td><td>Main file class. If you are porting this library to another platform, start here</td></tr>
+<tr><td>xbFilter</td><td>Supports filters</td></tr>
+<tr><td>xbIx</td><td>Base class for index file support. If you are adding support for a new index type, <br>derive new index type class from this.</td></tr>
+<tr><td>xbIxNdx</td><td>Derived from xbIx, supports NDX style indices.</td></tr>
+<tr><td>xbIxMdx</td><td>Derived from xbIx, supports MDX style indices.</td></tr>
+<tr><td>xbIxTdx</td><td>Derived from xbIxMdx, supports TDX (temporary) style indices.<br>Exclusive to XBase64, not compatible with other XBase tools.</td></tr>
+<tr><td>xbLinkList</td><td>Class supporting linked list functionality</td></tr>
+<tr><td>xbLinkListOrd</td><td>Class supporting ordered linked list functionality</td></tr>
+<tr><td>xbLinkListNode</td><td>Class defining one node, used by xbLinkList and xbLinkListOrd</td></tr>
+<tr><td>xbLog</td><td>Class supporting general log file activity</td></tr>
+<tr><td>xbMemo</td><td>Base class for supporting memo (.DBT) files. If you are adding support for a new memo type, <br>derive new memo type class from this.</td></tr>
+<tr><td>xbMemoDbt3</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
+<tr><td>xbMemoDbt4</td><td>Derived from xbMemo, supports V3 Memo files</td></tr>
+<tr><td>xbSql</td><td>Supports SQL access</td></tr>
+<tr><td>xbSsv</td><td>Base class, shared system values</td></tr>
+<tr><td>xbString</td><td>String handling class</td></tr>
+<tr><td>xbTag</td><td>Class to support index tags</td></tr>
+<tr><td>xbTblMgr</td><td>Class used internally in the library for managing multiple open files/tables</td></tr>
+<tr><td>xbUda</td><td>Class for supporting fields for the xbSql functions. Stands for User data area</td></tr>
+<tr><td>xbXBase</td><td>Class to tie everything together. Every application program starts with one of these</td></tr>
+</table>
+</center>
-The objective of this chapter is to provide information regarding the
-basic concepts of how .NDX index files work in the Xbase environment.<br><br>
-
-The information in this chapter has been gathered by searching the internet
-and by examining the structure of known good NDX indexes.<br><br>
-
-<h4>NDX Index File Characteristics</h4>
-
-<li>NDX indices maintain keys in ascending sort order only.<br><br>
-<li>NDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
-
-<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE.
-If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will
-add a record to the table, but not add a corresponding duplicate key to the index tag.
-The UniqueKeyOption is off (don't allow duplicates) by default.
-<br><br>
-
-<em>Non-unique</em> Keys are not required to be unique, duplicate
-keys are allowed if the index is created with the XB_NOT_UNIQUE
-setting. Duplicate keys are stored in record number order.<br><br>
-
-<li>NDX indexes are automatically updated by the Xbase library after the
-indices are opened.<br><br>
-
-<li>Character keys are left justified and padded on the right with spaces.<br><br>
-
-<li>Numeric keys are stored as eight byte double values.<br><br>
-
-<h4>NDX File Internals</h4>
-
-NDX files are comprised of two or more 512 byte blocks or nodes of
-information. There are three types of nodes: Head Nodes, Interior
-Nodes and Leaf Nodes.<br><br>
-
-<li>The <em>Head Node</em> is the first node in the file starting at
-position zero (0) and contains information about the NDX file. There
-is only one Head Node in each index and it always starts at the
-beginning of the file.<br><br>
-
-
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>NDX Header Node</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>StartNode<TD>This identifies the root node of
- the index. The Header node is node 0.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Total Nodes<TD>This is the count of the total
- nodes in the index. The count includes the header node.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeys<TD>Total number of keys in the index +1
-<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyLen<TD>The index key length
-<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeysPerNode<TD>The maximum number of keys per node
-<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyType<TD>Type of key<br>
-00 - Character<br>01 - Numeric
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Keysize<TD>Key record size + 8
-<TR><TH ALIGN="LEFT">char<TD>1<TD>Unknown<TD>Reserved
-<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br>
-00 - Not Unique - XB_NON_UNIQUE<br>01 - Unique - XB_UNIQUE
-<TR><TH ALIGN="LEFT">char<TD>488<TD>KeyExpression<TD>Key expression string
-<TR><TH ALIGN="LEFT"><TD>512<TD><TD>Total bytes in node
-</TABLE>
-<br><br>
-The following structure is used by the Xbase NDX routines:
-<xmp>
- struct NdxHeadNode{
- xbLong StartNode; /* header node is node 0 */
- xbLong TotalNodes; /* includes header node */
- xbLong NoOfKeys; /* actual count + 1 */
- xbUShort KeyLen; /* length of key data */
- xbUShort KeysPerNode; /* max number of keys per node */
- xbUShort KeyType; /* 00 = Char, 01 = Numeric */
- xbLong KeySize; /* KeyLen + 8 */
- char Reserved1; /* Not sure about this one */
- char Unique; /* 00 = not unique, 01 = unique*/
- char KeyExpression[488]; /* key definition */
- }
-</xmp>
-<br><br>
-
-<h4>Interior and Leaf Nodes</h4>
-
-Interior Nodes and Leaf Nodes share the same structure in an NDX file.
-The difference between the two types is that interior nodes point to
-other interior nodes or leaf nodes and leaf nodes point to records in
-a DBF file. Interior nodes are optional nodes in an NDX file,
-however if there are more than a few keys in the index there will
-certainly be one or more interior nodes in the file. There will
-always be at least one leaf node in the file. Leaf nodes contain DBF
-record numbers which point to the location of the record in the
-DBF file.<br><br>
-
-Interior nodes have field LeftNodeNo valued which points to the node
-which points to the keys which are less than the key value in the KeyVal
-field. There is one more LeftNodeNo value in the node than there are keys.
-The Last LeftNodeNo points to the node which is greater than the highest
-key value in the node. Interior nodes have 0 in the value for the
-DbfRecNo field.<br><br>
-
-Leaf nodes have 0 in the LeftNodeNo field but do have a value in the
-DbfRecNo field which points to a DFB record.<br><br>
-
-
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>NDX Interior Node and Leaf Node Structure</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeysThisNode<TD>The number of key values in this node.
-<TR><TH ALIGN="LEFT">char<TD>508<TD>KeyRec<TD>A repeating structure of
- pointers and keys. See the next table for the KeyRec structure.
-</TABLE>
+<hr>
<br><br>
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number of the lower node
- for this key. 0 in Leaf Nodes.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key.
- 0 in Interior Nodes.
-<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value.
-</TABLE>
+Fix me...
+<p><img src="Xbase64ClassDiagramV2.jpeg" width=1800 height=1800><br>
<br><br>
-For those interested in knowing how the Xbase DBMS manipulates and
-navigates index files, the following discussion may be helpfull.<br><br>
-
-Xbase DBMS navigates through NDX files by using an in-memory chain
-of nodes of the current location / key in use. It starts by reading the
-Head Node of the index, which points to the first node of the file. The
-first node of the file will be a leaf node if the index is small or will
-be an interior node if the index has more than one leaf node. The first
-interior node is loaded into memory, added to the node chain and points
-to the next node to read. The node is made up of one or more keys. If
-it is a leaf node, the logic looks for a matching key on the node.
-Otherwise, if it is an interior node, the logic looks at the keys until the
-search key is greater than or equal to the key in the node and then
-traverses down the tree to the next node. It continues down the tree,
-adding the nodes to the in-memory node chain until it reaches the correct
-leaf node. If it finds a matching key in the leaf node, it returns a
-XB_FOUND condition. If it doesn't find an exact match in the leaf node, it
-returns a XB_NOT_FOUND condition and stops on the key which is greater than
-the search key given.
-
<hr>
<p><img src="xbase.jpg"><br><hr>
</BODY>
diff --git a/docs/html/xbc8.html b/docs/html/xbc8.html
index fcc461c..c7fccbc 100755
--- a/docs/html/xbc8.html
+++ b/docs/html/xbc8.html
@@ -2,77 +2,222 @@
<HTML>
<TITLE>Xbase DBMS Chapter 8</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">MDX Indices</p></H2>
-<p align="center">Chapter Updated 12/02/22</p><hr>
+<H2><p align="center">Class xbSsv</p></H2>
+<p align="center">Chapter Updated 04/13/28</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>
+<h3>Class xbSsv - Shared System Values.</h3>
-The information in this chapter has been gathered by searching the internet
-and by examining the structure of known good <DX indexes.<br><br>
+Base class xbSsv is used for maintaining static variables used system
+wide by the XBase library routines and is a base class that is used by the xbXBase class.
+See the diagram in chapter 15 to gain an understanding of where the xbSsv class sits in relation to the
+other classes. Accessing the methods in this class are done via the xbXBase class instance.<br><br>
+Additionally, there are a few other misc routines contained in this class that are available to all
+subordinate classes/objects.
+<br><br><br><br>
-<h4>MDX Index File Characteristics</h4>
+<center>
+<table border=1>
+<tr><th width=40%>Method</th><th>Description</th></tr>
-<li>MDX files are the same name as the corresponding DBF file with an MDX extension.
-<li>MDX files are automatically opened by the library when the DBF file is opened.
-<li>MDX index files (aka prod indices) contain from one to 47 tags, where each tag has it's own key characteristics.
-<li>MDX indices maintain keys in either ascending or descending sort order.
-<li>MDX indices support filtered keys. For example, a filter of <b>.NOT. DELETED()</b> will keep deleted records out
-of the index tag.
-<li>MDX indices are automatically updated by the Xbase library after the
-indices are opened.
+<tr><td>void BitDump( unsigned char c ) const<br>void BitDump( char c ) const</td><td>These routines dump the bits for a specified char field to stdout.</td></tr>
+<tr><td>xbBool BitSet( unsigned char c, xbInt16 iBitNo ) const</td><td>This routine will set a specified bit in a char field.</td></tr>
+<tr><td>void DisplayError( xbInt16 ErrorCode ) const</td><td>This routine prints a description for a specifed error to stdout.</td></tr>
-<li>MDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
+<tr><td>xbString& GetDataDirectory() const<br>void SetDataDirectory( const xbString &sDataDirectory )</td>
+ <td>Get and Set the current directory where the library routines expect to find the .DBF, .DBT, .NDX and .MDX files.</td></tr>
-<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE.
-If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will
-add a record to the table, but not add a corresponding duplicate key to the index tag.
-The UniqueKeyOption is off (don't allow duplicates) by default.
-<br><br>
+<tr><td>xbString& GetDefaultDateFormat() const<br>void SetDefaultDateFormat( const xbString &sDefaultDateFormat )</td>
+ <td>Get and Set the current default date format used by the date formatting routines if no format specifier is provided.</td></tr>
-<em>Non-unique</em> Keys are not required to be unique, duplicate
-keys are allowed if the index is created with the XB_NOT_UNIQUE
-setting. Duplicate keys are stored in record number order.<br><br>
+<tr><td>xbInt16 GetEndianType() const</td><td>Returns the current Endian type of the machine the library is operating on.</td></tr>
+<tr><td>const char *GetErrorMessage( xbInt16 ErrorCode ) const</td><td>Returns a pointer to an error message for a given error number.</td></tr>
+<tr><td>xbBool GetDefaultAutoCommit() const<br>void SetDefaultAutoCommit( xbBool bDefaultAutoCommit )</td>
+ <td>Get and Set the default auto commit status. If auto commit is on, the library will automatically post any updates to the database when navigating away from an updated record.</td></tr>
-<li>Character keys are left justified and padded on the right with spaces.
-<li>Numeric keys are stored as twelve byte BCD values.
-<li>Date keys are stored as eight byte double julian values.
+<tr><td>xbBool GetHomeDir( xbString &sHomeDirOut )</td><td>Get the home directory for the current user.</td></tr>
-<h4>MDX File Internals</h4>
+<tr><td>xbString& GetLogDirectory() const<br>void SetLogDirectory( const xbString &sLogDirectory )</td>
+ <td>Get and set the directory location for any system generated logfiles.</td></tr>
+<tr><td>xbString& GetLogFileName() const<br>void SetLogFileName( const xbString &sLogFileName )</td><td>Returns the default log file name.</td></tr>
-The following information is not needed to use the library, it is just included
-for general information.<br><br>
-MDX files are comprised of 512 pages where multiple pages make a block. The default
-setting is 1024 blocks, each block containing two pages.<br><br>
+<tr><td>xbBool GetMultiUser() const<br>void SetMultiUser( xbBool bMultiUser )</td>
+ <td>Get and set multi user status. This turns auto locking on and off. For better performance in single user applications, turn multuser off.</td></tr>
-The first four pages contain:
-<li>Bytes 0 - 543 contain general file information.
-<li>Bytes 544 - 2047 is a 47 item table containing specific tag information.
-<br><br>
+<tr><td>char GetPathSeparator() const</td>
+ <td>Get the path separator value for the current environment. Returns either \ (for Windows environment) or / (for Unix environment).</td></tr>
-Pages five and beyound:
-<li>Bytes 2048 and beyond contain tag header blocks, interior nodes and leaf nodes.
+<tr><td>xbString& GetTempDirectory() const<br>void SetTempDirectory( const xbString &sTempDirectory )</td><td>Get and set the temp folder.</td></tr>
-<br><br>
-<h4>Interior and Leaf Nodes</h4>
+<tr><td>xbInt16 GetUniqueKeyOpt() const<br>xbInt16 SetUniqueKeyOpt( xbInt16 iUniqueKeyOpt )</td>
+ <td>Determines library behavior for unique key processing. The original Dbase (tm) product allowed duplicate recrds in the .DBF file when the unique option was specified for a given index tag.
+ The Xbase library supports either the original DBase behavior (XB_EMULATE_DBASE), or the prevention of duplicate records for duplicate keys (XB_HALT_ON_DUPKEY).</td></tr>
+
+
+<tr><td>xbInt16 GetDefaultLockRetries() const<br>void SetDefaultLockRetries( xbInt16 iRetryCount )</td>
+ <td>Get and Set the number of times to attempt a lock</td></tr>
+
+<tr><td>xbInt32 GetDefaultLockWait() const<br>void SetDefaultLockWait( xbInt32 lRetryWait )
+ </td><td>Get and Set the wait time between lock attempts.</td></tr>
-Interior Nodes and Leaf Nodes share the same structure in an NDX file with
-the exception that interior nodes have a non zero number immediately
-after the rightmost key on the node.
+<tr><td>xbInt16 GetDefaultLockFlavor() const<br>void SetDefaultLockFlavor( xbInt16 iLockFlavor )
+ </td><td>For future use. With current versions, only DBase (TM) locking offsets are supported.</td></tr>
-Interior nodes point to other interior nodes or leaf nodes and leaf nodes point
-to records in a DBF file. Interior nodes are optional nodes in an MDX file,
-however if there are more than a few keys in the index there will
-certainly be one or more interior nodes in the file. There will
-always be at least one leaf node per tag in the file. Leaf nodes
-contain DBF record numbers which point to the location of the record
-in the DBF file.<br><br>
+<tr><td>xbBool GetDefaultAutoLock() const<br>void SetDefaultAutoLock( xbBool bAutoLock )<br>void EnableDefaultAutoLock()<br>void DisableDefaultAutoLock()
+ </td><td>Set, Get or update Auto Lock Status</td></tr>
+
+
+<tr><td>xbInt16 GetCreateMdxBlockSize() const<br>xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize )
+ </td><td>Set or get MDX Index block size. Must be a multiple of 512.</td></tr>
+
+<tr><td>xbUInt32 GetDefaultBlockReadSize() const<br>void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize )
+ </td><td>Set or Get the default block size for Block Read functionality. Block reading is used to improve sequentential access performance.</td></tr>
+</table>
<br><br>
+<h3>Example program using xbSsv methods</h3>
+</center>
+<xmp>
+/* xb_ex_ssv.cpp
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This program demonstrates using functionality of the xbSsv class (Shared system values)
+
+*/
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main( int ac, char ** av ){
+
+ xbXBase x; // set up xbase for business
+ xbString sMsg; // a message string
+
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ std::cout << sMsg.Str() << std::endl;
+
+ // example code to set up log file usage
+ #ifdef XB_LOGGING_SUPPORT
+ char cSeperator; // is this a unix (/) or windows (\) file system
+ xbString sLog; // general string for log file activities
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
+
+ cSeperator = sLog.GetPathSeparator(); // get the seperator from
+ std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
+
+ sLog.Sprintf( "..%c", cSeperator );
+ x.SetLogDirectory( sLog );
+ std::cout << "sLog = [" << sLog.Str() << "]\n";
+
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
+
+ // turn on logging after file name set
+ x.EnableMsgLogging();
+ #endif // XB_LOGGING_SUPPORT
+
+ // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
+ // void DisplayError( xbInt16 ErrorCode ) const;
+ std::cout << "DisplayError( -100 ) - ";
+ x.DisplayError( -100 );
+ // << "]" << std::endl;
+
+
+ // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
+ // xbString& GetDefaultDateFormat() const;
+ std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl;
+
+ // void SetDataDirectory ( const xbString &sDataDirectory );
+ // xbString& GetDataDirectory() const;
+ std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl;
+
+ // xbInt16 GetEndianType() const;
+ if( x.GetEndianType() == 'L' )
+ std::cout << "Little Endian Architecture." << std::endl;
+ else
+ std::cout << "Bid Endian Architecture." << std::endl;
+
+ //xbBool GetDefaultAutoCommit() const;
+ //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
+ if( x.GetDefaultAutoCommit())
+ std::cout << "AutoCommit is on." << std::endl;
+ else
+ std::cout << "AutoCommit is off." << std::endl;
+
+ //xbBool GetMultiUser () const;
+ //void SetMultiUser ( xbBool bMultiUser );
+ if( x.GetMultiUser())
+ std::cout << "Multi user (locking) is enabled." << std::endl;
+ else
+ std::cout << "Multi user (locking) not enabled." << std::endl;
+
+ #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+ // xbInt16 GetUniqueKeyOpt () const;
+ // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
+ // XB_HALT_ON_DUPKEY
+ // XB_EMULATE_DBASE
+ if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
+ std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
+ else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
+ std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
+ #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+
+ #ifdef XB_LOCKING_SUPPORT
+ //xbInt16 GetDefaultLockRetries () const;
+ //void SetDefaultLockRetries ( xbInt16 iRetryCount );
+ //xbInt32 GetDefaultLockWait () const;
+ //void SetDefaultLockWait ( xbInt32 lRetryWait );
+ //xbInt16 GetDefaultLockFlavor () const;
+ //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
+ //xbBool GetDefaultAutoLock () const;
+ //void SetDefaultAutoLock ( xbBool bAutoLock );
+ //void EnableDefaultAutoLock ();
+ //void DisableDefaultAutoLock ();
+
+ std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
+ std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
+ std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_MDX_SUPPORT
+ // xbInt16 GetCreateMdxBlockSize() const;
+ // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
+ std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ // xbUInt32 GetDefaultBlockReadSize() const;
+ // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
+ std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+ //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
+ //void BitDump ( unsigned char c ) const;
+ //void BitDump ( char c ) const;
+ std::cout << "BitDump( 'A' ) - ";
+ x.BitDump( 'A' );
+
+ return 0;
+}
+
+
+</xmp>
+
+<br><br>
<hr>
<p><img src="xbase.jpg"><br><hr>
</BODY>
diff --git a/docs/html/xbc9.html b/docs/html/xbc9.html
index afcd2fa..1d39a96 100755
--- a/docs/html/xbc9.html
+++ b/docs/html/xbc9.html
@@ -2,179 +2,254 @@
<HTML>
<TITLE>Xbase DBMS Chapter 9</TITLE>
<BODY BGCOLOR=#FFFFFF>
-<H2><p align="center">NTX Indices</p></H2>
-<p align="center">Chapter Updated 11/28/22</p><hr>
+<H2><p align="center">Class xbXBase</p></H2>
+<p align="center">Chapter Updated 04/28/23</p><hr>
+<h3>Class xbXBase - Core Level Class</h3>
-<h3>This chapter might be out of date. The NTX module is pending review and updates for release 4.x.x</h3>
-The objective of this chapter is to provide information regarding the
-basic concepts of how .NTX index files work in the Xbase environment.<br><br>
+The xbXBase class is the core class that needs to be in every application program.
+Established an instance of class xbXBase before any other Xbase calls are made.
-The information in this chapter has been gathered by searching the internet
-and by examining the structure of known good NTX indexes.<br><br>
+<i>xbXBase x</i>
-<h4>NTX Index File Characteristics</h4>
-
-<ul><li>NTX indices maintain keys in ascending sort order only.<br><br>
-<li>NTX indices support <em>unique</em> or <em>non unique</em> keys.<br><br>
-
-<em>Unique</em> keys must be unique. The database update routines will
-fail if an attempt to add a non-unique key is performed.<br><br>
-
-<em>Non-unique</em> Keys are not required to be unique, duplicate
-keys are allowed if the index is created with the XB_NOT_UNIQUE
-setting. Duplicate keys are stored in record number order.<br><br>
-
-<li>NTX indexes are automatically updated by the Xbase library after the
-indices are opened.<br><br>
-
-<li>Character keys are left justified and padded on the right with spaces.<br><br>
-
-<li>Numeric keys are stored as eight byte double values.<br><br>
-
-The numeric key processing logic performs floating point numeric
-calculations on eight byte double values. This logic may be compute intensive
-and slow on older machines, especially the older intel processors without a
-math coprocessor chip.
-
-</ul>
-
-
-<h4>NTX File Internals</h4>
-
-NTX files are comprised of two or more 1024 byte blocks or nodes of
-information. There are three types of nodes: Head Nodes, Interior
-Nodes and Leaf Nodes.<br><br>
-
-The <em>Head Node</em> is the first node in the file starting at
-position zero (0) and contains information about the NTX file. There
-is only one Head Node in each index and it always starts at the
-beginning of the file.<br><br>
-
-
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>NTX Header Node</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Signature Byte<TD>The Clipper signature byte. 0x003h indicates Clipper 87. 0x006h indicates Clipper 5.x
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Indexing Version Number<TD>Documented as the "Compiler Version" but I have observed an increasing number. Incremented whenever the index is changed.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Node Offset<TD>The offset to the first node.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Unused Page Offset<TD>The offset to the first unused node.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size + 8<TD>The Key Size plus 8 bytes.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size<TD>The size (length) of the key.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Number of Decimals<TD>Number of decimal places in key.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Max Items Per Node<TD>The maximum number of key per node.
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>1/2 The Max Items Per Node<TD>Half the maximum number of key per node. Important in a B-tree system, as this is the minimum number of keys that must be on a page.
-<TR><TH ALIGN="LEFT">char<TD>256<TD>KeyExpression<TD>Key expression string
-<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br>
- 00 - Not Unique - XB_NON_UNIQUE<br>
- 01 - Unique - XB_UNIQUE
-<TR><TH ALIGN="LEFT">char<TD>745<TD>Unused<TD>Unused
-
-
-<TR><TH ALIGN="LEFT"><TD>1024<TD><TD>Total bytes in node
-</TABLE>
<br><br>
-The following structure is used by the Xbase NTX routines:
-<xmp>
+xbXBase is derived from base classes xbTblMgr and xbSsv.
+<br><br><br><br>
+
+<center>
+<table border=1>
+<tr><th width=40%>Method</th><th>Description</th><th>Category</th></tr>
+
+
+<tr><td>xbInt16 CloseAllTables()</td><td>Close all open tables.</td><td>Table</tr>
+
+<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf &dbf, int dummy )</td><td>Open highest version available for sTableName.</td><td>Table</tr>
+<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf **dbf )</td><td>Open highest version available for sTableName.</td><td>Table</tr>
+<tr><td>xbDbf * Open( const xbString &sTableName, xbInt16 &iRc )</td><td>Open the highest available version of the dbf file. Defaults to XB_READ_WRITE and XB_MULTI_USER mode.</td><td>Table</tr>
+<tr><td>xbDbf * Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &iRc )</td><td>Open table.</td><td>Table</tr>
+
+<tr><td colspan=3><hr></td></tr>
+<tr><td>void DisableMsgLogging()</td><td>Disable logging routines.</td><td>Logging</td></tr>
+<tr><td>void EnableMsgLogging ()</td><td>Enable logging routines.</td><td>Logging</td></tr>
+<tr><td>xbInt16 FlushLog()</td><td>Flush any queued logfile updates to disk.</td><td>Logging</td></tr>
+<tr><td>const xbString &GetLogDirectory () const</td><td>Get the current logfile directory.</td><td>Logging</td></tr>
+<tr><td>const xbString &GetLogFileName () const</td><td>Get the current logfile name.</td><td>Logging</td></tr>
+<tr><td>const xbString &GetLogFqFileName() const</td><td>Get fully qualified logfile name.</td><td>Logging</td></tr>
+<tr><td>xbBool GetLogStatus () const</td><td>Get the logging status.</td><td>Logging</td></tr>
+<tr><td>void SetLogDirectory( const xbString &sLogFileDirectory )</td><td>Set the log directory. Must be done while logging is off.</td><td>Logging</td></tr>
+<tr><td>void SetLogFileName( const xbString &sLogFileName )</td><td>Set the log file name. Must be done while logging is off.</td><td>Logging</td></tr>
+<tr><td>void SetLogSize( size_t lSize )</td><td>Set the logfile size. After the size is reached, the log file roll.</td><td>Logging</td></tr>
+<tr><td>xbInt16 WriteLogBytes ( xbUInt32 lCnt, const char *p )</td><td>Write lCnt bytes pointed to by pointer p to the logfile.</td><td>Logging</td></tr>
+<tr><td>xbInt16 WriteLogMessage( const xbString &sLogMessage, xbInt16 iOutputOpt = 0 )</td><td>Write a string to the logfile.</td><td>Logging</td></tr>
+
+<tr><td colspan=3><hr></td></tr>
+
+<tr><td>xbInt16 xbXBase::CreateFqn( const xbString &sDirIn, const xbString &sNameIn, const xbString &sExtIn, xbString &sFqnOut )</td>
+<td>Create fully qualified file name from directory, file name and optional extension. This routine sets the correct separators dependent on OS.
+</td><td>Misc</td></tr>
+
+
+<tr><td>xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, xbString &sOptRqst, xbString &sParmOut )<br>
+xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, const char *sOptRqst, xbString &sParmOut )</td><td>Parse command line values seeking given parameter info.</td><td>Misc</td></tr>
+
+<tr><td>void xbSleep( xbInt32 lMillisecs )</td><td>Sleep command, used mainly in lock commands for waiting between retries.</td><td>Misc</td></td></tr>
+
+<tr><td colspan=3><hr></td></tr>
+<tr><td>xbInt16 ABS( xbDouble dIn, xbDouble &dOut )</td><td>Dbase ABS function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ALLTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase ALLTRIM function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ASC( const xbString &s, xbDouble &dAscOut )</td><td>Dbase ASC function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 AT( const xbString &sSrchFor, const xbString &sBase, xbDouble &dPos )</td><td>Dbase AT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 CDOW( xbDate &dInDate, xbString &sOutDow )</td><td>Dbase CDOW function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 CHR( xbDouble dAsciCd, xbString &sOut )</td><td>Dbase CHR function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 CMONTH( xbDate &dInDate, xbString &sOutMonth )</td><td>Dbase CMONTH function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 CTOD( const xbString &sInDate, xbDate &dOutDate )</td><td>Dbase CTOD function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DATE( xbDate &dOutDate )</td><td>Dbase DATE function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DAY( const xbDate &dInDate, xbDouble &dOutDay )</td><td>Dbase DAY function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DEL( xbDbf * d, xbString &sOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DEL function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DELETED( xbDbf * d, xbBool &bOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DELETED function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DESCEND( const xbString &sIn,xbString &sOut )<br>xbInt16 DESCEND( const xbDate &dInDate, xbDate &dOutDate )<br>xbInt16 DESCEND( const xbDouble dIn, xbDouble &dsOut )</td><td>Dbase DESCEND function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DOW( const xbDate &sInDate, xbDouble &dDowOut )</td><td>Dbase DOW function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DTOC( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOC function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 DTOS( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOS function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 EXP( xbDouble dIn, xbDouble &dOut )</td><td>Dbase EXP function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult )</td><td>Dbase IIF function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 INT( xbDouble dIn, xbDouble &dOut )</td><td>Dbase INT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ISALPHA( const xbString &s, xbBool &bResult )</td><td>Dbase ISALPHA function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ISLOWER( const xbString &s, xbBool &bResult )</td><td>Dbase ISLOWER function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 ISUPPER( const xbString &s, xbBool &bResult )</td><td>Dbase ISUPPER function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LEFT( const xbString &sIn, xbUInt32 lCharCnt, xbString &sOut )</td><td>Dbase LEF function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LEN( const xbString &sIn, xbDouble &dLen )</td><td>Dbase LEN function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LOG( xbDouble dIn, xbDouble &dOut )</td><td>Dbase LOG function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LOWER( const xbString &sIn, xbString &sOut )</td><td>Dbase LOWER function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 LTRIM( const xbString &sIn, xbString & sOut )</td><td>Dbase LTRIM function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 MAX( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MAX function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 MIN( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MIN function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 MONTH( xbDate &dInDate, xbDouble &dMonthOut )</td><td>Dbase MONTH function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 RECCOUNT( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECCOUNT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 RECNO( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECNO function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut )</td><td>Dbase REPLICATE function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 RIGHT( const xbString &sIn, xbUInt32 iCharCnt, xbString &sOut )</td><td>Dbase RIGHT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 RTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase RTRIM function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 SPACE( xbInt32 lCnt, xbString &sOut )</td><td>Dbase SPACE function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 SQRT( xbDouble dBase, xbDouble &dSqrRt )</td><td>Dbase SQRT function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 STOD( const xbString &sIn, xbDate &sDateOut )</td><td>Dbase STOD function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 STR( xbDouble dIn, xbString &sOut )</td><td>Dbase function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut )<br>
+ xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )<br>
+ xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut )</td><td>Dbase STR function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )</td><td>Dbase STRZERO function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut )</td><td>Dbase SUBSTR function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 TRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase TRIM function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 UPPER( const xbString &sIn, xbString &sOut )</td><td>Dbase UPPER function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 VAL( const xbString &sIn, xbDouble &dOut )</td><td>Dbase VAL function.</td><td>Expression</td></tr>
+<tr><td>xbInt16 YEAR( xbDate &dInDate, xbDouble &dOutYear )</td><td>Dbase YEAR function.</td><td>Expression</td></tr>
+</table>
-struct NtxHeadNode { /* ntx header on disk */
- xbUShort Signature; /* Clipper 5.x or Clipper 87 */
- xbUShort Version; /* Compiler Version */
- /* Also turns out to be */
- /* a last modified counter */
- xbULong StartNode; /* Offset in file for first node */
- xbULong UnusedOffset; /* First free node offset */
- xbUShort KeySize; /* Size of items (KeyLen + 8) */
- xbUShort KeyLen; /* Size of the Key */
- xbUShort DecimalCount; /* Number of decimal positions */
- xbUShort KeysPerNode; /* Max number of keys per node */
- xbUShort HalfKeysPerNode; /* Min number of keys per node */
- char KeyExpression[256]; /* Null terminated key expression */
- unsigned Unique; /* Unique Flag */
- char NotUsed[745];
-};
+<br><br>
+<hr>
-</xmp>
+<h3>Example program using xbXbase methods</h3>
+</center>
+<xmp>
+/* xb_ex_ssv.cpp
+XBase64 Software Library
-<br><br>
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This program demonstrates using functionality of the xbSsv class (Shared system values)
+
+*/
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main( int ac, char ** av ){
+
+ xbXBase x; // set up xbase for business
+ xbString sMsg; // a message string
+
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ std::cout << sMsg.Str() << std::endl;
+
+ // example code to set up log file usage
+ #ifdef XB_LOGGING_SUPPORT
+ char cSeperator; // is this a unix (/) or windows (\) file system
+ xbString sLog; // general string for log file activities
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
+
+ cSeperator = sLog.GetPathSeparator(); // get the seperator from
+ std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
+
+ sLog.Sprintf( "..%c", cSeperator );
+ x.SetLogDirectory( sLog );
+ std::cout << "sLog = [" << sLog.Str() << "]\n";
+
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
+
+ // turn on logging after file name set
+ x.EnableMsgLogging();
+ #endif // XB_LOGGING_SUPPORT
+
+ // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
+ // void DisplayError( xbInt16 ErrorCode ) const;
+ std::cout << "DisplayError( -100 ) - ";
+ x.DisplayError( -100 );
+ // << "]" << std::endl;
+
+
+ // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
+ // xbString& GetDefaultDateFormat() const;
+ std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl;
+
+ // void SetDataDirectory ( const xbString &sDataDirectory );
+ // xbString& GetDataDirectory() const;
+ std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl;
+
+ // xbInt16 GetEndianType() const;
+ if( x.GetEndianType() == 'L' )
+ std::cout << "Little Endian Architecture." << std::endl;
+ else
+ std::cout << "Bid Endian Architecture." << std::endl;
+
+ //xbBool GetDefaultAutoCommit() const;
+ //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
+ if( x.GetDefaultAutoCommit())
+ std::cout << "AutoCommit is on." << std::endl;
+ else
+ std::cout << "AutoCommit is off." << std::endl;
+
+ //xbBool GetMultiUser () const;
+ //void SetMultiUser ( xbBool bMultiUser );
+ if( x.GetMultiUser())
+ std::cout << "Multi user (locking) is enabled." << std::endl;
+ else
+ std::cout << "Multi user (locking) not enabled." << std::endl;
+
+ #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+ // xbInt16 GetUniqueKeyOpt () const;
+ // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
+ // XB_HALT_ON_DUPKEY
+ // XB_EMULATE_DBASE
+ if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
+ std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
+ else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
+ std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
+ #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+
+ #ifdef XB_LOCKING_SUPPORT
+ //xbInt16 GetDefaultLockRetries () const;
+ //void SetDefaultLockRetries ( xbInt16 iRetryCount );
+ //xbInt32 GetDefaultLockWait () const;
+ //void SetDefaultLockWait ( xbInt32 lRetryWait );
+ //xbInt16 GetDefaultLockFlavor () const;
+ //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
+ //xbBool GetDefaultAutoLock () const;
+ //void SetDefaultAutoLock ( xbBool bAutoLock );
+ //void EnableDefaultAutoLock ();
+ //void DisableDefaultAutoLock ();
+
+ std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
+ std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
+ std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_MDX_SUPPORT
+ // xbInt16 GetCreateMdxBlockSize() const;
+ // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
+ std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ // xbUInt32 GetDefaultBlockReadSize() const;
+ // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
+ std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+ //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
+ //void BitDump ( unsigned char c ) const;
+ //void BitDump ( char c ) const;
+ std::cout << "BitDump( 'A' ) - ";
+ x.BitDump( 'A' );
+
+ return 0;
+}
-<h4>Interior and Leaf Nodes</h4>
-
-NTX files use a B-tree system to store keys. A B-tree is a balanced,
-on disk tree who's design minimizes disk access. Interior Nodes and
-Leaf Nodes share the same structure in an NTX file. The difference is
-that interior nodes point to other nodes. Leaf nodes point to
-nothing. Keys in both interior nodes and leaf nodes point to records
-in a DBF file.
-
-Interior nodes have field LeftNodeNo valued which points to the node
-which points to the keys which are less than the key value in the KeyVal
-field. There is one more LeftNodeNo value in the node than there are keys. The
-Last LeftNodeNo points to the node which is greater than the highest
-key value in the node. <br><br>
-
-Leaf nodes have 0 in the LeftNodeNo field.<br><br>
-
-
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>NTX Interior Node and Leaf Node Structure</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>NoOfKeysThisNode<TD>The number of key values in this node. (N)
-<TR><TH ALIGN="LEFT">Array of xbUShort<TD>2<TD>offsets[]<TD>Array of
- <pre>HeadNode.KeysPerNode +1</pre> unsigned longs.
- These values are the offsets (in bytes) of each key
- in this node, from the beginning of the node.
-<TR><TH ALIGN="LEFT">char<TD>variable<TD>KeyRecs<TD>A repeating structure of
- pointers and keys. See the next table for the KeyRec structure.
-</TABLE>
-<br><br>
-One primary difference between NDX files and NTX files is that NTX
-files uses an array of offsets on all interior and leaf nodes. Each
-offset is the byte count from the beginning of the node where each
-KeyRec will be found. The order of the array of offsets determines
-the order of keys on a given node. When keys are added or deleted,
-thus changing the order of the keys on a node, only the order of the
-offset array is changed. All other key data is not moved. This results
-in slightly better index performance.
-
-<BR>
-<TABLE BORDER>
-<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION>
-<TR VALIGN="BASELINE">
-<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number (offset from beginning of file) of the lower node
- for this key. 0 in Leaf Nodes.
-<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key.
- 0 in Interior Nodes.
-<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value.
-</TABLE>
+</xmp>
<br><br>
-For those interested in knowing how the Xbase DBMS manipulates and
-navigates index files, the following discussion may be helpfull.<br><br>
-
-Xbase DBMS navigates through NTX files by using an in-memory chain of
-nodes of the current location / key in use. It starts by reading the
-Head Node of the index, which points to the first node of the
-file. The first node of the file will be a leaf node if the index is
-small or will be an interior node if the index has more than one leaf
-node. The first interior node is loaded into memory, added to the
-node chain and points to the next node to read. The node is made up
-of one or more keys. If it is a leaf node, the logic looks for a
-matching key on the node. It continues down the tree, adding the
-nodes to the in-memory node chain until it reaches the correct
-node. If it finds a matching key in the leaf node, it returns a XB_FOUND
-condition. If it doesn't find an exact match in the leaf node, it
-returns a XB_NOT_FOUND condition and stops on the key which is greater
-than the search key given.
-
<hr>
-<A HREF="mailto:bob@#synxis.com">
-Author: Bob Cotton - bob@synxis.com</A><br>
<p><img src="xbase.jpg"><br><hr>
</BODY>
</HTML>
diff --git a/docs/man/xb_cfg_chk.1.gz b/docs/man/xb_cfg_chk.1.gz
index 9dabd69..1014681 100644
--- a/docs/man/xb_cfg_chk.1.gz
+++ b/docs/man/xb_cfg_chk.1.gz
Binary files differ
diff --git a/docs/man/xb_copydbf.1.gz b/docs/man/xb_copydbf.1.gz
index 410723d..dd05eb8 100644
--- a/docs/man/xb_copydbf.1.gz
+++ b/docs/man/xb_copydbf.1.gz
Binary files differ
diff --git a/docs/man/xb_dbfutil.1.gz b/docs/man/xb_dbfutil.1.gz
index 555bd83..b3e7eac 100644
--- a/docs/man/xb_dbfutil.1.gz
+++ b/docs/man/xb_dbfutil.1.gz
Binary files differ
diff --git a/docs/man/xb_deletall.1.gz b/docs/man/xb_deletall.1.gz
index 8016f10..01a2af5 100644
--- a/docs/man/xb_deletall.1.gz
+++ b/docs/man/xb_deletall.1.gz
Binary files differ
diff --git a/docs/man/xb_dumpdbt.1.gz b/docs/man/xb_dumpdbt.1.gz
index f0585b4..c6e6331 100644
--- a/docs/man/xb_dumpdbt.1.gz
+++ b/docs/man/xb_dumpdbt.1.gz
Binary files differ
diff --git a/docs/man/xb_dumprecs.1.gz b/docs/man/xb_dumprecs.1.gz
index f63c8b7..273ec78 100644
--- a/docs/man/xb_dumprecs.1.gz
+++ b/docs/man/xb_dumprecs.1.gz
Binary files differ
diff --git a/docs/man/xb_import.1.gz b/docs/man/xb_import.1.gz
new file mode 100644
index 0000000..22f797a
--- /dev/null
+++ b/docs/man/xb_import.1.gz
Binary files differ
diff --git a/docs/man/xb_pack.1.gz b/docs/man/xb_pack.1.gz
index c5ec726..55784b7 100644
--- a/docs/man/xb_pack.1.gz
+++ b/docs/man/xb_pack.1.gz
Binary files differ
diff --git a/docs/man/xb_tblinfo.1.gz b/docs/man/xb_tblinfo.1.gz
index ab7b26a..2af2fb6 100644
--- a/docs/man/xb_tblinfo.1.gz
+++ b/docs/man/xb_tblinfo.1.gz
Binary files differ
diff --git a/docs/man/xb_undelall.1.gz b/docs/man/xb_undelall.1.gz
index 31cc868..a3525d6 100644
--- a/docs/man/xb_undelall.1.gz
+++ b/docs/man/xb_undelall.1.gz
Binary files differ
diff --git a/src/core/xbblockread.cpp b/src/core/xbblockread.cpp
index 09076b1..7e2c5fc 100755
--- a/src/core/xbblockread.cpp
+++ b/src/core/xbblockread.cpp
@@ -50,10 +50,14 @@ xbBlockRead::~xbBlockRead(){
#ifdef XB_DEBUG_SUPPORT
void xbBlockRead::DumpReadBlockInternals(){
+
+ xbUInt32 ulRecCnt;
+ dbf->GetRecordCnt( ulRecCnt );
+
std::cout << "------- DumpBlockInternals ---------" << std::endl;
std::cout << "Dflt Blk Size = [" << dbf->GetXbasePtr()->GetDefaultBlockReadSize()
<< "]" << std::endl;
- std::cout << "Dbf Record Count = [" << dbf->GetRecordCount() << "]" << std::endl;
+ std::cout << "Dbf Record Count = [" << ulRecCnt << "]" << std::endl;
std::cout << "Dbf Record Len = [" << dbf->GetRecordLen() << "]" << std::endl;
std::cout << "ulBlkSize = [" << ulBlkSize << "]" << std::endl;
std::cout << "ulMaxRecs = [" << ulMaxRecs << "]" << std::endl;
@@ -136,7 +140,12 @@ xbInt16 xbBlockRead::GetBlockForRecNo( xbUInt32 ulRecNo ){
xbInt16 iErrorStop = 0;
try{
- xbUInt32 ulDbfRecCnt = dbf->GetRecordCount();
+ xbUInt32 ulDbfRecCnt;
+
+ if(( iRc = dbf->GetRecordCnt( ulDbfRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
// calc to determine block number for the requested record, 0 based offset
xbUInt32 ulBlockNo = (xbUInt32)(ulRecNo / ulMaxRecs);
@@ -183,7 +192,6 @@ xbInt16 xbBlockRead::GetBlockForRecNo( xbUInt32 ulRecNo ){
return iRc;
}
-
/************************************************************************/
//! @brief Get the current block size.
/*!
diff --git a/src/core/xbdate.cpp b/src/core/xbdate.cpp
index ba0fdf1..54834ac 100755
--- a/src/core/xbdate.cpp
+++ b/src/core/xbdate.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -25,22 +25,36 @@ int xbDate::iAggregatedDaysInMonths[2][13];
//! @brief Constructor.
xbDate::xbDate() {
- Sysdate();
+ sDate8.Set( "" );
SetDateTables();
}
/*************************************************************************/
//! @brief Constructor.
/*!
+ \param iInitOpt - Constructor to use to initialize date static variables
+ Called by the main xbXbase::xbXBase constructor
+*/
+
+xbDate::xbDate( xbUInt16 ) {
+
+ SetDateTables();
+ Sysdate();
+}
+/*************************************************************************/
+//! @brief Constructor.
+/*!
\param sDate8In - Input date.
*/
xbDate::xbDate( const xbString & sDate8In ) {
+
if( DateIsValid( sDate8In ))
sDate8.Set( sDate8In );
else
- Sysdate();
- SetDateTables();
+ sDate8.Set( "" );
+
+ // SetDateTables();
}
/*************************************************************************/
@@ -53,8 +67,9 @@ xbDate::xbDate( const char * sDate8In ) {
if( DateIsValid( sDate8In ))
sDate8.Set( sDate8In );
else
- Sysdate();
- SetDateTables();
+ sDate8.Set( "" );
+
+ // SetDateTables();
}
/*************************************************************************/
@@ -63,7 +78,7 @@ xbDate::xbDate( const char * sDate8In ) {
\param lJulDate - Input julian date.
*/
xbDate::xbDate( xbInt32 lJulDate ) {
- SetDateTables();
+ // SetDateTables();
JulToDate8( lJulDate );
}
@@ -81,68 +96,76 @@ void xbDate::operator=( const xbDate & dt ){
/*************************************************************************/
//! @brief operator +=
/*!
- This routine adds lDays to the date
+ This routine adds lDays to the date if the date is not null.
\param lDays - Number of days to add to the date.
*/
void xbDate::operator+=( xbInt32 lDays ){
- JulToDate8( JulianDays() + lDays );
+ if( !IsNull() )
+ JulToDate8( JulianDays() + lDays );
}
/*************************************************************************/
//! @brief operator -=
/*!
- This routine subtracts lDays from the date.
+ This routine subtracts lDays from the date if the date is not null.
\param lDays - Number of days to subtract from the date.
*/
void xbDate::operator-=( xbInt32 lDays ){
- JulToDate8( JulianDays() - lDays );
+ if( !IsNull() )
+ JulToDate8( JulianDays() - lDays );
}
/*************************************************************************/
//! @brief operator ++
/*!
- This routine adds one day to the date field.
+ This routine adds one day to the date field if the date is not null.
*/
void xbDate::operator++(xbInt32){
- *this+=1;
+ if( !IsNull() )
+ *this+=1;
}
/*************************************************************************/
//! @brief operator --
/*!
- This routine subtracts one day from the date field.
+ This routine subtracts one day from the date field if the date is not null.
*/
void xbDate::operator--(xbInt32){
- *this-=1;
- return;
+ if( !IsNull())
+ *this-=1;
}
/*************************************************************************/
//! @brief operator -
/*!
This routine subtracts one date from another date returning the difference.
- \param dt - Date to subtract.
- \returns Number of days
+ \param dt - Date to subtract
+ \returns Number of days difference or zero if one of the dates is null.
*/
xbInt32 xbDate::operator-( const xbDate &dt ) const{
- return JulianDays() - dt.JulianDays();
+ if( !IsNull() && !dt.IsNull() )
+ return JulianDays() - dt.JulianDays();
+ else
+ return 0;
}
/*************************************************************************/
//! @brief operator +
/*!
- This routine adds additional days to a date field.
+ This routine adds additional days to a valid date field.
\param lCount - Number of days to add.
\returns New date in CCYYMMDD format.
*/
const char *xbDate::operator+( xbInt32 lCount ){
- JulToDate8( JulianDays() + lCount );
+ if( !IsNull() )
+ JulToDate8( JulianDays() + lCount );
return sDate8.Str();
}
/*************************************************************************/
//! @brief operator -
/*!
- This routine subtracts days from a date field.
+ This routine subtracts days from a valid date field.
\param lCount - Number of days to subtract.
\returns New date in CCYYMMDD format.
*/
const char *xbDate::operator-( xbInt32 lCount ){
- JulToDate8( JulianDays() - lCount );
+ if( !IsNull() )
+ JulToDate8( JulianDays() - lCount );
return sDate8;
}
/*************************************************************************/
@@ -232,13 +255,14 @@ xbBool xbDate::operator>=( const xbDate &dt ) const {
/*!
This routine calculates a century for a given year. It uses an 80/20
rolling date window to calculate the century.
-
+
\param iCalcYear - Two digit year to calculate a century for.
\returns Century calculated for the two digit year.
*/
xbInt16 xbDate::CalcRollingCenturyForYear( xbInt16 iCalcYear ) const {
xbDate d;
+ d.Sysdate();
xbInt16 iThisYear = d.YearOf();
xbInt16 iThisCentury = d.CenturyOf();
iThisYear -= (iThisCentury * 100);
@@ -254,14 +278,18 @@ xbInt16 xbDate::CalcRollingCenturyForYear( xbInt16 iCalcYear ) const {
/*************************************************************************/
//! @brief Get century for date.
/*!
- \returns This routine returns the century from the date.
+ \returns the century from the valid date.\ or 0 for a null date.
*/
xbInt16 xbDate::CenturyOf() const {
- char Century[3];
- Century[0] = sDate8[1];
- Century[1] = sDate8[2];
- Century[2] = 0x00;
- return( atoi( Century ));
+ if( !IsNull() ){
+ char Century[3];
+ Century[0] = sDate8[1];
+ Century[1] = sDate8[2];
+ Century[2] = 0x00;
+ return( atoi( Century ));
+ } else {
+ return 0;
+ }
}
/*************************************************************************/
//! @brief Get the day of the week.
@@ -271,22 +299,24 @@ xbInt16 xbDate::CenturyOf() const {
*/
xbInt16 xbDate::CharDayOf( xbString &sOutCharDay ) {
- struct tm tblock;
- char buf[25];
-
- tblock.tm_year = YearOf() - 1900;
- tblock.tm_mon = MonthOf() - 1;
- tblock.tm_mday = DayOf( XB_FMT_MONTH );
- tblock.tm_hour = 0;
- tblock.tm_min = 0;
- tblock.tm_sec = 1;
- tblock.tm_isdst = -1;
- if( mktime( &tblock ) == -1 ){
- sOutCharDay = "" ;
- return XB_INVALID_DATE;
- } else {
- strftime( buf, 25, "%A", &tblock );
- sOutCharDay = buf;
+ if( !IsNull()){
+ struct tm tblock;
+ char buf[25];
+
+ tblock.tm_year = YearOf() - 1900;
+ tblock.tm_mon = MonthOf() - 1;
+ tblock.tm_mday = DayOf( XB_FMT_MONTH );
+ tblock.tm_hour = 0;
+ tblock.tm_min = 0;
+ tblock.tm_sec = 1;
+ tblock.tm_isdst = -1;
+ if( mktime( &tblock ) == -1 ){
+ sOutCharDay = "" ;
+ return XB_INVALID_DATE;
+ } else {
+ strftime( buf, 25, "%A", &tblock );
+ sOutCharDay = buf;
+ }
}
return XB_NO_ERROR;;
}
@@ -297,21 +327,24 @@ xbInt16 xbDate::CharDayOf( xbString &sOutCharDay ) {
\returns XB_INVALID_DATE<br>XB_NO_ERROR
*/
xbInt16 xbDate::CharMonthOf( xbString &sOutCharMonth ) {
- struct tm tblock;
- char buf[25];
- tblock.tm_year = YearOf() - 1900;
- tblock.tm_mon = MonthOf() - 1;
- tblock.tm_mday = DayOf( XB_FMT_MONTH );
- tblock.tm_hour = 0;
- tblock.tm_min = 0;
- tblock.tm_sec = 1;
- tblock.tm_isdst = -1;
- if( mktime( &tblock ) == -1 ){
- sOutCharMonth = "";
- return XB_INVALID_DATE;
- } else {
- strftime( buf, 25, "%B", &tblock );
- sOutCharMonth = buf;
+
+ if( !IsNull()){
+ struct tm tblock;
+ char buf[25];
+ tblock.tm_year = YearOf() - 1900;
+ tblock.tm_mon = MonthOf() - 1;
+ tblock.tm_mday = DayOf( XB_FMT_MONTH );
+ tblock.tm_hour = 0;
+ tblock.tm_min = 0;
+ tblock.tm_sec = 1;
+ tblock.tm_isdst = -1;
+ if( mktime( &tblock ) == -1 ){
+ sOutCharMonth = "";
+ return XB_INVALID_DATE;
+ } else {
+ strftime( buf, 25, "%B", &tblock );
+ sOutCharMonth = buf;
+ }
}
return XB_NO_ERROR;
}
@@ -387,45 +420,48 @@ xbBool xbDate::DateIsValid( const xbString &sDateIn ) const {
xbInt16 xbDate::DayOf( xbInt16 iFormat ) const {
- xbInt16 iOutDay = 0;
- char sDay[3];
- xbInt16 iDay, iMonth, iYear, iDay2;
-
- // check for valid format switch
- if( iFormat!=XB_FMT_WEEK && iFormat!=XB_FMT_MONTH && iFormat!=XB_FMT_YEAR )
- return XB_INVALID_OPTION;
-
- if( iFormat == XB_FMT_WEEK ){
- //DayOf( XB_FMT_MONTH, iDay );
- iDay = DayOf( XB_FMT_MONTH );
- iMonth = MonthOf();
- iYear = YearOf();
-
- // The following formula uses Zeller's Congruence to determine the day of the week
- if( iMonth > 2 ) // init to February
- iMonth -= 2;
- else {
- iMonth += 10;
- iYear--;
- }
- iDay2 = ((13 * iMonth - 1) / 5) + iDay + ( iYear % 100 ) +
- (( iYear % 100 ) / 4) + ((iYear /100 ) / 4 ) - 2 *
- ( iYear / 100 ) + 77 ;
+ if( !IsNull()){
+ xbInt16 iOutDay = 0;
+ char sDay[3];
+ xbInt16 iDay, iMonth, iYear, iDay2;
+
+ // check for valid format switch
+ if( iFormat!=XB_FMT_WEEK && iFormat!=XB_FMT_MONTH && iFormat!=XB_FMT_YEAR )
+ return XB_INVALID_OPTION;
+
+ if( iFormat == XB_FMT_WEEK ){
+ //DayOf( XB_FMT_MONTH, iDay );
+ iDay = DayOf( XB_FMT_MONTH );
+ iMonth = MonthOf();
+ iYear = YearOf();
+
+ // The following formula uses Zeller's Congruence to determine the day of the week
+ if( iMonth > 2 ) // init to February
+ iMonth -= 2;
+ else {
+ iMonth += 10;
+ iYear--;
+ }
+ iDay2 = ((13 * iMonth - 1) / 5) + iDay + ( iYear % 100 ) +
+ (( iYear % 100 ) / 4) + ((iYear /100 ) / 4 ) - 2 *
+ ( iYear / 100 ) + 77 ;
- iOutDay = iDay2 - 7 * ( iDay2 / 7 );
- iOutDay == 6 ? iOutDay = 0 : iOutDay++;
- }
- else if( iFormat == XB_FMT_MONTH ){
- sDay[0] = sDate8[7];
- sDay[1] = sDate8[8];
- sDay[2] = 0x00;
- iOutDay = atoi( sDay );
+ iOutDay = iDay2 - 7 * ( iDay2 / 7 );
+ iOutDay == 6 ? iOutDay = 0 : iOutDay++;
+ }
+ else if( iFormat == XB_FMT_MONTH ){
+ sDay[0] = sDate8[7];
+ sDay[1] = sDate8[8];
+ sDay[2] = 0x00;
+ iOutDay = atoi( sDay );
+ } else {
+ iOutDay = iAggregatedDaysInMonths[IsLeapYear()][MonthOf()-1] + DayOf( XB_FMT_MONTH );
+ }
+ return iOutDay;
} else {
- iOutDay = iAggregatedDaysInMonths[IsLeapYear()][MonthOf()-1] + DayOf( XB_FMT_MONTH );
+ return 0;
}
- return iOutDay;
}
-
/*************************************************************************/
#ifdef XB_DEBUG_SUPPORT
//! @brief Dump date information to stdout.
@@ -466,7 +502,6 @@ void xbDate::DumpDateTables(){
*/
xbInt16 xbDate::CTOD( const xbString &sCtodInDate ){
-
if( sCtodInDate[1] != ' ' && ( sCtodInDate[3] == '\\' || sCtodInDate[3] == '/') ){
char yy[3];
yy[0] = sCtodInDate[7];
@@ -518,6 +553,9 @@ xbInt16 xbDate::FormatDate( const xbString &sFmtIn, xbString &sOutFmtDate ){
xbString sWrkFmt;
sOutFmtDate = "";
+ if( IsNull())
+ return XB_NO_ERROR;
+
/* use format for this specific string if available, else use default format */
if( strlen( sFmtIn ) > 0 )
sWrkFmt = sFmtIn;
@@ -600,6 +638,8 @@ const char * xbDate::Str() const{
\returns xbTrue - Is leapyear.<br> xbFalse - Not a leap year.
*/
xbBool xbDate::IsLeapYear() const {
+ if( IsNull() )
+ return xbFalse;
xbInt16 iYear = YearOf();
if(( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 )
return xbTrue;
@@ -619,15 +659,30 @@ xbBool xbDate::IsLeapYear( xbInt16 iYear ) const {
return xbFalse;
}
/*************************************************************************/
+//! @brief Determine if date is null date
+/*!
+ \returns xbTrue - If null date.<br> xbFalse - Not a null date.
+*/
+xbBool xbDate::IsNull() const {
+ if( sDate8.Len() < 8 )
+ return xbTrue;
+ else
+ return xbFalse;
+}
+/*************************************************************************/
//! @brief Calculate julian days for a given date.
/*!
\returns The number of days since 01/01/0001 + JUL_OFFSET.
*/
xbInt32 xbDate::JulianDays() const{
- xbInt32 ly = YearOf() - 1;
- xbInt32 lDays = ly * 365L + ly / 4L - ly / 100L + ly / 400L;
- lDays += DayOf( XB_FMT_YEAR );
- return lDays + JUL_OFFSET;
+ if( !IsNull()){
+ xbInt32 ly = YearOf() - 1;
+ xbInt32 lDays = ly * 365L + ly / 4L - ly / 100L + ly / 400L;
+ lDays += DayOf( XB_FMT_YEAR );
+ return lDays + JUL_OFFSET;
+ } else {
+ return 0;
+ }
}
/*************************************************************************/
//! @brief Convert the number of julian days to gregorian date.
@@ -637,24 +692,23 @@ xbInt32 xbDate::JulianDays() const{
*/
xbInt16 xbDate::JulToDate8( xbInt32 lJulDays )
{
- lJulDays -= JUL_OFFSET;
- // calculate the year
- xbInt16 iYear = (xbInt16)(lJulDays / 365.24 );
- lJulDays -= (iYear * 365L) + (iYear / 4L) - (iYear / 100L) + (iYear / 400L);
- iYear++;
- while( lJulDays <= 0 ){
- iYear--;
- lJulDays += (365L + IsLeapYear( iYear ));
- }
- // this for loop calculates the month by comparing the number of days remaining to one of the tables
- xbInt16 iIsLeap = IsLeapYear(iYear);
- xbInt16 iMonth = 1;
- while( ((xbInt16) lJulDays > iAggregatedDaysInMonths[iIsLeap][iMonth]) && (iMonth < 12) )
- iMonth++;
-
- lJulDays -= iAggregatedDaysInMonths[iIsLeap][iMonth-1];
- sDate8.Sprintf( "%04d%02d%02ld", iYear, iMonth, lJulDays );
- return XB_NO_ERROR;
+ lJulDays -= JUL_OFFSET;
+ // calculate the year
+ xbInt16 iYear = (xbInt16)(lJulDays / 365.24 );
+ lJulDays -= (iYear * 365L) + (iYear / 4L) - (iYear / 100L) + (iYear / 400L);
+ iYear++;
+ while( lJulDays <= 0 ){
+ iYear--;
+ lJulDays += (365L + IsLeapYear( iYear ));
+ }
+ // this for loop calculates the month by comparing the number of days remaining to one of the tables
+ xbInt16 iIsLeap = IsLeapYear(iYear);
+ xbInt16 iMonth = 1;
+ while( ((xbInt16) lJulDays > iAggregatedDaysInMonths[iIsLeap][iMonth]) && (iMonth < 12) )
+ iMonth++;
+ lJulDays -= iAggregatedDaysInMonths[iIsLeap][iMonth-1];
+ sDate8.Sprintf( "%04d%02d%02ld", iYear, iMonth, lJulDays );
+ return XB_NO_ERROR;
}
/*************************************************************************/
//! @brief Set the date to the last day of month for a given date.
@@ -663,7 +717,8 @@ xbInt16 xbDate::JulToDate8( xbInt32 lJulDays )
\returns XB_NO_ERROR
*/
xbInt16 xbDate::LastDayOfMonth(){
- sDate8.Sprintf( "%4.4d%2.2d%2.2d", YearOf(), MonthOf(), iDaysInMonths[IsLeapYear()][MonthOf()]);
+ if( !IsNull())
+ sDate8.Sprintf( "%4.4d%2.2d%2.2d", YearOf(), MonthOf(), iDaysInMonths[IsLeapYear()][MonthOf()]);
return XB_NO_ERROR;
};
/*************************************************************************/
@@ -672,27 +727,33 @@ xbInt16 xbDate::LastDayOfMonth(){
\returns The month of the date.
*/
xbInt16 xbDate::MonthOf() const {
- xbInt16 iOutMonth;
- char month[3];
- month[0] = sDate8[5];
- month[1] = sDate8[6];
- month[2] = 0x00;
- iOutMonth = atoi( month );
- return iOutMonth;
+ if( !IsNull()){
+ xbInt16 iOutMonth;
+ char month[3];
+ month[0] = sDate8[5];
+ month[1] = sDate8[6];
+ month[2] = 0x00;
+ iOutMonth = atoi( month );
+ return iOutMonth;
+ } else {
+ return 0;
+ }
}
/*************************************************************************/
//! @brief Set the date.
/*!
\param sDateIn - Input date.
- \returns XB_NO_ERROR<br>XB_INVALID_DATE
+ \returns XB_NO_ERROR
*/
xbInt16 xbDate::Set( const xbString & sDateIn ){
+
if( DateIsValid( sDateIn )){
sDate8 = sDateIn;
- return XB_NO_ERROR;
+ } else {
+ sDate8 = ""; // set to null date if invalid date
}
- return XB_INVALID_DATE;
+ return XB_NO_ERROR;
}
/*************************************************************************/
//! @brief This routine sets up static data tables on startup.
@@ -790,13 +851,17 @@ xbInt16 xbDate::Sysdate(){
\returns The year of the date.
*/
xbInt16 xbDate::YearOf() const {
- char year[5];
- year[0] = sDate8[1];
- year[1] = sDate8[2];
- year[2] = sDate8[3];
- year[3] = sDate8[4];
- year[4] = 0x00;
- xbInt16 iOutYear = atoi( year );
- return iOutYear;
+ if( !IsNull()){
+ char year[5];
+ year[0] = sDate8[1];
+ year[1] = sDate8[2];
+ year[2] = sDate8[3];
+ year[3] = sDate8[4];
+ year[4] = 0x00;
+ xbInt16 iOutYear = atoi( year );
+ return iOutYear;
+ } else {
+ return 0;
+ }
};
} /* namespace */ \ No newline at end of file
diff --git a/src/core/xbdbf.cpp b/src/core/xbdbf.cpp
index 4033ef9..8904a6d 100755
--- a/src/core/xbdbf.cpp
+++ b/src/core/xbdbf.cpp
@@ -159,12 +159,14 @@ xbInt16 xbDbf::Abort(){
//! @brief Add an index to the internal list of indices for this table.
/*!
The index list is used during any table update process to update any open
- index file. Index files can contain one or more tags.
+ index file. Index files can contain one or more tags. Temporary tags
+ are not included here because they are created after a table is open
+ and will be deleted when the table is closed.
\param ixIn Pointer to index object for a given index file.
- \param sFmt NDX or MDX.
+ \param sFmt NDX, MDX or TDX.
\returns <a href="xbretcod_8h.html">Return Codes</a>
-
+
*/
xbInt16 xbDbf::AddIndex( xbIx * ixIn, const xbString &sFmt ){
@@ -295,6 +297,7 @@ xbInt16 xbDbf::AppendRecord(){
// calculate the latest header information
xbDate d;
+ d.Sysdate();
cUpdateYY = (char) d.YearOf() - 1900;
cUpdateMM = (char) d.MonthOf();
cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
@@ -411,7 +414,7 @@ xbInt16 xbDbf::AppendRecord(){
\param sIxType Currently only NDX. Future versions will support additional non prod index types.
\param sIxName The index name.
\param iOpt 0 - Add index to .INF if not already there<br>
- 1 - Remove index from .INF if there
+ 1 - Remove index from .INF if exists
\returns <a href="xbretcod_8h.html">Return Codes</a>
@@ -534,7 +537,7 @@ xbInt16 xbDbf::BlankRecord()
This method is used to check an index tag's intgerity.
\param iTagOpt 0 - Check current tag<br>
- 1 - Check all tag<br>
+ 1 - Check all tags<br>
\param iOutputOpt Output message destination<br>
0 = stdout<br>
@@ -585,21 +588,41 @@ xbInt16 xbDbf::CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt ){
\param iTagOpt 0 - Reindex current tag<br>
1 - Reindex all tags<br>
+ 2 - Reindex for tag identified by vpTag
+ \param iErrorOpt 0 - Don't delete tag on reindex failure<br>
+ 1 - Delete tag on reindex failure
+ \param vpTag if option 2 used, pointer to tag to reindex
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
-xbInt16 xbDbf::Reindex( xbInt16 iTagOpt ){
+xbInt16 xbDbf::Reindex( xbInt16 iTagOpt, xbInt16 iErrorOpt, xbIx **ppIx, void **vppTag ){
xbInt16 iRc = XB_NO_ERROR;
xbInt16 iErrorStop = 0;
void *vp;
+ xbString sType;
+ xbString sTagName;
+
+ if( iTagOpt < 0 || iTagOpt > 2 || (iTagOpt == 2 && (!ppIx || !vppTag )))
+ return XB_INVALID_OPTION;
+
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ xbBool bOriginalBlockReadSts = GetBlockReadStatus();
+ #endif
+
try{
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ if( !bOriginalBlockReadSts )
+ EnableBlockReadProcessing();
+ #endif
+
if( iTagOpt == 0 ){
if( pCurIx ){
- iRc = pCurIx->Reindex( &vpCurIxTag );
- if( iRc != XB_NO_ERROR ){
+ if(( iRc = pCurIx->Reindex( &vpCurIxTag )) != XB_NO_ERROR ){
iErrorStop = 100;
throw iRc;
}
@@ -608,7 +631,7 @@ xbInt16 xbDbf::Reindex( xbInt16 iTagOpt ){
return XB_INVALID_TAG;
}
- } else {
+ } else if( iTagOpt == 1 ) {
xbLinkListNode<xbTag *> *llN = GetTagList();
xbTag *pTag;
@@ -622,6 +645,19 @@ xbInt16 xbDbf::Reindex( xbInt16 iTagOpt ){
}
llN = llN->GetNextNode();
}
+ } else if( iTagOpt == 2 ){
+
+ // xbIx *pIx;
+ // pIx = *ppIx;
+ xbIx *pIx = *ppIx;
+ // void *vpTag;
+ // vpTag = *vppTag;
+ void *vpTag = *vppTag;
+
+ if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
}
}
catch (xbInt16 iRc ){
@@ -630,6 +666,12 @@ xbInt16 xbDbf::Reindex( xbInt16 iTagOpt ){
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ if( !bOriginalBlockReadSts )
+ DisableBlockReadProcessing();
+ #endif
+
return iRc;
}
@@ -939,10 +981,10 @@ xbInt16 xbDbf::CopyDbfStructure( xbDbf * dNewTable, const xbString &sNewTableNam
#ifdef XB_INDEX_SUPPORT
//! @brief Create a new tag (index) for this dbf file (table).
/*!
- This routine creates a new tag (index) on a dbf file. The library currently supports NDX and MDX
+ This routine creates a new tag (index) on a dbf file. The library currently supports NDX, MDX ans TDX.
indices. If you don't have a specific need for an NDX file, use MDX.
- \param sIxType "MDX" or "NDX".
+ \param sIxType "MDX", "NDX" or "NTX".
\param sName Index or tag name.
\param sKey Index key expression,
\param sFilter Filter expression. Not applicable for NDX indices.
@@ -1002,6 +1044,8 @@ xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const
}
*pIxOut = ixNdx;
+
+
// Set the current tag if one not already set
if( sCurIxType == "" ){
sCurIxType = "NDX";
@@ -1031,6 +1075,7 @@ xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const
ixMdx = (xbIxMdx *) ixList->ix;
bMdxFound = xbTrue;
}
+ ixList = ixList->next;
}
if( !bMdxFound )
@@ -1061,7 +1106,53 @@ xbInt16 xbDbf::CreateTag( const xbString &sIxType, const xbString &sName, const
pCurIx = ixMdx;
vpCurIxTag = ixMdx->GetTag(0);
}
+ #endif
+
+ #ifdef XB_TDX_SUPPORT
+ } else if( sIxType == "TDX" ){
+
+ if( GetVersion() == 3 ){ // TDX indexes were version 4 and higher
+ iErrorStop = 140;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+ xbIxTdx *ixTdx;
+ xbString s;
+ // look through the index list and see if there is an mdx pointer we can grab
+ xbBool bTdxFound = xbFalse;
+ xbIxList *ixList = GetIxList();
+ while( ixList && !bTdxFound ){
+ s = ixList->sFmt->Str();
+ if( s == "TDX" ){
+ ixTdx = (xbIxTdx *) ixList->ix;
+ bTdxFound = xbTrue;
+ }
+ ixList = ixList->next;
+ }
+ if( !bTdxFound )
+ ixTdx = new xbIxTdx( this );
+
+ if(( iRc = ixTdx->CreateTag( sName, sKey, sFilter, iDescending, iUnique, iOverLay, vpTagOut )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if( !bTdxFound ){
+ if(( iRc = AddIndex( ixTdx, "TDX" )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+ *pIxOut = ixTdx;
+
+ // set the current tag if one not already set
+ if( sCurIxType == "" ){
+
+ sCurIxType = "TDX";
+ pCurIx = ixTdx;
+ vpCurIxTag = ixTdx->GetTag(0);
+ }
+
#endif
} else {
@@ -1192,17 +1283,23 @@ xbInt16 xbDbf::DeleteAllIndexFiles(){
// close any open index files, delete it, remove from the ix list
while( ixList ){
+
+ // next two lines for debugging
+ ixList->ix->GetFileNamePart( sIxName );
ixList->ix->Close();
- ixList->ix->xbRemove();
+ if(( iRc = ixList->ix->xbRemove()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
#ifdef XB_INF_SUPPORT
// if XB_INF_SUPPORT is enabled, all open non prod indices should be in here
- if( *ixList->sFmt != "MDX" ){ // production indices not stored in .INF dataset
+ if( *ixList->sFmt != "MDX" && *ixList->sFmt != "TDX" ){ // production and temp indices not stored in .INF dataset
if(( iRc = ixList->ix->GetFileNamePart( sIxName )) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 120;
throw iRc;
}
if(( iRc = AssociateIndex( *ixList->sFmt, sIxName, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
+ iErrorStop = 130;
throw iRc;
}
}
@@ -1391,7 +1488,7 @@ xbInt16 xbDbf::DeleteTable(){
/*!
This routine deletes an index tag
- \param sIxType Either "NDX" or "MDX".<br>
+ \param sIxType Either "NDX", "MDX" or "TDX".<br>
\param sName Tag name to delete.<br>
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
@@ -1452,7 +1549,7 @@ xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
throw iRc;
}
- if( ixl->ix == pCurIx )
+ if( !ixList || ixl->ix == pCurIx )
SetCurTag( "", NULL, NULL );
}
@@ -1500,7 +1597,64 @@ xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
iErrorStop = 170;
throw iRc;
}
- if( ixl->ix == pCurIx )
+ if( !ixList || ixl->ix == pCurIx )
+ SetCurTag( "", NULL, NULL );
+ }
+ }
+ ixlPrev = ixl;
+ ixl = ixlNext;
+ }
+
+ if( !bDone )
+ return XB_INVALID_TAG;
+ #endif
+
+ #ifdef XB_TDX_SUPPORT
+ } else if( sIxType == "TDX" ){
+ xbIxList *ixl = ixList;
+ xbIxList *ixlNext;
+ xbIxList *ixlPrev = NULL;
+ xbBool bDone = xbFalse;
+ xbIxTdx *pTdx;
+ xbMdxTag *pMdxTag;
+ xbInt16 iTagCnt = 0;
+
+ while( ixl && !bDone ){
+ ixlNext = ixl->next;
+ pTdx = (xbIxTdx *) ixl->ix;
+ iTagCnt = pTdx->GetTagCount();
+ for( xbInt16 i = 0; i < iTagCnt && !bDone; i++ ){
+ pMdxTag = (xbMdxTag *) pTdx->GetTag( i );
+ if( pTdx->GetTagName( pMdxTag ) == sName ){
+ bDone = xbTrue;
+ iRc = pTdx->DeleteTag( pMdxTag );
+ if( iRc > 0 ){
+ // Successful delete of only tag in production mdx file - need to remove it from the list, update the dbf header
+ cIndexFlag = 0x00;
+ if(( iRc = WriteHeader( 1, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+ if(( iRc = RemoveIndex( ixl->ix )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ if( ixlPrev == NULL ){
+ // std::cout << "setting ixList to null or should be\n";
+ ixList = ixlNext;
+ } else {
+ ixlPrev = ixlNext;
+ }
+ } else if( iRc < 0 ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ if( ixList )
+ std::cout << "ixlist not null\n";
+ else
+ std::cout << "ixlist null\n";
+
+ if( !ixList || ixl->ix == pCurIx )
SetCurTag( "", NULL, NULL );
}
}
@@ -1513,6 +1667,8 @@ xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
#endif
+
+
} else {
iErrorStop = 180;
iRc = XB_INVALID_OPTION;
@@ -1562,15 +1718,19 @@ xbInt16 xbDbf::DeleteTag( const xbString &sIxType, const xbString &sName ){
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
-xbInt16 xbDbf::DumpHeader( xbInt16 iOption ) const {
+xbInt16 xbDbf::DumpHeader( xbInt16 iOption ){
int i;
int iMemoCtr = 0;
if( iOption < 1 || iOption > 4 )
return XB_INVALID_OPTION;
- if( iDbfStatus == XB_CLOSED )
- return XB_NOT_OPEN;
+ xbInt16 iRc = ReadHeader( xbTrue, 0 );
+ if( iRc != XB_NO_ERROR )
+ return iRc;
+
+// if( iDbfStatus == XB_CLOSED )
+// return XB_NOT_OPEN;
std::cout << "\nDatabase file " << GetFqFileName() << std::endl << std::endl;
@@ -1859,7 +2019,7 @@ xbUInt32 xbDbf::GetAppendLocked() const {
This routine returns the table setting if set, otherwise returns the system
level setting.
-
+
\returns Not 0 - Auto commit on for this table.<br>
0 - Auto commit off for this table.
*/
@@ -1920,8 +2080,10 @@ xbIx *xbDbf::GetCurIx() const {
/************************************************************************/
//! @brief Get pointer to current tag for the current index.
/*!
- An index file can have one or more tags. An NDX index has one tag.
- An MDX file can have up to 47 tags.
+ An index file can have one or more tags
+ NDX index files have one tag per file.
+ MDX index files can can have up to 47 tags per file.
+ TDX index files can can have up to 47 tags per file.
\returns Pointer to current tag.
*/
@@ -1932,7 +2094,8 @@ void *xbDbf::GetCurTag() const {
//! @brief Get the current index type.
/*!
\returns NDX for single tag index.<br>
- MDX for production multi tag index.
+ MDX for production multi tag index.<br>
+ TDX for temporary tag index.
*/
const xbString &xbDbf::GetCurIxType() const {
return sCurIxType;
@@ -2097,12 +2260,16 @@ xbBool xbDbf::GetBof() {
/************************************************************************/
//! @brief Return true if dbf file empty or positioned to the last record
/*!
- \returns Returns true if dbf file is empty or positioned on the last record.
+ \returns Returns true if error, dbf file is empty or positioned on the last record.
*/
xbBool xbDbf::GetEof() {
- xbUInt32 ulRecCnt = GetRecordCount();
+
+ // xbUInt32 ulRecCnt = GetRecordCount();
- if( ulRecCnt == 0 || GetCurRecNo() == ulRecCnt )
+ xbUInt32 ulRecCnt;
+ xbInt16 iRc = GetRecordCnt( ulRecCnt );
+
+ if( iRc != XB_NO_ERROR || ulRecCnt == 0 || GetCurRecNo() == ulRecCnt )
return xbTrue;
else
return xbFalse;
@@ -2542,6 +2709,7 @@ char * xbDbf::GetRecordBuf( xbInt16 iOpt ) const {
/*!
\returns Record count or <a href="xbretcod_8h.html">Return Codes</a>
*/
+/*
xbUInt32 xbDbf::GetRecordCount(){
xbUInt32 ulCnt;
@@ -2551,7 +2719,7 @@ xbUInt32 xbDbf::GetRecordCount(){
else
return ulCnt;
}
-
+*/
/************************************************************************/
//! @brief Get the current number of records in the dbf data file.
/*!
@@ -2626,8 +2794,8 @@ xbBool xbDbf::GetTableLocked() const {
This routine returns a list of tags for the file.<br>
The library is structured to support one or more files of the same or differing
- index types (NDX/MDX), with each file supporting one or more index tags.<br>
-
+ index types (NDX/MDX/TDX), with each file supporting one or more index tags.<br>
+
\returns Tag list for the file/table.
*/
xbLinkListNode<xbTag *> *xbDbf::GetTagList() const {
@@ -2944,6 +3112,19 @@ xbInt16 xbDbf::LockIndices( xbInt16 iLockFunction )
}
#endif
+ #ifdef XB_TDX_SUPPORT
+ if( *ixLI->sFmt == "TDX" ){
+ if( !ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_LOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 );
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbTrue );
+ }
+ }
+ #endif
+
} else if( iLockFunction == XB_UNLOCK ){
#ifdef XB_NDX_SUPPORT
@@ -2970,6 +3151,18 @@ xbInt16 xbDbf::LockIndices( xbInt16 iLockFunction )
}
#endif
+ #ifdef XB_TDX_SUPPORT
+ if( *ixLI->sFmt == "MDX" ){
+ if( ixLI->ix->GetLocked()){
+ if(( iRc = ixLI->ix->xbLock( XB_UNLOCK, LK4026531838, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ixLI->ix->SetLocked( xbFalse );
+ }
+ }
+ #endif
+
}
ixLI = ixLI->next;
}
@@ -3377,7 +3570,7 @@ xbInt16 xbDbf::OpenIndex( const xbString &sIxType, const xbString &sFileName ){
xbInt16 xbDbf::Pack()
{
xbUInt32 ulDeletedRecCnt;
- return Pack( ulDeletedRecCnt );
+ return Pack( ulDeletedRecCnt );
}
@@ -3484,6 +3677,7 @@ xbInt16 xbDbf::Pack( xbUInt32 &ulDeletedRecCnt )
// update header record count
xbDate d;
+ d.Sysdate();
cUpdateYY = (char) d.YearOf() - 1900;
cUpdateMM = (char) d.MonthOf();
cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
@@ -3520,7 +3714,6 @@ xbInt16 xbDbf::Pack( xbUInt32 &ulDeletedRecCnt )
}
}
#endif // XB_MEMO_SUPPORT
-
}
catch (xbInt16 iRc ){
if( iRc != XB_LOCK_FAILED ){
@@ -3665,6 +3858,7 @@ xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
// update latest header date if changed
xbDate d;
+ d.Sysdate();
if( (cUpdateYY != (char)(d.YearOf() - 1900)) || (cUpdateMM != (char) d.MonthOf()) || (cUpdateDD != (char)d.DayOf( XB_FMT_MONTH))){
cUpdateYY = (char) d.YearOf() - 1900;
cUpdateMM = (char) d.MonthOf();
@@ -3716,9 +3910,9 @@ xbInt16 xbDbf::PutRecord(xbUInt32 ulRecNo)
LockHeader( XB_UNLOCK );
LockAppend( XB_UNLOCK );
LockRecord( XB_UNLOCK, ulRecNo );
- #ifdef XB_INDEX_SUPPORT
+ #ifdef XB_INDEX_SUPPORT
LockIndices( XB_UNLOCK );
- #endif // XB_INDEX_SUPPORT
+ #endif // XB_INDEX_SUPPORT
}
#endif // XB_LOCKING_SUPPORT
@@ -3972,7 +4166,7 @@ xbInt16 xbDbf::SetCurTag( const xbString &sTagName ){
//! @brief Set the current tag for the dbf file.
/*!
- \param sIxType - One of "NDX" or MDX",
+ \param sIxType - One of "NDX", MDX or TDX",
\param pIx - Pointer to index object.
\param vpTag - Pointer to tag object.
\returns <a href="xbretcod_8h.html">Return Codes</a>
@@ -4206,6 +4400,7 @@ xbInt16 xbDbf::Zap(){
#endif
xbDate d;
+ d.Sysdate();
cUpdateYY = (char) d.YearOf() - 1900;
cUpdateMM = (char) d.MonthOf();
cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
diff --git a/src/core/xbdbf3.cpp b/src/core/xbdbf3.cpp
index d57be3c..926cc0d 100755
--- a/src/core/xbdbf3.cpp
+++ b/src/core/xbdbf3.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -180,6 +180,7 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
ulCurRec = 0L;
uiHeaderLen = 33 + iNoOfFields * 32;
xbDate d;
+ d.Sysdate();
cUpdateYY = (char) (d.YearOf() - 1900);
cUpdateMM = (char) d.MonthOf();
cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
diff --git a/src/core/xbdbf4.cpp b/src/core/xbdbf4.cpp
index 59ba39a..a1f770e 100755
--- a/src/core/xbdbf4.cpp
+++ b/src/core/xbdbf4.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -180,6 +180,7 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
ulCurRec = 0L;
uiHeaderLen = 33 + iNoOfFields * 32;
xbDate d;
+ d.Sysdate();
cUpdateYY = (char) (d.YearOf() - 1900);
cUpdateMM = (char) d.MonthOf();
cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
@@ -510,7 +511,7 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
/************************************************************************/
//! @brief Rename table.
/*!
- This routine renames a give table, associated memo and inf files
+ This routine renames a table, associated memo, mdx and inf files
\param sNewName - New file name.
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
diff --git a/src/core/xbexp.cpp b/src/core/xbexp.cpp
index deea53d..b2d4db9 100755
--- a/src/core/xbexp.cpp
+++ b/src/core/xbexp.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2017,2021,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2017,2021,2022,2023 Gary A Kunkel
The xb64 software library is covered under
the terms of the GPL Version 3, 2007 license.
@@ -1097,12 +1097,12 @@ xbBool xbExp::IsOperator( const xbString & sExpression ){
}
/*************************************************************************/
-//! Is Token seperator
-/*! This method determines if the next token is a seperator.
+//! Is Token separator
+/*! This method determines if the next token is a separator.
\param sExpression - String expression to be evaluated.
- \returns xbTrue - Is a token seperator.<br>
- xbFalse - Is not a token seperator.
+ \returns xbTrue - Is a token separator.<br>
+ xbFalse - Is not a token separator.
*/
char xbExp::IsTokenSeparator( char c ){
if( c == '-' || c == '+' || c == '*' || c == '/' || c == '$' || c == '#' ||
@@ -1205,12 +1205,13 @@ xbInt16 xbExp::ParseExpression( xbDbf *dbf, const xbString &sExpression ){
*/
xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
- xbExpNode *n;
+ xbExpNode *n = NULL;
xbExpNode *nLastNode = NULL; // pointer to the last node processed
xbExpToken t;
xbInt16 iRc = XB_NO_ERROR;
xbInt16 iErrorStop = 0;
xbString s;
+ xbBool bNewNode = xbFalse;
try {
@@ -1249,6 +1250,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
case XB_EXP_CONSTANT:
n = new xbExpNode( t.sToken, t.cNodeType );
+ bNewNode = xbTrue;
if(( iRc = ParseExpressionConstant( t, n )) != XB_NO_ERROR ){
iErrorStop = 120;
throw iRc;
@@ -1257,6 +1259,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
case XB_EXP_FUNCTION:
n = new xbExpNode( t.cNodeType );
+ bNewNode = xbTrue;
if(( iRc = ParseExpressionFunction( t, n, iWeight )) != XB_NO_ERROR ){
iErrorStop = 130;
throw iRc;
@@ -1265,6 +1268,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
case XB_EXP_FIELD:
n = new xbExpNode( t.cNodeType );
+ bNewNode = xbTrue;
if(( iRc = ParseExpressionField( t, n )) != XB_NO_ERROR ){
iErrorStop = 140;
throw iRc;
@@ -1275,6 +1279,7 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
case XB_EXP_PRE_OPERATOR:
case XB_EXP_POST_OPERATOR:
n = new xbExpNode( t.sToken, t.cNodeType );
+ bNewNode = xbTrue;
if(( iRc = ParseExpressionOperator( t, n, iWeight )) != XB_NO_ERROR ){
iErrorStop = 150;
throw iRc;
@@ -1429,6 +1434,8 @@ xbInt16 xbExp::ParseExpression( const xbString &sExpression, xbInt16 iWeight ){
}
}
catch (xbInt16 iRc ){
+ if( bNewNode && n )
+ delete n;
xbString sMsg;
sMsg.Sprintf( "xbexp::ParseExpression() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
xbase->WriteLogMessage( sMsg.Str() );
@@ -1933,7 +1940,9 @@ xbInt16 xbExp::ProcessExpression( xbInt16 iRecBufSw ){
throw iRc;
}
if( sWork1 == " " ){
- nWork->SetResult( (xbDouble) 21474835648 ); // dbase sets a date value in ndx to this if spaces on dbf record
+ // std::cout << "xbExp::ProcessExpression() line 1938 sWork is spaces\n";
+ //nWork->SetResult( (xbDouble) 21474835648 ); // dbase sets a date value in both ndx and mdx index files to this if spaces on dbf record
+ nWork->SetResult( (xbDouble) XB_NULL_DATE );
} else {
dtWork1.Set( sWork1 );
nWork->SetResult( (xbDouble) dtWork1.JulianDays() );
@@ -2423,7 +2432,6 @@ xbInt16 xbExp::ProcessExpressionOperator( xbExpNode * n ){
xbString sMsg;
try{
-
n->GetNodeText( sOperator );
nChild1 = n->GetChild( 0 );
if( !n->IsUnaryOperator())
@@ -2532,10 +2540,19 @@ xbInt16 xbExp::ProcessExpressionOperator( xbExpNode * n ){
if( nChild1->GetReturnType() == XB_EXP_CHAR )
n->SetResult((xbBool)(nChild1->GetStringResult() > nChild2->GetStringResult()));
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
+
+ else if( nChild1->GetReturnType() == XB_EXP_NUMERIC )
n->SetResult((xbBool)(nChild1->GetNumericResult() > nChild2->GetNumericResult()));
- else {
+ else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 > d2));
+ // n->SetResult((xbBool)(nChild1->GetNumericResult() > nChild2->GetNumericResult()));
+
+ } else {
iErrorStop = 410;
iRc = XB_PARSE_ERROR;
throw iRc;
@@ -2546,10 +2563,18 @@ xbInt16 xbExp::ProcessExpressionOperator( xbExpNode * n ){
if( nChild1->GetReturnType() == XB_EXP_CHAR )
n->SetResult((xbBool)(nChild1->GetStringResult() >= nChild2->GetStringResult()));
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
+ else if( nChild1->GetReturnType() == XB_EXP_NUMERIC )
n->SetResult((xbBool)(nChild1->GetNumericResult() >= nChild2->GetNumericResult()));
- else {
+ else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 >= d2));
+ //n->SetResult((xbBool)(nChild1->GetNumericResult() >= nChild2->GetNumericResult()));
+
+ } else {
iErrorStop = 420;
iRc = XB_PARSE_ERROR;
throw iRc;
@@ -2558,13 +2583,23 @@ xbInt16 xbExp::ProcessExpressionOperator( xbExpNode * n ){
else if( sOperator == "<" ){
- if( nChild1->GetReturnType() == XB_EXP_CHAR )
+ if( nChild1->GetReturnType() == XB_EXP_CHAR ){
n->SetResult((xbBool)( nChild1->GetStringResult() < nChild2->GetStringResult()));
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
+ } else if( nChild1->GetReturnType() == XB_EXP_NUMERIC ){
n->SetResult((xbBool)( nChild1->GetNumericResult() < nChild2->GetNumericResult()));
- else {
+ } else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+
+ n->SetResult((xbBool)( d1 < d2));
+
+ // std::cout << "xbexp() line 2567 [" << nChild1->GetNumericResult() << "][" << nChild2->GetNumericResult() << "]\n";
+
+ } else {
iErrorStop = 430;
iRc = XB_PARSE_ERROR;
throw iRc;
@@ -2576,10 +2611,18 @@ xbInt16 xbExp::ProcessExpressionOperator( xbExpNode * n ){
if( nChild1->GetReturnType() == XB_EXP_CHAR )
n->SetResult((xbBool)( nChild1->GetStringResult() <= nChild2->GetStringResult()));
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
+ else if( nChild1->GetReturnType() == XB_EXP_NUMERIC )
n->SetResult((xbBool)( nChild1->GetNumericResult() <= nChild2->GetNumericResult()));
- else {
+ else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 <= d2));
+ // n->SetResult((xbBool)( nChild1->GetNumericResult() <= nChild2->GetNumericResult()));
+
+ } else {
iErrorStop = 440;
iRc = XB_PARSE_ERROR;
throw iRc;
@@ -2591,10 +2634,18 @@ xbInt16 xbExp::ProcessExpressionOperator( xbExpNode * n ){
if( nChild1->GetReturnType() == XB_EXP_CHAR )
n->SetResult((xbBool)( nChild1->GetStringResult() != nChild2->GetStringResult()));
- else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
+ else if( nChild1->GetReturnType() == XB_EXP_NUMERIC )
n->SetResult((xbBool)( nChild1->GetNumericResult() != nChild2->GetNumericResult()));
- else {
+ else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 != d2));
+ // n->SetResult((xbBool)( nChild1->GetNumericResult() != nChild2->GetNumericResult()));
+
+ } else {
iErrorStop = 450;
iRc = XB_PARSE_ERROR;
throw iRc;
@@ -2623,15 +2674,24 @@ xbInt16 xbExp::ProcessExpressionOperator( xbExpNode * n ){
sChld2.Rtrim();
n->SetResult((xbBool)( sChld1 == sChld2 ));
- } else if( nChild1->GetReturnType() == XB_EXP_NUMERIC || nChild1->GetReturnType() == XB_EXP_DATE )
+ } else if( nChild1->GetReturnType() == XB_EXP_NUMERIC ){
n->SetResult((xbBool)( nChild1->GetNumericResult() == nChild2->GetNumericResult()));
- else {
+ } else if( nChild1->GetReturnType() == XB_EXP_DATE ){
+ xbDouble d1 = nChild1->GetNumericResult();
+ xbDouble d2 = nChild2->GetNumericResult();
+ if( d1 == XB_NULL_DATE ) d1 = 0;
+ if( d2 == XB_NULL_DATE ) d2 = 0;
+ n->SetResult((xbBool)( d1 == d2));
+ // n->SetResult((xbBool)( nChild1->GetNumericResult() == nChild2->GetNumericResult()));
+
+ } else {
iErrorStop = 470;
iRc = XB_PARSE_ERROR;
throw iRc;
}
+
} else {
iErrorStop = 500;
iRc = XB_PARSE_ERROR;
diff --git a/src/core/xbexpnode.cpp b/src/core/xbexpnode.cpp
index 77a8c33..d11e8cc 100755
--- a/src/core/xbexpnode.cpp
+++ b/src/core/xbexpnode.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2017,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2017,2022,2023 Gary A Kunkel
The xb64 software library is covered under
the terms of the GPL Version 3, 2007 license.
diff --git a/src/core/xbfields.cpp b/src/core/xbfields.cpp
index e683d9c..85ac145 100755
--- a/src/core/xbfields.cpp
+++ b/src/core/xbfields.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -87,8 +87,8 @@ xbInt16 xbDbf::GetDateField( xbInt16 iFieldNo, xbDate &dtFieldValue ) const{
xbInt16 iRc;
if(( iRc = GetField( iFieldNo, s )) != XB_NO_ERROR )
return iRc;
- dtFieldValue.Set( s );
- return XB_NO_ERROR;
+ return dtFieldValue.Set( s );
+ // return XB_NO_ERROR;
}
/************************************************************************/
@@ -106,8 +106,8 @@ xbInt16 xbDbf::GetDateField( const xbString &sFieldName, xbDate &dtFieldValue )
xbInt16 iRc;
if(( iRc = GetField( sFieldName, s )) != XB_NO_ERROR )
return iRc;
- dtFieldValue.Set( s );
- return XB_NO_ERROR;
+ return dtFieldValue.Set( s );
+ // return XB_NO_ERROR;
}
/************************************************************************/
@@ -163,6 +163,7 @@ xbInt16 xbDbf::GetField( xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBu
return XB_NO_ERROR;
}
+
/************************************************************************/
//! @brief Get decimal for field name.
/*!
@@ -605,6 +606,68 @@ xbInt16 xbDbf::GetMemoFieldLen( const xbString &sFieldName, xbUInt32 &ulMemoFiel
#endif // XB_MEMO_SUPPORT
/************************************************************************/
+//! @brief Get field null status
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param bIsNull Output field value. If field is all spaces on record buffer, returns true.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+xbInt16 xbDbf::GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull ) const {
+ return GetNullSts( iFieldNo, bIsNull, 0 );
+}
+
+/************************************************************************/
+//! @brief Get field null status
+/*!
+ \param iFieldName Field Name of field to retrieve.
+ \param bIsNull Output field value. If field is all spaces on record buffer, returns true.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetNullSts( const xbString &sFieldName, xbBool &bIsNull ) const {
+ return GetNullSts( GetFieldNo( sFieldName ), bIsNull, 0 );
+}
+
+/************************************************************************/
+//! @brief Get field null status
+/*!
+ \param iFieldNo Number of field to retrieve.
+ \param bIsNull Output field value. If field is all spaces on record buffer, returns true.
+ \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data.
+ \returns The field routines return one of:<br>
+ XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br>
+ XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA
+*/
+
+xbInt16 xbDbf::GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull, xbInt16 iRecBufSw ) const
+{
+ if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
+ return XB_INVALID_FIELD_NO;
+ }
+ bIsNull = xbTrue;
+ char *p;
+ if( iRecBufSw )
+ p = (char *) SchemaPtr[iFieldNo].pAddress2;
+ else
+ p = (char *) SchemaPtr[iFieldNo].pAddress;
+
+ xbUInt32 ulLen = SchemaPtr[iFieldNo].cFieldLen;
+ xbUInt32 ul = 0;
+
+ while( ul < ulLen && bIsNull ){
+ if( *p++ != ' ' )
+ bIsNull = xbFalse;
+ else
+ ul++;
+ }
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
//! @brief Get unsigned long field for field number.
/*!
\param iFieldNo Number of field to retrieve.
@@ -625,13 +688,11 @@ xbInt16 xbDbf::GetULongField( xbInt16 iFieldNo, xbUInt32 & ulFieldValue ) const
iErrorStop = 100;
throw rc;
}
-
if( cFieldType != 'N' && cFieldType != 'F' && cFieldType != 'M' ){
iErrorStop = 110;
rc = XB_INVALID_FIELD_TYPE;
throw rc;
}
-
xbString sTemp;
if(( rc = GetField( iFieldNo, sTemp, 0 )) != XB_NO_ERROR ){
iErrorStop = 120;
@@ -645,14 +706,12 @@ xbInt16 xbDbf::GetULongField( xbInt16 iFieldNo, xbUInt32 & ulFieldValue ) const
}
ulFieldValue = strtoul( sTemp.Str(), NULL, 10 );
}
-
catch (xbInt16 rc ){
xbString sMsg;
sMsg.Sprintf( "xbDbf::GetULongField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc );
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( rc ));
}
-
return XB_NO_ERROR;
}
diff --git a/src/core/xbfile.cpp b/src/core/xbfile.cpp
index 3b798a2..6376e9a 100755
--- a/src/core/xbfile.cpp
+++ b/src/core/xbfile.cpp
@@ -49,119 +49,6 @@ xbFile::~xbFile(){
}
/************************************************************************/
-//! @brief Create Home Folders.
-/*!
- Create xbase64 log and data folders in the home directory for current usre.
-
- \returns <a href="xbretcod_8h.html">Return Codes</a>
-*/
-
-xbInt16 xbFile::SetHomeFolders(){
-
- xbInt16 iErrorStop = 0;
- xbInt16 iRc = XB_NO_ERROR;
- xbString sHomeDir;
- char cPathSeperator;
- xbString sDflt;
-
- try{
-
- GetHomeDir( sHomeDir );
- //std::cout << "CreateHomeFolders() home dir = [" << sHomeDir.Str() << "]\n";
-
- if( FileExists( sHomeDir ) == xbFalse ){
- iErrorStop = 100;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
-
- #ifdef WIN32
- cPathSeperator = '\\';
- #else
- cPathSeperator = '/';
- #endif
- sDflt.Sprintf( ".%c", cPathSeperator );
- // set the default folders just in case later steps fail
- xbase->SetDataDirectory( sDflt );
- #ifdef XB_LOGGING_SUPPORT
- xbase->SetLogDirectory( sDflt );
- #endif
-
- if( sHomeDir[sHomeDir.Len()] != cPathSeperator )
- sHomeDir += cPathSeperator;
-
- xbString sWork( sHomeDir );
- sWork += "xbase64";
-
- if( FileExists( sWork ) == xbFalse ){
- #ifdef WIN32
- if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
- iErrorStop = 130;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #else
- // 0777 mode is correct, the mode will be modified by the user's umask
- if( mkdir( sWork.Str(), 0777 ) == -1 ){
- iErrorStop = 140;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #endif
- }
-
- #ifdef XB_LOGGING_SUPPORT
- sWork.Sprintf( "%sxbase64%clogs", sHomeDir.Str(), cPathSeperator );
- // std::cout << "logdir = " << sWork.Str() << "\n";
-
- if( FileExists( sWork ) == xbFalse ){
- #ifdef WIN32
- if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
- iErrorStop = 110;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #else
- if( mkdir( sWork.Str(), 0777 ) == -1 ){
- iErrorStop = 120;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #endif
- }
- xbase->SetLogDirectory( sWork );
- #endif // XB_LOGGING_SUPPORT
-
- sWork.Sprintf( "%sxbase64%cdata", sHomeDir.Str(), cPathSeperator );
- // std::cout << "datadir = " << sWork.Str() << "\n";
- if( FileExists( sWork ) == xbFalse ){
- #ifdef WIN32
- if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
- iErrorStop = 130;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #else
- if( mkdir( sWork.Str(), 0777 ) == -1 ){
- iErrorStop = 140;
- iRc = XB_DIRECTORY_ERROR;
- throw iRc;
- }
- #endif
- }
- xbase->SetDataDirectory( sWork );
-
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbFile::CreateHomeFolders() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
- return iRc;
-}
-
-/************************************************************************/
//! @brief Create a unique file name.
/*!
Given a directory and file extension as inputs, create a unique file name.
@@ -171,15 +58,16 @@ xbInt16 xbFile::SetHomeFolders(){
\param sFqnOut A fully qualifed unique file name as output
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
+/*
xbInt16 xbFile::CreateUniqueFileName( const xbString & sDirIn, const xbString & sExtIn, xbString &sFqnOut ){
return CreateUniqueFileName( sDirIn, sExtIn, sFqnOut, 0 );
}
-
+*/
/************************************************************************/
//! @brief Create a unique file name.
/*!
Given a directory and file extension as inputs, create a unique file name.
-
+
\param sDirIn Directory
\param sExtIn File Extension
\param iOption 0 - look only for one file for a given directory and extension<br>
@@ -192,12 +80,16 @@ xbInt16 xbFile::CreateUniqueFileName( const xbString & sDirIn, const xbString &
xbBool bUniqueFileNameFound = xbFalse;
xbFile f( xbase);
- xbInt32 l = 1;
+ xbInt32 l = 1;
xbString sMemoFileName;
+ xbString sDir = sDirIn;
+ char c = GetPathSeparator();
+ if( sDirIn.Len() > 0 && sDirIn[sDirIn.Len()] != c )
+ sDir += c;
while( !bUniqueFileNameFound ){
- sFqnOut.Sprintf( "%sxbTmp%03d.%s", sDirIn.Str(), l, sExtIn.Str());
+ sFqnOut.Sprintf( "%sxbTmp%03d.%s", sDir.Str(), l, sExtIn.Str());
if( iOption == 1 && sExtIn == "DBF" ){
sMemoFileName.Sprintf( "%sxbTmp%03d.DBT", sDirIn.Str(), l );
}
@@ -693,7 +585,6 @@ const xbString & xbFile::GetDirectory() const {
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
-
xbInt16 xbFile::GetFileDirPart( xbString & sFileDirPartOut ) const {
return GetFileDirPart( sFqFileName, sFileDirPartOut );
}
@@ -1139,7 +1030,6 @@ xbInt16 xbFile::SetBlockSize( xbUInt32 ulBlockSize ){
\param sDirectory - Valid directory name
*/
-
void xbFile::SetDirectory( const xbString & sDirectory ){
this->sDirectory = sDirectory;
@@ -1242,6 +1132,136 @@ void xbFile::SetFqFileName( const xbString & sFqFileName ){
}
/************************************************************************/
+//! @brief Set Home Folders.
+/*!
+ Create xbase64 log, data and temp folders in the home directory for current usre.
+
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+xbInt16 xbFile::SetHomeFolders(){
+
+ xbInt16 iErrorStop = 0;
+ xbInt16 iRc = XB_NO_ERROR;
+ xbString sHomeDir;
+ char cPathSeparator;
+ xbString sDflt;
+
+ try{
+
+ GetHomeDir( sHomeDir );
+ //std::cout << "CreateHomeFolders() home dir = [" << sHomeDir.Str() << "]\n";
+
+ if( FileExists( sHomeDir ) == xbFalse ){
+ iErrorStop = 100;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+
+ #ifdef WIN32
+ cPathSeparator = '\\';
+ #else
+ cPathSeparator = '/';
+ #endif
+ sDflt.Sprintf( ".%c", cPathSeparator );
+ // set the default folders just in case later steps fail
+ xbase->SetDataDirectory( sDflt );
+ #ifdef XB_LOGGING_SUPPORT
+ xbase->SetLogDirectory( sDflt );
+ #endif
+
+ if( sHomeDir[sHomeDir.Len()] != cPathSeparator )
+ sHomeDir += cPathSeparator;
+
+ xbString sWork( sHomeDir );
+ sWork += "xbase64";
+
+ if( FileExists( sWork ) == xbFalse ){
+ #ifdef WIN32
+ if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
+ iErrorStop = 130;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #else
+ // 0777 mode is correct, the mode will be modified by the user's umask
+ if( mkdir( sWork.Str(), 0777 ) == -1 ){
+ iErrorStop = 140;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #endif
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sWork.Sprintf( "%sxbase64%clogs", sHomeDir.Str(), cPathSeparator );
+ // std::cout << "logdir = " << sWork.Str() << "\n";
+
+ if( FileExists( sWork ) == xbFalse ){
+ #ifdef WIN32
+ if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
+ iErrorStop = 110;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #else
+ if( mkdir( sWork.Str(), 0777 ) == -1 ){
+ iErrorStop = 120;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #endif
+ }
+ xbase->SetLogDirectory( sWork );
+ #endif // XB_LOGGING_SUPPORT
+
+ sWork.Sprintf( "%sxbase64%cdata", sHomeDir.Str(), cPathSeparator );
+ // std::cout << "datadir = " << sWork.Str() << "\n";
+ if( FileExists( sWork ) == xbFalse ){
+ #ifdef WIN32
+ if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
+ iErrorStop = 130;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #else
+ if( mkdir( sWork.Str(), 0777 ) == -1 ){
+ iErrorStop = 140;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #endif
+ }
+
+ sWork.Sprintf( "%sxbase64%ctemp%c", sHomeDir.Str(), cPathSeparator, cPathSeparator );
+ // std::cout << "tempdir = " << sWork.Str() << "\n";
+ if( FileExists( sWork ) == xbFalse ){
+ #ifdef WIN32
+ if( CreateDirectory( sWork.Str(), NULL ) == 0 ){
+ iErrorStop = 150;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #else
+ if( mkdir( sWork.Str(), 0777 ) == -1 ){
+ iErrorStop = 160;
+ iRc = XB_DIRECTORY_ERROR;
+ throw iRc;
+ }
+ #endif
+ }
+ xbase->SetTempDirectory( sWork );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::CreateHomeFolders() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
//! @brief Write a block of data to file.
/*!
@@ -1744,6 +1764,7 @@ xbInt16 xbFile::xbRemove( const xbString & sFileNameIn ) {
xbInt16 xbFile::xbRemove( const xbString & sFileNameIn, xbInt16 iOption ) {
xbInt32 iRc = remove( sFileNameIn.Str());
+
if( iRc != 0 )
return XB_DELETE_FAILED;
@@ -1904,7 +1925,7 @@ xbInt16 xbFile::xbLock( xbInt16 iFunction, xbInt64 lOffset, size_t stLen ){
Qsplit lPos;
Qsplit lLen;
- lPos.Qword = lOffset;
+ lPos.Qword = (size_t) lOffset;
lLen.Qword = stLen;
do{
@@ -2037,7 +2058,9 @@ xbInt16 xbFile::DumpMemToDisk( char *p, size_t lSize ){
try{
- sDir = GetLogDirectory();
+ // sDir = GetLogDirectory();
+ sDir = xbase->GetLogDirectory();
+
char cLastChar = sDir[sDir.Len()];
// build logfile name
@@ -2127,7 +2150,8 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
throw iRc;
}
- sDir = GetLogDirectory();
+// sDir = GetLogDirectory();
+ sDir = xbase->GetLogDirectory();
char cLastChar = sDir[sDir.Len()];
for( xbUInt32 l = ulStartBlock; l < ulEndBlock; l++ ){
diff --git a/src/core/xbfilter.cpp b/src/core/xbfilter.cpp
index 0fb643d..5c5f276 100755
--- a/src/core/xbfilter.cpp
+++ b/src/core/xbfilter.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
diff --git a/src/core/xbfuncs.cpp b/src/core/xbfuncs.cpp
index a038611..f127211 100755
--- a/src/core/xbfuncs.cpp
+++ b/src/core/xbfuncs.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2017,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2017,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -611,12 +611,13 @@ xbInt16 xbXBase::RTRIM( const xbString &sIn, xbString &sOut ){
/*!
Expression function SPACE().
\param lCnt Input - Number of spaces.
- \param sOut Output - Output String.
+ \param sOut Output - Output string consisting of specified number of spaces.
\returns XB_NO_ERROR.
*/
xbInt16 xbXBase::SPACE( xbInt32 lCnt, xbString &sOut ){
sOut = "";
- sOut.PadLeft( ' ', (xbUInt32) lCnt );
+ for( xbInt32 i = 0; i < lCnt; i++ )
+ sOut += ' ';
return XB_NO_ERROR;
}
diff --git a/src/core/xbixbase.cpp b/src/core/xbixbase.cpp
index 8b64fd6..e2f929c 100755
--- a/src/core/xbixbase.cpp
+++ b/src/core/xbixbase.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
diff --git a/src/core/xbixmdx.cpp b/src/core/xbixmdx.cpp
index 135cde8..0eef64b 100755
--- a/src/core/xbixmdx.cpp
+++ b/src/core/xbixmdx.cpp
@@ -92,11 +92,7 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
iErrorStop = 100;
throw iRc;
}
-
xbInt32 lKeyCnt = GetKeyCount( npTag->npCurNode );
-
- // std::cout << "xbIxMdx::AddKeys() lKeyCnt = " << lKeyCnt << " KeysPerBlock = " << npTag->iKeysPerBlock << " npBlockNo = " << npTag->npCurNode->ulBlockNo << "\n";
-
if( lKeyCnt < npTag->iKeysPerBlock ){
// Section A - add key to appropriate position if space available
// std::cout << "AddKey Section A begin\n";
@@ -104,12 +100,8 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
iErrorStop = 110;
throw iRc;
}
- //std::cout << "AddKey Section A end\n";
} else {
-
// land here with a full leaf node
- // std::cout << "Section B begin split leaf node\n";
-
iHeadNodeUpdateOpt = 1;
npRightNode = AllocateIxNode( npTag, GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor );
if( !npRightNode ){
@@ -122,26 +114,14 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
ulNewRightChild = npRightNode->ulBlockNo * (xbUInt32) iBlockFactor;
}
- // std::cout << "ulNewRightChild = " << ulNewRightChild << "\n";
-
if(( iRc = xbIxMdx::SplitNodeL( npTag, npTag->npCurNode, npRightNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
iErrorStop = 130;
throw iRc;
}
xbUInt32 ulTempBlockNo = npRightNode->ulBlockNo;
-
- //std::cout << "ulTempBlockNo = " << ulTempBlockNo << "\n";
- //std::cout << "key count left block " << GetKeyCount( npTag->npCurNode ) << "\n";
- //std::cout << "key count right block " << GetKeyCount( npRightNode ) << "\n";
-
-
- //std::cout << "Section B end\n";
-
// section C - go up the tree, splitting nodes as necessary
xbIxNode * npParent = npTag->npCurNode->npPrev;
-
-
while( npParent && GetKeyCount( npParent ) >= npTag->iKeysPerBlock ){
//std::cout << "Section C begin interior node is full\n";
npRightNode = FreeNodeChain( npRightNode );
@@ -165,23 +145,15 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
npParent = npParent->npPrev;
}
- // std::cout << "Past Section C Cur Node Block No = " << npTag->npCurNode->ulBlockNo << " root page = " << npTag->ulRootPage << "\n";
// section D - if cur node is split root, create new root
-
if(( npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor ) == npTag->ulRootPage ){
-
- // std::cout << "Section D begin right node = " << npRightNode << "\n";
-
if(( iRc = AddKeyNewRoot( npTag, npTag->npCurNode, npRightNode )) != XB_NO_ERROR ){
iErrorStop = 160;
throw iRc;
}
-
if( npRightNode )
npRightNode = FreeNodeChain( npRightNode );
- // std::cout << "Section D end\n";
-
} else {
// std::cout << "Section E, put key in parent\n";
@@ -213,8 +185,6 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
if( ulNewRightChild > 0 ){
-// std::cout << "ulRightChild was = " << npTag->ulRightChild << " changed to " << ulNewRightChild << "\n";
-
char cBuf[4];
ePutUInt32( cBuf, ulNewRightChild );
if(( iRc = xbFseek( ((npTag->ulTagHdrPageNo * 512) + 252), SEEK_SET )) != XB_NO_ERROR ){
@@ -225,7 +195,6 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
iErrorStop = 220;
throw iRc;
}
-// std::cout << "setting right child\n";
npTag->ulRightChild = ulNewRightChild;
}
@@ -243,7 +212,6 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
}
return iRc;
}
-
/***********************************************************************/
void xbIxMdx::AppendNodeChain( void *vpTag, xbIxNode * npNode ){
xbMdxTag * mdxTag = (xbMdxTag *) vpTag;
@@ -282,11 +250,6 @@ xbInt16 xbIxMdx::AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *np
}
npTag->ulRootPage = npRoot->ulBlockNo;
- // std::cout << "AddKeyNewRoot - RootBlock = " << npRoot->ulBlockNo << "\n";
- // std::cout << "AddKeyNewRoot - LeftBlock = " << npLeft->ulBlockNo << "\n";
- // std::cout << "AddKeyNewRoot - RightBlock = " << npRight->ulBlockNo << "\n";
-
-
pLastKey = (char *) malloc( (size_t) npTag->iKeyLen );
if(( iRc = GetLastKeyForBlockNo( npTag, npLeft->ulBlockNo, pLastKey )) != XB_NO_ERROR ){
iErrorStop = 110;
@@ -303,17 +266,8 @@ xbInt16 xbIxMdx::AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *np
// set the key
pTrg+= 4;
- // std::cout << "AddKeyNewRoot - key [" << pLastKey << "] len = [" << strlen( pLastKey) << "]\n";
memcpy( pTrg, pLastKey, (size_t) npTag->iKeyLen );
-
- // set the right node number
- //pTrg+= (npTag->iKeyLen);
- // pTrg+= (npTag->iKeyItemLen)-4;
-
pTrg+= npTag->iKeyItemLen - 4;
-
- //pTrg-=4;
-
ePutUInt32( pTrg, npRight->ulBlockNo * (xbUInt32) iBlockFactor );
// write out the new block
@@ -326,8 +280,6 @@ xbInt16 xbIxMdx::AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *np
// position the file
xbUInt32 ulPagePos = npTag->ulTagHdrPageNo * 512;
- // std::cout << "ulPagePos = " << ulPagePos << " root block no = " << npRoot->ulBlockNo << " \n";
-
// save the number to a buffer
char cBuf[4];
ePutUInt32( cBuf, npRoot->ulBlockNo * ((xbUInt32) iBlockFactor ));
@@ -375,9 +327,6 @@ xbIxNode * xbIxMdx::AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt
xbIxNode *n = NULL;
try{
-
- // std::cout << "xbIxMdx::AllocateIxNode()\n";
-
if(( n = xbIx::AllocateIxNode( ulBufSize )) == NULL ){
iRc = XB_NO_MEMORY;
iErrorStop = 100;
@@ -387,10 +336,7 @@ xbIxNode * xbIxMdx::AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt
p += 4;
if( ulFirstFreePage > 0 && bReuseEmptyNodes ){
- // we have an empty node we can reuse
-
- // std::cout << "Reusing node " << ulFirstFreePage << "\n";
-
+ // have an empty node we can reuse
n->ulBlockNo = PageToBlock( ulFirstFreePage );
if(( iRc = ReadBlock( n->ulBlockNo, GetBlockSize(), n->cpBlockData )) != XB_NO_ERROR ){
iRc = 110;
@@ -409,7 +355,6 @@ xbIxNode * xbIxMdx::AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt
// memset cpBlockData to zeroes
memset( n->cpBlockData, 0x00, GetBlockSize());
-
} else {
n->ulBlockNo = ulPageCnt / (xbUInt32) iBlockFactor;
ulPageCnt += (xbUInt32) iBlockFactor;
@@ -419,9 +364,6 @@ xbIxNode * xbIxMdx::AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt
if( ulBlock2 > 0 ){
ePutUInt32( p, ulBlock2 );
}
-
- // std::cout << "AllocateIxNode incremented the block to " << ulPageCnt << "\n";
- // std::cout << "AllocateIxNode new block number = " << n->ulBlockNo << "\n";
}
catch( xbInt16 iRc ){
xbString sMsg;
@@ -431,9 +373,7 @@ xbIxNode * xbIxMdx::AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt
if( n )
n = FreeNodeChain( n );
}
-
return n;
-
}
/***********************************************************************/
//! @brief Calculate B-tree pointers.
@@ -496,8 +436,6 @@ void xbIxMdx::CalcBtreePointers(){
xbString s;
xbMdxTag *mpTag = mdxTagTbl;
for( xbInt16 i = 0; i < iTagUseCnt; i++ ){
-// s.Sprintf( "tag = [%d] parent = [%d] left = [%d] right = [%d]\n", i, iaParent[i], iaLeftChild[i], iaRightChild[i]);
-// std::cout << s;
mpTag->cLeftChild = (char ) iaLeftChild[i];
mpTag->cRightChild = (char ) iaRightChild[i];
mpTag->cParent = (char ) iaParent[i];
@@ -597,9 +535,7 @@ xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
xbBool bLocked = xbFalse;
#endif
-
try{
-// xbase->WriteLogMessage( "xbIxMdx::CheckTagIntegrity()", iOpt );
#ifdef XB_LOCKING_SUPPORT
if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
@@ -612,7 +548,6 @@ xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
#endif
memset( npTag->cpKeyBuf2, 0x00, (size_t) npTag->iKeyLen );
- // memset( npTag->cpKeyBuf2, 0x00, (size_t) npTag->iKeyItemLen );
cKeyType = GetKeyType( vpTag );
pPrevKeyBuf = (char *) calloc( 1, (size_t) npTag->iKeyLen );
@@ -716,10 +651,8 @@ xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
xbase->WriteLogMessage( sMsg, iOpt );
}
-
if( pPrevKeyBuf )
free( pPrevKeyBuf );
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -734,7 +667,6 @@ xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
xbase->WriteLogMessage( sMsg, iOpt );
}
}
-
#ifdef XB_LOCKING_SUPPORT
if( bLocked ){
dbf->LockTable( XB_UNLOCK );
@@ -795,7 +727,6 @@ xbInt16 xbIxMdx::Close(){
return iRc;
}
-
/***********************************************************************/
//! @brief Create key.
/*!
@@ -830,9 +761,6 @@ xbInt16 xbIxMdx::CreateKey( void *vpTag, xbInt16 iOpt ){
xbMdxTag *npTag = (xbMdxTag *) vpTag;
npTag->iKeySts = 0;
- // char *p0 = dbf->GetRecordBuf(0);
- // char *p1 = dbf->GetRecordBuf(1);
-
// do tag filter logic
if( npTag->cHasFilter ){
if(( iRc = npTag->filter->ProcessExpression( 0 )) != XB_NO_ERROR ){
@@ -843,8 +771,6 @@ xbInt16 xbIxMdx::CreateKey( void *vpTag, xbInt16 iOpt ){
iErrorStop = 110;
throw iRc;
}
- // std::cout << "cp1 f0 = " << bFilter0 << "\n";
- // printf( "del byte 0 [%x] 1 [%x]\n", *p0, *p1 );
} else {
bFilter0 = xbTrue;
}
@@ -922,10 +848,6 @@ xbInt16 xbIxMdx::CreateKey( void *vpTag, xbInt16 iOpt ){
npTag->iKeySts = XB_ADD_KEY;
}
}
-
-// std::cout << "xbIxMdx::CreateKey key sts = " << npTag->iKeySts << " iOpt = " << iOpt << " type = " << npTag->exp->GetReturnType() << " name = " << npTag->cTagName;
-// std::cout << " f0 = " << bFilter0 << " f1 = " << bFilter1 << "\n";
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -933,16 +855,15 @@ xbInt16 xbIxMdx::CreateKey( void *vpTag, xbInt16 iOpt ){
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
-
return iRc;
}
-
/***********************************************************************/
//! @brief Create new tag.
/*!
This routine creates a new tag. When complete, sets the cur tag pointer to
the newly created tag.
+
\param sName Tag Name, including .MDX suffix
\param sKey Key Expression
\param sFilter Filter expression.
@@ -960,11 +881,6 @@ xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const
xbInt16 iErrorStop = 0;
xbMdxTag *tte = NULL;
-
- // std::cout << "CreateTag() name=[" << sName.Str() << "] key=[" << sKey.Str() << "] sFilter=[" << sFilter.Str() << "]\n";
- // std::cout << "TagUseCnt = " << iTagUseCnt << std::endl;
-
-
try{
// verify room for new tag
if( !( iTagUseCnt < 47 )){
@@ -1016,8 +932,6 @@ xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const
throw iRc;
}
- // tte->filter->DumpTree( 1 );
-
if((tte->filter->GetReturnType()) != 'L' ){
iRc = XB_INVALID_TAG;
iErrorStop = 160;
@@ -1042,7 +956,7 @@ xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const
}
xbDate d;
-
+ d.Sysdate();
if( iTagUseCnt == 0 ){
// first tag, new mdx file
// create the file name
@@ -1132,11 +1046,6 @@ xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const
tte->cpKeyBuf = (char *) malloc( (size_t) tte->iKeyLen + 1 );
tte->cpKeyBuf2 = (char *) malloc( (size_t) tte->iKeyLen + 1 );
-// if( 0 ){
-// printf( "ulTagHdrPageNo=[%d] cTagName=[%-11s], cLeftChild=[%d] cRightChild=[%d] cParent=[%d] cKeyType=[%c]\n\n",
-// tte->ulTagHdrPageNo, tte->cTagName, tte->cLeftChild, tte->cRightChild, tte->cParent, tte->cKeyType );
-// }
-
// write the new tte entry here
char tteBuf[21];
memset( tteBuf, 0x00, 21 );
@@ -1158,7 +1067,6 @@ xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const
throw iRc;
}
-
// Begin Tag Header
tte->ulRootPage = ulPageCnt;
tte->ulTagSize = (xbUInt32) iBlockFactor;
@@ -1185,15 +1093,8 @@ xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const
while(( tte->iKeyItemLen % 4 ) != 0 ) tte->iKeyItemLen++;
tte->iKeysPerBlock = (xbInt16) (GetBlockSize() - 12) / tte->iKeyItemLen;
-
- //std::cout << "-------------- create tag info\n";
- //std::cout << "keylen=" << tte->iKeyLen << " iKeyItemLen = " << tte->iKeyItemLen << " keys per block calc = " << tte->iKeysPerBlock << "\n";
-
tte->cKeyFmt3 = CalcTagKeyFmt( *tte->exp );
-// printf( "ulRootPage=[%d] cKeyFmt2=[%d] cKeyType2=[%d] iKeyLen=[%d]iKeysPerBlock=[%d]\n", tte->ulRootPage, tte->cKeyFmt2, tte->cKeyType2, tte->iKeyLen, tte->iKeysPerBlock );
-// printf( "iSecKeyType=[%d] iKeyItemLen=[%d] cUnique=[%d] \n", tte->iSecKeyType, tte->iKeyItemLen, tte->cUnique );
-
char *pBuf;
if(( pBuf = (char *) calloc( 1, (size_t) GetBlockSize())) == NULL ){
iErrorStop = 230;
@@ -1280,7 +1181,6 @@ xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const
iTagUseCnt++;
cNextTag++;
-
if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
iErrorStop = 270;
throw iRc;
@@ -1350,9 +1250,6 @@ xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const
tteWork = tteWork->next;
}
free( pBuf );
-
-// xbIx::SetCurTag( ( void *) tte );
-
}
catch (xbInt16 iRc ){
@@ -1447,13 +1344,6 @@ xbInt16 xbIxMdx::DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo
throw iRc;
}
- // do any empty node processing here
-// if( bReuseEmptyNodes ){
-// if( bLeaf && lKeyCnt == 1 ){
-// std::cout << "Empty node ready for reuse\n";
-// }
-// }
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -1486,8 +1376,6 @@ xbInt16 xbIxMdx::DeleteKey( void *vpTag ){
npTag->npNodeChain = NULL;
xbIxNode * npSaveCurNode = npTag->npCurNode;
- // std::cout << "xbIxMdx::DeleteKey()\n";
-
try{
xbString sMsg;
@@ -1502,7 +1390,6 @@ xbInt16 xbIxMdx::DeleteKey( void *vpTag ){
// as prev key, ascend tree looking for an interior node needing
// updated key value
-
xbInt32 lOrigKeyCnt = GetKeyCount( npTag->npCurNode );
if(( iRc = DeleteFromNode( npTag, npTag->npCurNode, npTag->npCurNode->iCurKeyNo )) != XB_NO_ERROR ){
iErrorStop = 110;
@@ -1591,7 +1478,7 @@ xbInt16 xbIxMdx::DeleteKey( void *vpTag ){
}
/***********************************************************************/
-//! @brief Dump a given block for a tag
+//! @brief Delete a given tag
/*!
\param vpTag Input tag ptr for tag to be deleted<br>
\returns <a href="xbretcod_8h.html">Return Codes</a><br>
@@ -2100,8 +1987,6 @@ xbInt16 xbIxMdx::DumpHeader( xbInt16 iOpt, xbInt16 iFmtOpt )
if(( iRc = ReadHeadBlock( 1 )) != XB_NO_ERROR )
return iRc;
-// std::cout << "xbIxMdx::DumpHeader options - " << iDestOpt << " fmtopt = " << iFmtOpt << "\n";
-
char c, tfv, cDisplayMask = 1;
cDisplayMask = cDisplayMask << 7;
if( iFmtOpt != 2 && iFmtOpt != 4 ){
@@ -2116,9 +2001,6 @@ xbInt16 xbIxMdx::DumpHeader( xbInt16 iOpt, xbInt16 iFmtOpt )
}
xbase->WriteLogMessage( s, iOpt );
-
-// std::cout << std::endl;
-// std::cout <<
s.Sprintf( "Create Date = %d/%d/%d", (int) cCreateMM, (int) cCreateDD, (int) cCreateYY % 100 );
xbase->WriteLogMessage( s, iOpt );
@@ -2724,9 +2606,6 @@ xbInt16 xbIxMdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw = 0 ){
throw iRc;
}
}
- // else {
- // throw iRc;
- // }
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -2766,23 +2645,16 @@ xbString &xbIxMdx::GetKeyFilter( const void * vpTag ) const{
xbMdxTag * mpTag = (xbMdxTag *) vpTag;
- // std::cout << "GetKeyFilter() ";
if( mpTag->sFiltExp )
return *mpTag->sFiltExp;
-// std::cout << " not null\n";
else
return sNullString;
- // std::cout << " null\n";
-
-// next line causes seg faults
-// return *mpTag->sFiltExp;
}
/**************************************************************************************************/
xbInt16 xbIxMdx::GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *np, xbUInt32 &ulKeyPtr ) const {
xbInt16 iRc = XB_NO_ERROR;
-
xbInt16 iErrorStop = 0;
try{
@@ -3339,15 +3211,9 @@ xbInt16 xbIxMdx::HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iO
try{
-// std::cout << "xbIxMdx::HarvestEmptyNode() page= " << BlockToPage( npNode->ulBlockNo );
-// std::cout << " block = " << npNode->ulBlockNo << "\n";
-
if( mpTag->ulRootPage == BlockToPage( npNode->ulBlockNo ) && !bHarvestRoot ){
bRootPage = xbTrue;
-
-// std::cout << "special root page processing *****************\n";
}
-
memset( npNode->cpBlockData, 0x00, GetBlockSize());
char *pTrg = npNode->cpBlockData;
@@ -3356,7 +3222,6 @@ xbInt16 xbIxMdx::HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iO
ePutUInt32( pTrg, ulFirstFreePage );
}
-
if( bRootPage ){
if( mpTag->cHasKeys ){
@@ -3374,7 +3239,6 @@ xbInt16 xbIxMdx::HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iO
// might need to update left sibling and right sibling here.
// Fields don't seem to be updated consistently by other xbase tools,
// for now, not updating
-
}
} else {
@@ -3393,7 +3257,6 @@ xbInt16 xbIxMdx::HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iO
iErrorStop = 130;
throw iRc;
}
-
}
if( iOpt == 1 ){
@@ -3418,8 +3281,6 @@ xbInt16 xbIxMdx::HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iO
return iRc;
}
-
-
/***********************************************************************/
//! @brief Harvest Tag Nodes.
/*!
@@ -3523,9 +3384,7 @@ xbInt16 xbIxMdx::InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xb
xbInt16 iCopyLen;
xbInt16 iNewKeyPos = 8;
-
try{
-
xbInt32 lKeyCnt = GetKeyCount( npNode );
iNewKeyPos += (iSlotNo * npTag->iKeyItemLen);
char *pSrc = npNode->cpBlockData;
@@ -3642,12 +3501,6 @@ xbInt16 xbIxMdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, ch
try{
xbInt32 lKeyCnt = GetKeyCount( npNode );
-
-// std::cout << "InsertNodeL Keycount = " << lKeyCnt << "\n";
-// next line is correct, this aligns with db7
-// "4" is the four byte record number stored to the left of the key
-// xbInt16 iKeyPos = 4 + iSlotNo * npTag->iKeyItemLen;
-
iNewKeyPos += (iSlotNo * npTag->iKeyItemLen);
// length of number of keys that need to be moved to the right
@@ -3657,24 +3510,18 @@ xbInt16 xbIxMdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, ch
iCopyLen = 0;
// +8 is to include the first two 4 byte fields in the block
- // xbUInt32 ulRqdBufSize = (xbUInt32) (iKeyPos + (npTag->iKeyItemLen * 2) + iCopyLen + 8);
xbUInt32 ulRqdBufSize = (xbUInt32) ((lKeyCnt + 1) * npTag->iKeyItemLen) + 8;
-/*
- std::cout << "InsertNodeL CopyLen = " << iCopyLen << "\n";
- std::cout << "InsertNodeL iNewKeyPos = " << iNewKeyPos << "\n";
- std::cout << "InsertNodeL SlotNo = " << iSlotNo << "\n";
- std::cout << "InsertNodeL lKeyCnt = " << lKeyCnt << "\n";
- std::cout << "InsertNodeL node buf size = " << npNode->ulBufSize << "\n";
- std::cout << "InsertNodeL key item len = " << npTag->iKeyItemLen << "\n";
- std::cout << "InsertNodeL key len = " << npTag->iKeyLen << "\n";
- std::cout << "required buf size = " << ulRqdBufSize << "\n";
- std::cout << "InsertNodeL key buf strlen = " << strlen( npTag->cpKeyBuf ) << "\n";
-*/
-
if( ulRqdBufSize > npNode->ulBufSize ){
+
npNode->ulBufSize += (xbUInt32) npTag->iKeyItemLen;
npNode->cpBlockData = (char *) realloc( npNode->cpBlockData, (size_t) npNode->ulBufSize );
+
+ // init the newly acquired buffer space
+ char *p = npNode->cpBlockData;
+ p += (npNode->ulBufSize - (xbUInt32) npTag->iKeyItemLen);
+ memset( p, 0x00, (size_t) npTag->iKeyItemLen );
+
if( !npNode->cpBlockData ){
iErrorStop = 100;
iRc = XB_NO_MEMORY;
@@ -3688,10 +3535,6 @@ xbInt16 xbIxMdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, ch
pNewKeyPos += iNewKeyPos;
if( iSlotNo < lKeyCnt ) {
- // pKeyPos = npNode->cpBlockData;
- // pKeyPos += iKeyPos;
- // pKeyPos += iNewKeyPos;
- // pTrg = pKeyPos;
pTrg = pNewKeyPos;
pTrg += npTag->iKeyItemLen;
memmove( pTrg, pNewKeyPos, (size_t) iCopyLen );
@@ -3710,14 +3553,11 @@ xbInt16 xbIxMdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, ch
// update number of keys on the node
ePutInt32( npNode->cpBlockData, ++lKeyCnt );
-// std::cout << "lKeyCntA = " << GetKeyCount( npNode ) << "\n";
-
// determine length of node, zap everything to the right of it
xbUInt32 iStartPos = 8 + ((xbUInt32) lKeyCnt * (xbUInt32) npTag->iKeyItemLen );
xbUInt32 iClearLen = npNode->ulBufSize - iStartPos;
-// std::cout << "InsertNodeL SP = " << iStartPos << " clear len = " << iClearLen << " ulBufsize = " << npNode->ulBufSize << "\n";
char *p = npNode->cpBlockData;
p += iStartPos;
memset( p, 0x00, iClearLen );
@@ -3727,10 +3567,6 @@ xbInt16 xbIxMdx::InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, ch
iErrorStop = 100;
throw iRc;
}
-
-// std::cout << "lKeyCntB = " << GetKeyCount( npNode ) << "\n";
-
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -3754,8 +3590,6 @@ inline xbBool xbIxMdx::IsLeaf( void *vpTag, xbIxNode *npNode ) const{
p+=8;
p+= mTag->iKeyItemLen * lNoOfKeys;
- // printf( "IsLeaf p = [%d] b1 = [%x] keylen = [%d]\n", eGetUInt32( p ), *p, mTag->iKeyItemLen );
-
if( eGetUInt32( p ) == 0 ){
// std::cout << "leaf node\n";
return true;
@@ -3773,8 +3607,6 @@ xbInt16 xbIxMdx::KeyExists( void * vpTag )
xbMdxTag *mpTag = (xbMdxTag *) vpTag;
xbInt16 iRc = FindKey( vpTag, mpTag->cpKeyBuf, mpTag->iKeyLen, 0 );
- // iRc == 0 ? return 1 : return 0;
-
if( iRc == 0 )
return 1;
else
@@ -3940,8 +3772,6 @@ xbInt16 xbIxMdx::LoadTagDetail( xbInt16 iOption, xbMdxTag *tte ){
// option 1 - Load the entire tag detail
// option 2 - Load the dynamic variables only
- // std::cout << "LoadTagDetail() iOption = " << iOption << "\n";
-
xbInt16 iRc = XB_NO_ERROR;
xbInt16 iErrorStop = 0;
size_t iReadSize;
@@ -4020,10 +3850,6 @@ xbInt16 xbIxMdx::LoadTagDetail( xbInt16 iOption, xbMdxTag *tte ){
p+=221;
tte->cKeyFmt3 = *p;
-//for( int i = 0; i < 5; i++ )
-// printf( "%d [%x]\n", i, *p++ );
-// p+=2;
-
if( tte->cHasFilter ){
p+=282;
tte->sFiltExp = new xbString();
@@ -4135,7 +3961,6 @@ xbInt16 xbIxMdx::LoadTagTable()
ttel->next = tte;
else
mdxTagTbl = tte;
- // tte->sKeyExp = new xbString();
ttel = tte;
tte->next = NULL;
@@ -4268,13 +4093,9 @@ xbInt16 xbIxMdx::PrintKey( void *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt1
xbInt16 xbIxMdx::ReadHeadBlock( xbInt16 iOpt )
{
-
-
xbInt16 iRc = XB_NO_ERROR;
xbInt16 iErrorStop = 0;
-// std::cout << "ReadHeadBlock() option = " << iOpt << "\n";
-
try{
if( !FileIsOpen()){
iRc = XB_NOT_OPEN;
@@ -4367,8 +4188,6 @@ xbInt16 xbIxMdx::ReadHeadBlock( xbInt16 iOpt )
cUpdateMM = *p++;
cUpdateDD = *p;
}
-
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -4425,7 +4244,7 @@ xbInt16 xbIxMdx::Reindex( void **vpTag ){
iErrorStop = 100;
throw iRc;
}
- bLocked = xbTrue;
+ bLocked = xbTrue;
}
#endif
@@ -4476,13 +4295,6 @@ xbInt16 xbIxMdx::Reindex( void **vpTag ){
// create new file & add the tags
while( p ){
- //std::cout << "Reindex() linked list extract\n";
- //std::cout << "Tag Name = [" << p->sTagName << "]\n";
- //std::cout << "Key Exp = [" << p->sKeyExp->Str() << "]\n";
- //std::cout << "Filt Exp = [" << p->sFiltExp->Str() << "]\n";
- //std::cout << "bDesc = [" << p->bDesc << "]\n";
- //std::cout << "bUnique = [" << p->bUnique << "]\n";
-
if(( iRc = CreateTag( p->sTagName, p->sKeyExp->Str(), p->sFiltExp->Str(), p->bDesc, p->bUnique, xbTrue, vpTag )) != XB_NO_ERROR ){
iErrorStop = 120;
throw iRc;
@@ -4550,6 +4362,7 @@ xbInt16 xbIxMdx::Reindex( void **vpTag ){
sMsg.Sprintf( "xbIxMdx::ReIndex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ this->DeleteTag( mpTag );
}
#ifdef XB_LOCKING_SUPPORT
@@ -4594,39 +4407,6 @@ void xbIxMdx::SetReuseEmptyNodesSw( xbBool bEmptyNodesSw ) {
}
/***********************************************************************/
-//! @brief Set Tag Pointer.
-/*!
- Set binary tree pointer value. The MDX tags are stored with binary
- tree positions. This routine sets the value in memory.
- \param cPtr L - Left child.<br>
- R - Right child.<br>
- P - Parent.
- \param iWhich - Which tag to update
- \param cVal - Value to set.
- \returns void
-*/
-
-/*
-void xbIxMdx::SetTagPtr( char cPtr, xbInt16 iWhich, char cVal ){
-
- xbMdxTag *mpTag = (xbMdxTag *) GetTag( iWhich );
- if( mpTag ){
- switch( cPtr ){
- case 'L':
- mpTag->cLeftChild = cVal;
- break;
- case 'R':
- mpTag->cRightChild = cVal;
- break;
- case 'P':
- mpTag->cParent = cVal;
- break;
- }
- }
-}
-*/
-
-/***********************************************************************/
//! @brief Split an interior node
/*!
@@ -4662,7 +4442,6 @@ xbInt16 xbIxMdx::SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
char *pSrc;
char *pTrg;
-
try{
xbInt32 lKeyCnt = GetKeyCount( npLeft );
xbInt32 lNewLeftKeyCnt = (xbInt32) ((lKeyCnt + 1) * dSplitFactor);
@@ -4816,11 +4595,8 @@ xbInt16 xbIxMdx::TagSerialNo( xbInt16 iOption, xbMdxTag * mpTag ){
xbInt16 iErrorStop = 0;
try{
-
xbInt64 lPos = (mpTag->ulTagHdrPageNo * 512) + 20;
-// std::cout << "UpdateSerialNo offset = " << lPos << " option = " << iOption << "\n";
-
if( iOption != 2 ){
if(( iRc = xbFseek( lPos, SEEK_SET )) != XB_NO_ERROR ){
iErrorStop = 100;
@@ -4845,7 +4621,6 @@ xbInt16 xbIxMdx::TagSerialNo( xbInt16 iOption, xbMdxTag * mpTag ){
throw iRc;
}
}
-
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -4856,7 +4631,6 @@ xbInt16 xbIxMdx::TagSerialNo( xbInt16 iOption, xbMdxTag * mpTag ){
return iRc;
}
-
/***********************************************************************/
//! @brief UpdateTagKey
/*!
@@ -4881,9 +4655,6 @@ xbInt16 xbIxMdx::UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo ){
try{
// save off any needed fields for updating
xbUInt32 ulTagSizeSave = npTag->ulTagSize;
- // std::cout << "old size = " << ulTagSizeSave << " new size = " << npTag->ulTagSize << "\n";
- //std::cout << "UpdateTagKey - tag size was updated need to do something here - test \n";
-
if( cAction == 'D' || cAction == 'R' ){
// std::cout << "UpdateTagKey-delete going to DeleteKey \n";
@@ -4891,7 +4662,6 @@ xbInt16 xbIxMdx::UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo ){
iErrorStop = 100;
throw iRc;
}
- //std::cout << "UpdateTagKey-delete back from DeleteKey \n";
}
if( cAction == 'A' || cAction == 'R' ){
@@ -4941,7 +4711,8 @@ xbInt16 xbIxMdx::WriteHeadBlock( xbInt16 iOption ){
xbInt16 iErrorStop = 0;
try{
- xbDate d; // default is system date, today
+ xbDate d;
+ d.Sysdate(); // set to system date, today
cUpdateYY = (char) d.YearOf() - 1900;
cUpdateMM = (char) d.MonthOf();
cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
diff --git a/src/core/xbixndx.cpp b/src/core/xbixndx.cpp
index 9d946dd..b28dd9d 100755
--- a/src/core/xbixndx.cpp
+++ b/src/core/xbixndx.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -309,8 +309,8 @@ xbInt16 xbIxNdx::CheckForDupKey( void *vpTag )
\param vpTag Tag to create key for.
\param iOpt Output message destination<br>
- 0 = stdout<br>
- 1 = Syslog<br>
+ 0 = Syslog<br>
+ 1 = Stdout<br>
2 = Both<br>
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
@@ -609,7 +609,8 @@ xbInt16 xbIxNdx::CreateTag( const xbString &sName, const xbString &sKey,
npTag->iUnique = iUnique;
npTag->ulRootBlock = 1L;
- npTag->ulTotalBlocks = 2l;
+ //npTag->ulTotalBlocks = 2l;
+ npTag->ulTotalBlocks = 2L;
npTag->sKeyExpression = sKey;
GetFileNamePart( npTag->sTagName );
@@ -2426,62 +2427,75 @@ xbInt16 xbIxNdx::Reindex( void **vpTag ){
xbInt16 iRc = XB_NO_ERROR;
xbInt16 iErrorStop = 0;
- //xbNdxTag * npTag;
- //vpTag ? npTag = (xbNdxTag *) vpTag : npTag = ndxTag;
+ xbNdxTag *npTag = ndxTag;
try{
- xbString sFileName = GetFqFileName();
- xbString sKey; // = GetKeyExpression( vpTag );
- sKey.Set( GetKeyExpression( *vpTag ));
xbInt16 iUnique = GetUnique( *vpTag );
- xbString sFilter = "";
- void *vpTag2;
- if(( iRc = CreateTag( sFileName, sKey, sFilter, 0, iUnique, xbTrue, &vpTag2 )) != XB_NO_ERROR ){
+ npTag->npNodeChain = FreeNodeChain( npTag->npNodeChain );
+ npTag->npCurNode = NULL;
+ npTag->ulRootBlock = 1L;
+ npTag->ulTotalBlocks = 2L;
+
+ if(( iRc = xbTruncate( 1024 )) != XB_NO_ERROR ){
iErrorStop = 100;
throw iRc;
}
+ if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ char buf[512];
+ memset( buf, 0x00, 512 );
+
+ if(( iRc = WriteBlock( 1, 0, buf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
xbUInt32 ulRecCnt = 0;
if(( iRc = dbf->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 130;
throw iRc;
}
for( xbUInt32 l = 1; l <= ulRecCnt; l++ ){
if(( iRc = dbf->GetRecord( l )) != XB_NO_ERROR ){
- iErrorStop = 120;
+ iErrorStop = 140;
throw iRc;
}
- if(( iRc = CreateKey( vpTag2, 1 )) != XB_NO_ERROR ){
- iErrorStop = 130;
+ if(( iRc = CreateKey( npTag, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 150;
throw iRc;
}
if( iUnique ){
- iRc = CheckForDupKey( vpTag2 );
+ // iRc = CheckForDupKey( vpTag2 );
+ iRc = CheckForDupKey( npTag );
if( iRc != 0 ){
if( iRc < 0 ){
- iErrorStop = 140;
+ iErrorStop = 160;
throw iRc;
}
return XB_KEY_NOT_UNIQUE;
}
}
- if(( iRc = AddKey( vpTag2, l )) != XB_NO_ERROR ){
+ if(( iRc = AddKey( npTag, l )) != XB_NO_ERROR ){
iErrorStop = 150;
throw iRc;
}
}
- *vpTag = vpTag2;
+ *vpTag = npTag;
}
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbIxNdx::Reindex() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ this->DeleteTag( NULL ); // Don't leave the index in an incomplete state
}
return iRc;
}
diff --git a/src/core/xbixtdx.cpp b/src/core/xbixtdx.cpp
new file mode 100755
index 0000000..4137725
--- /dev/null
+++ b/src/core/xbixtdx.cpp
@@ -0,0 +1,661 @@
+/* xbixtdx.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This module handles temporary index logic
+
+*/
+
+#include "xbase.h"
+
+
+
+#ifdef XB_TDX_SUPPORT
+
+
+namespace xb{
+
+/************************************************************************/
+xbIxTdx::xbIxTdx( xbDbf *dbf ) : xbIxMdx( dbf ) {
+//xbIxMdx::xbIxMdx( xbDbf *dbf ) : xbIx( dbf ){
+
+// std::cout << "xbIxTdx::Constructor()\n";
+
+ // Init(); not needed, called in xbMdx
+
+
+}
+
+/************************************************************************/
+xbIxTdx::~xbIxTdx() {
+
+// std::cout << "xbIxTdx::Destructor()\n";
+
+}
+
+/***********************************************************************/
+xbInt16 xbIxTdx::Close(){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+
+std::cout << "xbIxTdx::Close\n";
+
+ try{
+ if(( iRc = xbIxMdx::Close()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if(( iRc = xbRemove()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxTdx::Close() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Create new tag.
+/*!
+ This routine creates a new tag. When complete, sets the cur tag pointer to
+ the newly created tag.
+
+
+ \param sName Tag Name, including .MDX suffix
+ \param sKey Key Expression
+ \param sFilter Filter expression.
+ \param iDescending
+ \param iUnique xbtrue - Unique.<br>xbFalse - Not unique.
+ \param iOverLay xbTrue - Overlay if file already exists.<br>xbFalse - Don't overlay.
+ \param vpTag Output from method Pointer to vptag pointer.
+ \returns <a href="xbretcod_8h.html">Return Codes</a>
+*/
+
+
+xbInt16 xbIxTdx::CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag ){
+
+ xbInt16 iRc = XB_NO_ERROR;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag *tte = NULL;
+
+ std::cout << "xbIxTdx::CreateTag()\n";
+
+
+ // std::cout << "CreateTag() name=[" << sName.Str() << "] key=[" << sKey.Str() << "] sFilter=[" << sFilter.Str() << "]\n";
+ // std::cout << "TagUseCnt = " << iTagUseCnt << std::endl;
+
+
+ try{
+ // verify room for new tag
+ if( !( iTagUseCnt < 47 )){
+ iErrorStop = 100;
+ iRc = XB_LIMIT_REACHED;
+ throw iRc;
+ }
+
+ // verify valid tag name
+ xbString sWorker = sName;
+ sWorker.Trim();
+ if( sWorker.Len() > 10 ){
+ iErrorStop = 110;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+
+ // verify tag not already defined
+ if( iTagUseCnt > 0 ){
+ if( GetTag( sWorker )){
+ iErrorStop = 120;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+ }
+
+ // allocate a tag structure here
+ if(( tte = (xbMdxTag *) calloc( 1, (size_t) sizeof( xbMdxTag ))) == NULL ){
+ iErrorStop = 130;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ *vpTag = tte;
+ tte->sTagName = new xbString( sWorker );
+
+ //set up the key expression
+ sWorker = sFilter;
+ sWorker.Trim();
+ if( sWorker.Len() > 0 ){
+ if( sWorker.Len() == 0 || sWorker.Len() > 220 ){
+ iRc = XB_INVALID_TAG;
+ iErrorStop = 140;
+ throw iRc;
+ }
+ tte->sFiltExp = new xbString( sWorker );
+ tte->filter = new xbExp( dbf->GetXbasePtr());
+ if(( iRc = tte->filter->ParseExpression( dbf, sWorker )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ // tte->filter->DumpTree( 1 );
+
+ if((tte->filter->GetReturnType()) != 'L' ){
+ iRc = XB_INVALID_TAG;
+ iErrorStop = 160;
+ throw iRc;
+ }
+ tte->cHasFilter = 0x01;
+ }
+
+ //set up the key expression
+ sWorker = sKey;
+ sWorker.Trim();
+ if( sWorker.Len() == 0 || sWorker.Len() > 100 ){
+ iRc = XB_INVALID_TAG;
+ iErrorStop = 170;
+ throw iRc;
+ }
+ tte->sKeyExp = new xbString( sWorker );
+ tte->exp = new xbExp( dbf->GetXbasePtr());
+ if(( iRc = tte->exp->ParseExpression( dbf, sWorker )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+
+ xbDate d;
+ d.Sysdate();
+ if( iTagUseCnt == 0 ){
+ // first tag, new mdx file
+ // create the file name
+
+ // create temp file
+ xbString sIxFileName;
+ if(( iRc = CreateUniqueFileName( GetTempDirectory(), "TDX", sIxFileName )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ // copy the file name to the class variable
+ this->SetFileName( sIxFileName );
+ if( FileExists() && !iOverlay ){
+ iErrorStop = 200;
+ iRc = XB_FILE_EXISTS;
+ throw iRc;
+ }
+
+ // first tag, need to create the file
+ if(( iRc = xbFopen( "w+b", dbf->GetShareMode())) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ cVersion = 2;
+ cCreateYY = (char) d.YearOf() - 1900;
+ cCreateMM = (char) d.MonthOf();
+ cCreateDD = (char) d.DayOf( XB_FMT_MONTH );
+
+ GetFileNamePart( sFileName );
+ sFileName.ToUpperCase();
+
+ SetBlockSize( (xbUInt32) dbf->GetCreateMdxBlockSize());
+ iBlockFactor = GetBlockSize() / 512;
+
+ cProdIxFlag = 0; // MDX is 1
+ cTagEntryCnt = 48;
+ iTagLen = 32;
+ ulPageCnt = 4;
+ ulFirstFreePage = 0;
+ ulNoOfBlockAvail = 0;
+ cNextTag = 1;
+ c1B = 0x1B;
+ cUpdateYY = cCreateYY;
+ cUpdateMM = cCreateMM;
+ cUpdateDD = cCreateDD;
+
+ if(( iRc = WriteHeadBlock( 0 )) != XB_NO_ERROR ){
+ iErrorStop = 220;
+ throw iRc;
+ }
+ }
+
+ // populate the tag table entry structure
+ tte->ulTagHdrPageNo = ulPageCnt;
+ ulPageCnt += (xbUInt32) iBlockFactor;
+ tte->sTagName->strncpy( tte->cTagName, 10 );
+
+ // cKeyFmt is always 0x10;
+ // tested 2+ZIPCD CITY+STATE or just standalone field - always 0x10
+ tte->cKeyFmt = 0x10; // = CalcTagKeyFmt( *tte->exp );
+
+ switch( tte->exp->GetReturnType()){
+ case XB_EXP_CHAR:
+ tte->cKeyType = 'C';
+ tte->iKeyLen = tte->exp->GetResultLen();
+ tte->iSecKeyType = 0;
+ break;
+
+ case XB_EXP_NUMERIC:
+ tte->cKeyType = 'N';
+ tte->iKeyLen = 12;
+ tte->iSecKeyType = 0;
+ break;
+
+ case XB_EXP_DATE:
+ tte->cKeyType = 'D';
+ tte->iKeyLen = 8;
+ tte->iSecKeyType = 1;
+ break;
+
+ default:
+ iErrorStop = 200;
+ iRc = XB_INVALID_INDEX;
+ throw iRc;
+ }
+
+ tte->cpKeyBuf = (char *) malloc( (size_t) tte->iKeyLen + 1 );
+ tte->cpKeyBuf2 = (char *) malloc( (size_t) tte->iKeyLen + 1 );
+
+// if( 0 ){
+// printf( "ulTagHdrPageNo=[%d] cTagName=[%-11s], cLeftChild=[%d] cRightChild=[%d] cParent=[%d] cKeyType=[%c]\n\n",
+// tte->ulTagHdrPageNo, tte->cTagName, tte->cLeftChild, tte->cRightChild, tte->cParent, tte->cKeyType );
+// }
+
+ // write the new tte entry here
+ char tteBuf[21];
+ memset( tteBuf, 0x00, 21 );
+
+ ePutUInt32( &tteBuf[0], tte->ulTagHdrPageNo );
+ for( xbUInt32 l = 0; l < tte->sTagName->Len() && l < 10; l++ ){
+ tteBuf[l+4] = tte->sTagName->GetCharacter(l+1);
+ }
+ tteBuf[15] = tte->cKeyFmt;
+ tteBuf[19] = 0x02; // appears to always be a 0x02
+ tteBuf[20] = tte->cKeyType;
+
+ if(( iRc = xbFseek( (iTagUseCnt * 32) + 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 230;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( tteBuf, 21, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 240;
+ throw iRc;
+ }
+
+
+ // Begin Tag Header
+ tte->ulRootPage = ulPageCnt;
+ tte->ulTagSize = (xbUInt32) iBlockFactor;
+ ulPageCnt += 2;
+ tte->cKeyFmt2 = 0x10;
+ if( iDescending )
+ tte->cKeyFmt2 += 0x08;
+ if( iUnique ){
+ tte->cKeyFmt2 += 0x40;
+ tte->cUnique = 0x01;
+ }
+
+ tte->cTag11 = 0x1B; // always 0x1b ?
+ tte->cSerialNo = 0x01; // version incremented with each tag update
+ tte->ulLeftChild = tte->ulRootPage;
+ tte->ulRightChild = tte->ulRootPage;
+
+ tte->cTagYY = (char) d.YearOf() - 1900;
+ tte->cTagMM = (char) d.MonthOf();
+ tte->cTagDD = (char) d.DayOf( XB_FMT_MONTH );
+
+ tte->cKeyType2 = tte->cKeyType;
+ tte->iKeyItemLen = tte->iKeyLen + 4;
+ while(( tte->iKeyItemLen % 4 ) != 0 ) tte->iKeyItemLen++;
+
+ tte->iKeysPerBlock = (xbInt16) (GetBlockSize() - 12) / tte->iKeyItemLen;
+
+ //std::cout << "-------------- create tag info\n";
+ //std::cout << "keylen=" << tte->iKeyLen << " iKeyItemLen = " << tte->iKeyItemLen << " keys per block calc = " << tte->iKeysPerBlock << "\n";
+
+ tte->cKeyFmt3 = CalcTagKeyFmt( *tte->exp );
+
+// printf( "ulRootPage=[%d] cKeyFmt2=[%d] cKeyType2=[%d] iKeyLen=[%d]iKeysPerBlock=[%d]\n", tte->ulRootPage, tte->cKeyFmt2, tte->cKeyType2, tte->iKeyLen, tte->iKeysPerBlock );
+// printf( "iSecKeyType=[%d] iKeyItemLen=[%d] cUnique=[%d] \n", tte->iSecKeyType, tte->iKeyItemLen, tte->cUnique );
+
+ char *pBuf;
+ if(( pBuf = (char *) calloc( 1, (size_t) GetBlockSize())) == NULL ){
+ iErrorStop = 230;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ char *wPtr;
+ wPtr = pBuf;
+ ePutUInt32( wPtr, tte->ulRootPage );
+
+ wPtr += 4;
+ ePutUInt32( wPtr, tte->ulTagSize );
+
+ wPtr += 4;
+ *wPtr = tte->cKeyFmt2;
+
+ wPtr++;
+ *wPtr = tte->cKeyType2;
+
+ wPtr += 2;
+ *wPtr = tte->cTag11;
+
+ wPtr += 1;
+ ePutInt16( wPtr, tte->iKeyLen );
+
+ wPtr += 2;
+ ePutInt16( wPtr, tte->iKeysPerBlock );
+
+ wPtr += 2;
+ ePutInt16( wPtr, tte->iSecKeyType );
+
+ wPtr += 2;
+ ePutInt16( wPtr, tte->iKeyItemLen );
+
+ wPtr += 2;
+ *wPtr = tte->cSerialNo;
+
+ wPtr += 3;
+ *wPtr = tte->cUnique;
+
+ wPtr++;
+ for( xbUInt32 l = 0; l < tte->sKeyExp->Len(); l++ )
+ *wPtr++ = tte->sKeyExp->GetCharacter(l+1);
+
+ wPtr = pBuf;
+
+ tte->cHasKeys = 0x00;
+ pBuf[246] = tte->cHasKeys;
+
+ wPtr += 248;
+ ePutUInt32( wPtr, tte->ulLeftChild );
+ wPtr += 4;
+ ePutUInt32( wPtr, tte->ulRightChild );
+
+ pBuf[257] = tte->cTagYY;
+ pBuf[258] = tte->cTagMM;
+ pBuf[259] = tte->cTagDD;
+ pBuf[480] = tte->cKeyFmt3;
+
+ if( sFilter.Len() > 0 ){
+ pBuf[245] = tte->cHasFilter;
+ wPtr = pBuf;
+ wPtr += 762;
+ for( xbUInt32 l = 0; l < sFilter.Len(); l++ )
+ *wPtr++ = sFilter.GetCharacter(l+1);
+ }
+
+ if(( iRc = xbFseek( tte->ulTagHdrPageNo * 512, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 250;
+ throw iRc;
+ }
+
+ if(( iRc = xbFwrite( pBuf, GetBlockSize(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 260;
+ throw iRc;
+ }
+
+ memset( pBuf, 0x00, GetBlockSize() );
+ if(( iRc = xbFwrite( pBuf, GetBlockSize(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 270;
+ throw iRc;
+ }
+
+ iTagUseCnt++;
+ cNextTag++;
+
+
+ if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 280;
+ throw iRc;
+ }
+
+ // add the new entry to the end of the list of tags
+ if( mdxTagTbl == NULL ){
+ mdxTagTbl = tte;
+ } else {
+ xbMdxTag *tteL = mdxTagTbl;
+ while( tteL->next )
+ tteL = tteL->next;
+ tteL->next = tte;
+ }
+
+ /* update the btree pointers */
+ CalcBtreePointers();
+ char bBuf[3];
+ xbMdxTag *tteWork = mdxTagTbl;
+
+ if(( iRc = xbFseek( 560, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 290;
+ throw iRc;
+ }
+ while( tteWork ){
+ bBuf[0] = tteWork->cLeftChild;
+ bBuf[1] = tteWork->cRightChild;
+ bBuf[2] = tteWork->cParent;
+
+ if(( iRc = xbFwrite( bBuf, 3, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc;
+ }
+ if( tteWork->next ){
+ if(( iRc = xbFseek( 29, SEEK_CUR )) != XB_NO_ERROR ){
+ iErrorStop = 310;
+ throw iRc;
+ }
+ }
+ tteWork = tteWork->next;
+ }
+ free( pBuf );
+
+ }
+
+ catch (xbInt16 iRc ){
+ if( tte ){
+ if( tte->cpKeyBuf )
+ free( tte->cpKeyBuf );
+ if( tte->cpKeyBuf2 )
+ free( tte->cpKeyBuf2 );
+ if( tte->exp )
+ delete tte->exp;
+ if( tte->filter )
+ delete tte->filter;
+ if( tte->sKeyExp )
+ delete tte->sKeyExp;
+ if( tte->sFiltExp )
+ delete tte->sFiltExp;
+ if( tte->sTagName )
+ delete tte->sTagName;
+ free( tte );
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxTdx::CreateTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+};
+
+/***********************************************************************/
+//! @brief Delete a given tag
+/*!
+ \param vpTag Input tag ptr for tag to be deleted<br>
+ \returns <a href="xbretcod_8h.html">Return Codes</a><br>
+ 1 = Deleted entire MDX file, only had one tag
+
+*/
+
+xbInt16 xbIxTdx::DeleteTag( void *vpTag ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+ xbIxNode *n = NULL;
+ xbBool bLoneTag = xbFalse;
+
+ try{
+
+ if( !vpTag ){
+ iErrorStop = 100;
+ iRc = XB_INVALID_TAG;
+ throw iRc;
+ }
+
+ // char cSaveHasFilter = mpTag->cHasFilter;
+ // char cSaveKeyFmt3 = mpTag->cKeyFmt3;
+ // xbString sSaveKey = mpTag->sKeyExp->Str();
+
+ if( iTagUseCnt == 1 ){
+ // std::cout << "xbIxTdx::DeleteTag - one tag found, delete the mdx file\n";
+
+ // close the mdx file
+ if(( iRc = xbIxMdx::Close()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+ // delete the file
+ xbRemove();
+
+ // init variables - needed?
+ // Init();
+ // iRc > 0 defines this as the only tag in an MDX file, MDX file deleted.
+ // signals to the calling process to drop the MDX file from the
+ // list of updateable indices.
+ bLoneTag = xbTrue;
+
+ } else {
+
+ // harvest tag nodes
+
+ if(( iRc = HarvestTagNodes( mpTag, xbTrue )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ // remove an entry from tag table
+ // which tag is this?
+ xbInt16 iTagNo = 0;
+ xbMdxTag *mp = mdxTagTbl;
+ xbMdxTag *mpPrev = NULL;
+ while( mp && mp->ulTagHdrPageNo != mpTag->ulTagHdrPageNo ){
+ iTagNo++;
+ mpPrev = mp;
+ mp = mp->next;
+ }
+
+ // remove it from the linked list of tags
+ if( !mpPrev ){
+ mdxTagTbl = mp->next;
+ } else {
+ mpPrev->next = mp->next;
+ }
+ if( mp ){
+ if( mp->cpKeyBuf ) free( mp->cpKeyBuf );
+ if( mp->cpKeyBuf2 ) free( mp->cpKeyBuf2 );
+ if( mp->exp ) delete mp->exp;
+ if( mp->filter ) delete mp->filter;
+ if( mp->sKeyExp ) delete mp->sKeyExp;
+ if( mp->sFiltExp ) delete mp->sFiltExp;
+ if( mp->sTagName ) delete mp->sTagName;
+ free( mp );
+ }
+ xbInt32 iTarg = iTagNo * 32;
+ xbInt32 iSrc = iTarg + 32;
+ xbInt32 iLen = (iTagUseCnt - iTagNo) * 32;
+
+ if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ char Buf[1536]; // 47 tags + 1 in case tag #47 is deleted
+ memset( Buf, 0x00, 1536 );
+ if(( iRc = xbFread( Buf, 1504, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+ char *pTrg = Buf;
+ pTrg += iTarg;
+ char *pSrc = Buf;
+ pSrc += iSrc;
+ for( xbInt32 i = 0; i < iLen; i++ )
+ *pTrg++ = *pSrc++;
+
+ if(( iRc = xbFseek( 544, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ }
+ if(( iRc = xbFwrite( Buf, 1504, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 190;
+ throw iRc;
+ }
+
+ iTagUseCnt--;
+ if(( iRc = WriteHeadBlock( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 200;
+ throw iRc;
+ }
+
+ // update the btree pointers
+ CalcBtreePointers();
+ char bBuf[3];
+ xbMdxTag *tteWork = mdxTagTbl;
+
+ if(( iRc = xbFseek( 560, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ }
+ while( tteWork ){
+ bBuf[0] = tteWork->cLeftChild;
+ bBuf[1] = tteWork->cRightChild;
+ bBuf[2] = tteWork->cParent;
+
+ if(( iRc = xbFwrite( bBuf, 3, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 320;
+ throw iRc;
+ }
+ if( tteWork->next ){
+ if(( iRc = xbFseek( 29, SEEK_CUR )) != XB_NO_ERROR ){
+ iErrorStop = 330;
+ throw iRc;
+ }
+ }
+ tteWork = tteWork->next;
+ }
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbIxTdx::DeleteTag() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( n )
+ free( n );
+ }
+ if( bLoneTag && !iRc )
+ return 1;
+ else
+ return iRc;
+}
+
+/************************************************************************/
+
+
+
+/************************************************************************/
+} /* namespace */
+#endif /* XB_TDX_SUPPORT */ \ No newline at end of file
diff --git a/src/core/xblog.cpp b/src/core/xblog.cpp
index 6031c9e..9443006 100755
--- a/src/core/xblog.cpp
+++ b/src/core/xblog.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -25,11 +25,15 @@ namespace xb{
//! @brief Constructor.
xbLog::xbLog() : xbFile( NULL ){
+
+ // std::cout << "xbLog::xbLog(1) Directory = [" << GetLogDirectory() << "]\n";
+ // std::cout << "xbLog::xbLog(1) Name = [" << GetLogFileName() << "]\n";
+
SetDirectory( GetLogDirectory());
SetFileName ( GetLogFileName());
bLoggingStatus = xbFalse;
- lLogSize = 50000;
+ lLogSize = 100000;
#ifdef XB_LOCKING_SUPPORT
iShareMode = XB_MULTI_USER;
@@ -49,7 +53,7 @@ xbLog::xbLog( const xbString & sLogFileName ) : xbFile( NULL ){
SetFileName( sLogFileName ); // no file path
bLoggingStatus = xbFalse;
- lLogSize = 50000;
+ lLogSize = 100000;
#ifdef XB_LOCKING_SUPPORT
iShareMode = XB_MULTI_USER;
@@ -95,6 +99,8 @@ void xbLog::LogSetLogSize( size_t lSize ){
\returns void
*/
void xbLog::LogSetStatus( xbBool bStatus ){
+ if( bLoggingStatus && !bStatus )
+ LogClose();
bLoggingStatus = bStatus;
}
/******************************************************************************/
@@ -104,6 +110,19 @@ void xbLog::LogSetStatus( xbBool bStatus ){
*/
xbInt16 xbLog::LogOpen(){
xbInt16 rc;
+
+// std::cout << "*****\nxbLog::LogOpen(1) GetLogDirectory = " << GetLogDirectory() << "\n";
+// std::cout << "xbLog::LogOpen(1) GetLogFileName = " << GetLogFileName() << "\n";
+// std::cout << "xbLog::GetFqFileName(1) = " << GetFqFileName() << "\n\n";
+
+ // 4.1.3 added next two lines for dynamic log file name changing
+ SetDirectory( GetLogDirectory());
+ SetFileName ( GetLogFileName());
+
+// std::cout << "*****\nxbLog::LogOpen(2) GetLogDirectory = " << GetLogDirectory() << "\n";
+// std::cout << "xbLog::LogOpen(2) GetLogFileName = " << GetLogFileName() << "\n";
+// std::cout << "xbLog::GetFqFileName(2) = " << GetFqFileName() << "\n\n";
+
if(( rc = xbFopen( "a", iShareMode )) != XB_NO_ERROR )
return rc;
xbFTurnOffFileBuffering();
diff --git a/src/core/xbmemo.cpp b/src/core/xbmemo.cpp
index 2bde853..406a77d 100755
--- a/src/core/xbmemo.cpp
+++ b/src/core/xbmemo.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
diff --git a/src/core/xbmemo3.cpp b/src/core/xbmemo3.cpp
index 60c1d53..767e9d2 100755
--- a/src/core/xbmemo3.cpp
+++ b/src/core/xbmemo3.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -133,15 +133,18 @@ xbInt16 xbMemoDbt3::GetMemoField( xbInt16 iFieldNo, xbString & sMemoData ){
xbBool bDone = xbFalse;
sMemoData = "";
try{
+
if(( rc = dbf->GetULongField( iFieldNo, ulBlockNo )) < XB_NO_ERROR ){
iErrorStop = 100;
throw rc;
}
+
if( ulBlockNo == 0L ){
sMemoData = "";
return XB_NO_ERROR;
}
spp = NULL;
+
while( !bDone ){
if(( rc = ReadBlock( ulBlockNo++, GetBlockSize(), mbb )) != XB_NO_ERROR ){
iErrorStop = 120;
@@ -256,6 +259,7 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
#endif
try{
+
#ifdef XB_LOCKING_SUPPORT
if( dbf->GetAutoLock() && !dbf->GetTableLocked() ){
if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
@@ -275,7 +279,8 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
// create temp file
xbString sTempMemoName;
- if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
+ //if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
+ if(( iRc = CreateUniqueFileName( GetTempDirectory(), "DBT", sTempMemoName )) != XB_NO_ERROR ){
iErrorStop = 120;
throw iRc;
}
@@ -297,7 +302,8 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
xbString sMemoFldData;
for( xbUInt32 ulI = 1; ulI <= ulRecCnt; ulI++ ){
- if(( iRc = dbf->GetRecord( ulI )) != XB_NO_ERROR ){
+
+ if(( iRc = dbf->GetRecord( ulI )) != XB_NO_ERROR ){
iErrorStop = 150;
throw iRc;
}
@@ -310,6 +316,8 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
iErrorStop = 160;
throw iRc;
}
+
+
if( cFldType == 'M' ){
// copy it to work field
if(( iRc = dbf->GetMemoField( lFc, sMemoFldData )) != XB_NO_ERROR ){
@@ -363,11 +371,13 @@ xbInt16 xbMemoDbt3::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
throw iRc;
}
}
+
//close and delete target
if(( iRc = pMemo->xbFclose()) != XB_NO_ERROR ){
iErrorStop = 250;
throw iRc;
}
+
if(( iRc = pMemo->xbRemove()) != XB_NO_ERROR ){
iErrorStop = 260;
throw iRc;
diff --git a/src/core/xbmemo4.cpp b/src/core/xbmemo4.cpp
index d02df99..9770806 100755
--- a/src/core/xbmemo4.cpp
+++ b/src/core/xbmemo4.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -798,7 +798,8 @@ xbInt16 xbMemoDbt4::PackMemo( void (*memoStatusFunc ) ( xbUInt32 ulItemNum, xbUI
// create temp file
xbString sTempMemoName;
- if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
+ //if(( iRc = CreateUniqueFileName( GetDirectory(), "dbt", sTempMemoName )) != XB_NO_ERROR ){
+ if(( iRc = CreateUniqueFileName( GetTempDirectory(), "DBT", sTempMemoName )) != XB_NO_ERROR ){
iErrorStop = 120;
throw iRc;
}
diff --git a/src/core/xbssv.cpp b/src/core/xbssv.cpp
index d3e1070..532f942 100755
--- a/src/core/xbssv.cpp
+++ b/src/core/xbssv.cpp
@@ -21,6 +21,7 @@ const xbErrorMessage xbErrorMessages[] = {
{ XB_NO_ERROR, "No Error" },
{ XB_NO_MEMORY, "No Memory" },
{ XB_INVALID_OPTION, "Invalid Option" },
+ { XB_INVALID_PARAMETER, "Invalid Parameter" },
{ XB_DUP_TABLE_OR_ALIAS, "Duplicate Alias/Table Name" },
{ XB_INVALID_NODELINK, "Invalid Node Link" },
{ XB_KEY_NOT_UNIQUE, "Key Not Unique" },
@@ -77,7 +78,6 @@ const xbErrorMessage xbErrorMessages[] = {
};
// see also xbretcod.h
-
xbInt16 xbSsv::iEndianType = 0;
xbString xbSsv::sDefaultDateFormat = "MM/DD/YY";
@@ -85,17 +85,12 @@ xbInt16 xbSsv::iDefaultFileVersion = 4;
xbString xbSsv::sNullString = "";
xbBool xbSsv::bDefaultAutoCommit = xbTrue;
-
-#ifdef WIN32
-xbString xbSsv::sDataDirectory = PROJECT_DATA_DIR;
-#else
-xbString xbSsv::sDataDirectory = PROJECT_DATA_DIR;
-#endif //
+xbString xbSsv::sDataDirectory = PROJECT_DATA_DIR;
+xbString xbSsv::sTempDirectory = PROJECT_TEMP_DIR;
#ifdef XB_LOGGING_SUPPORT
-xbString xbSsv::sLogDirectory = PROJECT_LOG_DIR;
-//xbString xbSsv::sLogDirectory = "";
-xbString xbSsv::sLogFileName = PROJECT_DFLT_LOGFILE;
+xbString xbSsv::sLogDirectory = PROJECT_LOG_DIR;
+xbString xbSsv::sLogFileName = PROJECT_DFLT_LOGFILE;
#endif // XB_LOGGING_SUPPORT
#ifdef XB_LOCKING_SUPPORT
@@ -223,25 +218,51 @@ const char * xbSsv::GetErrorMessage( xbInt16 iErrorCode ) const{
//! @brief Get home directory.
/*!
\param sHomeDirOut - Output home directory for current user.
- \returns void
*/
void xbSsv::GetHomeDir( xbString &sHomeDirOut ){
- #ifdef WIN32
+ #ifdef HAVE_GETENV_S_F
+
+ char sPath[MAX_PATH];
+ size_t lSize;
+
+ sHomeDirOut = "";
+ memset( sPath, 0x00, MAX_PATH );
+
+ getenv_s( &lSize, NULL, 0, "HOMEDRIVE" );
+ if( lSize > 0 ){
+ getenv_s( &lSize, sPath, lSize, "HOMEDRIVE" );
+ sHomeDirOut = sPath;
+ memset( sPath, 0x00, MAX_PATH );
+ }
+
+ getenv_s( &lSize, NULL, 0, "HOMEPATH" );
+ if( lSize > 0 ){
+ getenv_s( &lSize, sPath, lSize, "HOMEPATH" );
+ sHomeDirOut += sPath;
+ }
+ if( sHomeDirOut == "" )
+ sHomeDirOut = "C:\xbase64";
+
+ #elif defined(WIN32)
sHomeDirOut.Sprintf( "%s%s", getenv( "HOMEDRIVE" ), getenv( "HOMEPATH" ));
+
#else
sHomeDirOut.Sprintf( "%s", getenv( "HOME" ));
sHomeDirOut.Trim();
if( sHomeDirOut == "" )
sHomeDirOut.Sprintf( "%s", getpwuid( getuid())->pw_dir );
#endif
+
sHomeDirOut.Trim();
}
+
+
/*************************************************************************/
//! @brief Set the data directory.
/*!
- \param sDataDirectory Set the data direcroty.
+ \param sDataDirectory Set the data directory.
*/
void xbSsv::SetDataDirectory( const xbString &sDataDirectory ){
@@ -302,12 +323,55 @@ void xbSsv::SetEndianType() {
}
/*************************************************************************/
+//! @brief Set the temp directory.
+/*!
+ \param sTempDirectory Set the data direcroty.
+*/
+
+void xbSsv::SetTempDirectory( const xbString &sTempDirectory ){
+ this->sTempDirectory = sTempDirectory;
+
+ #ifdef WIN32
+ this->sTempDirectory.SwapChars( '/', '\\' );
+ #else
+ this->sTempDirectory.SwapChars( '\\', '/' );
+ #endif
+
+}
+
+/*************************************************************************/
+//! @brief Get the OS dependent path separator.
+/*!
+ \returns Returns '\' for windows environment, otherwise returns '/'.
+*/
+
+char xbSsv::GetPathSeparator() const {
+ #ifdef WIN32
+ return '\\';
+ #else
+ return '/';
+ #endif
+}
+
+/*************************************************************************/
+//! @brief Get the current temp directory.
+/*!
+ \returns xbString containing the current data directory
+ where the database files are stored.
+*/
+
+xbString &xbSsv::GetTempDirectory() const {
+ return sTempDirectory;
+}
+
+/*************************************************************************/
#ifdef XB_LOGGING_SUPPORT
//! @brief Get the default log file name.
/*!
\returns Returns the log file name.
*/
+
xbString & xbSsv::GetLogFileName() const {
return sLogFileName;
}
@@ -317,17 +381,18 @@ xbString & xbSsv::GetLogFileName() const {
/*!
\returns Returns the log directory.
*/
+
+
xbString & xbSsv::GetLogDirectory() const {
return sLogDirectory;
}
-
-
/*************************************************************************/
//! @brief Set the default log directory name.
/*!
\param sLogDirectory Name of desired log directory.
*/
+
void xbSsv::SetLogDirectory( const xbString &sLogDirectoryIn ){
this->sLogDirectory = sLogDirectoryIn;
@@ -339,13 +404,29 @@ void xbSsv::SetLogDirectory( const xbString &sLogDirectoryIn ){
}
+//! @brief Set the log file name.
+/*!
+ \param sLogFileName - Log File Name.
+ \return void
+*/
+
+void xbSsv::SetLogFileName( const xbString & sLogFileName ){
+
+ this->sLogFileName = sLogFileName;
+}
+
+
#else
xbString & xbSsv::GetLogFileName() const {
return sNullString;
}
+
xbString & xbSsv::GetLogDirectory() const {
+
+std::cout << "xbSsv::GetLogDirectory() returning null\n";
+
return sNullString;
}
@@ -353,6 +434,10 @@ void xbSsv::SetLogDirectory( const xbString &sLogDirectory ){
return;
}
+void xbSsv::SetLogFileName( const xbString & sLogFileName ){
+ return;
+}
+
#endif
/*************************************************************************/
diff --git a/src/core/xbstring.cpp b/src/core/xbstring.cpp
index 701e50e..89cefb6 100755
--- a/src/core/xbstring.cpp
+++ b/src/core/xbstring.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -175,7 +175,7 @@ xbString &xbString::operator+=( const xbString &s ) {
*t++ = s.GetCharacter(i+1);
data[newLen] = '\0';
- size += Len;
+ size == 0 ? size += (Len + 1) : size += Len;
return (*this);
}
@@ -197,7 +197,8 @@ xbString &xbString::operator+=( const char *s ) {
for( xbUInt32 i = 0; i < Len; i++ )
data[i+oldLen] = s[i];
data[newLen] = '\0';
- size += Len;
+ // size += Len;
+ size == 0 ? size+= (Len + 1) : size += Len;
return (*this);
}
/************************************************************************/
@@ -211,7 +212,8 @@ xbString &xbString::operator+=( char c ) {
data = (char *)realloc(data, oldLen+Len+1);
data[oldLen] = c;
data[oldLen+1] = 0;
- size++;
+ // size++;
+ size == 0 ? size += 2 : size++;
return (*this);
}
/************************************************************************/
@@ -237,7 +239,8 @@ xbString &xbString::operator-=( const xbString &s ) {
data[i+oldLen] = s.GetCharacter(i+1);
data[newLen] = '\0';
- size += Len;
+ //size += Len;
+ size == 0 ? size += (Len+1) : size += Len;
Rtrim();
return (*this);
}
@@ -265,7 +268,9 @@ xbString &xbString::operator-=(const char *s) {
data[i+oldLen] = s[i];
data[newLen] = '\0';
- size += Len;
+ //size += Len;
+ size == 0 ? size += (Len+1) : size += Len;
+
Rtrim();
return (*this);
}
@@ -278,7 +283,10 @@ xbString &xbString::operator-=(const char *s) {
xbString &xbString::operator-=(const char c) {
Rtrim();
xbUInt32 oldSize = size;
- size += 1;
+
+ // size += 1;
+ size == 0 ? size += 2 : size += 1;
+
data = (char *)realloc( data, size );
if( oldSize == 0 ) data[0] = 0;
data[size-2] = c;
@@ -534,7 +542,10 @@ xbString &xbString::AddBackSlash( char c ) {
if( data )
free( data );
data = p;
- size += lCnt;
+
+ // size += lCnt;
+ size == 0 ? size += (lCnt+1) : size += lCnt;
+
return *this;
}
/************************************************************************/
@@ -571,26 +582,37 @@ xbString &xbString::Append( char c ) {
/************************************************************************/
//! @brief Append data to string.
/*!
- \param s String data to append.
+ \param s String data to append.
\param ulByteCount Maximum number of bytes to append.
\returns Reference to this string.
*/
xbString &xbString::Append( const char *s, xbUInt32 ulByteCount ) {
- if (s == NULL) return (*this);
- xbUInt32 oldLen = this->Len();
- xbUInt32 newLen = ulByteCount + oldLen;
+ if ( s == NULL || !*s || ulByteCount == 0)
+ return (*this);
- data = (char *)realloc(data, newLen+1);
+ xbUInt32 ulOrigLen = this->Len();
- if(oldLen == 0)
- data[0] = 0;
+ // s might not be null byte at the end, can't use strlen
+ // xbUInt32 ulAddLen = strlen( s );
+ xbUInt32 ulAddLen = 0;
+ const char *p = s;
- for( xbUInt32 i = 0; i < ulByteCount; i++ )
- data[i+oldLen] = s[i];
+ while( ulAddLen < ulByteCount && *p ){
+ p++;
+ ulAddLen++;
+ }
- data[newLen] = '\0';
- size += ulByteCount;
+ if( ulAddLen > ulByteCount )
+ ulAddLen = ulByteCount;
+
+ size = ulOrigLen + ulAddLen + 1;
+ data = (char *) realloc( data, size );
+
+ for( xbUInt32 i = 0; i < ulAddLen; i++ )
+ data[i+ulOrigLen] = s[i];
+
+ data[size-1] = 0x00;
return (*this);
}
@@ -616,7 +638,10 @@ xbString &xbString::Assign(const char * sStr, xbUInt32 ulStartPos, xbUInt32 ulCo
if((( ulCopyLen - 1) + ulStartPos ) > lLen )
ulCopyLen = lLen - ulStartPos + 1;
data = (char *)calloc(1, ulCopyLen + 1);
- size = ulCopyLen;
+
+ //size = ulCopyLen + 1;
+ size == 0 ? size += (ulCopyLen+1) : size += ulCopyLen;
+
for( xbUInt32 i = 0; i < ulCopyLen; i++ )
data[i] = sStr[i + ulStartPos - ((xbUInt32) 1)];
data[ulCopyLen] = '\0';
@@ -643,7 +668,9 @@ xbString &xbString::Assign(const char * sStr, xbUInt32 ulStartPos){
xbUInt32 ulCopyLen;
ulCopyLen = ulSrcLen - ulStartPos + 1;
data = (char *)calloc(1, ulCopyLen + 1);
- size = ulCopyLen;
+
+ size = ulCopyLen + 1;
+
for( xbUInt32 i = 0; i < ulCopyLen; i++ )
data[i] = sStr[i + ulStartPos - ((xbUInt32) 1)];
data[ulCopyLen] = '\0';
@@ -672,7 +699,7 @@ xbString &xbString::Assign(const xbString& sStr, xbUInt32 ulStartPos, xbUInt32 u
if((( ulCopyLen - 1) + ulStartPos ) > ulSrcLen )
ulCopyLen = ulSrcLen - ulStartPos + 1;
data = (char *)calloc(1, ulCopyLen + 1);
- size = ulCopyLen;
+ size = ulCopyLen + 1;
for( xbUInt32 i = 0; i < ulCopyLen; i++ )
data[i] = sStr[i + ulStartPos];
data[ulCopyLen] = '\0';
@@ -703,6 +730,7 @@ xbString &xbString::Assign(const xbString& sStr, xbUInt32 ulStartPos){
for( xbUInt32 i = 0; i < ulCopyLen; i++ )
data[i] = sStr[i + ulStartPos];
data[ulCopyLen] = '\0';
+ size++;
return (*this);
}
/************************************************************************/
@@ -895,6 +923,21 @@ void xbString::DumpHex( const char * title ) const {
/************************************************************************/
//! @brief Extract an element out of a delimited string.
/*!
+ \param sSrc Source string.
+ \param cDelim Delimiter.
+ \param lSkipCnt Number of delimiters to skip.
+ \param iOpt 0 - ignore single and double quotes.<br>
+ 1 - ignore delimiters between single or double quotes.
+ \returns Reference to string extracted from element.
+*/
+xbString &xbString::ExtractElement( xbString &sSrc, char cDelim, xbUInt32 lSkipCnt, xbInt16 iOpt )
+{
+ return ExtractElement( sSrc.Str(), cDelim, lSkipCnt, iOpt );
+}
+
+/************************************************************************/
+//! @brief Extract an element out of a delimited string.
+/*!
\param pSrc Source string.
\param cDelim Delimiter.
\param lSkipCnt Number of delimiters to skip.
@@ -1043,6 +1086,8 @@ xbUInt32 xbString::GetLastPos(const char* s) const{
/************************************************************************/
//! @brief Get the path separator out of the string.
/*!
+ This method assumes the string is a valid path name.
+ If it is, it returns either / or \.
\returns Char value containing either / or \ depending on OS.
*/
char xbString::GetPathSeparator() const {
@@ -1147,12 +1192,15 @@ xbString &xbString::Ltrim(){
s++;
size--;
}
+
xbUInt32 i;
for( i = 0; i < size; i++ )
data[i] = data[i+s];
data[i] = 0x00;
data = (char *) realloc( data, size );
+
return *this;
+
}
/************************************************************************/
@@ -1162,10 +1210,6 @@ xbString &xbString::Ltrim(){
\returns Reference to this string.
*/
xbString &xbString::Ltrunc( xbUInt32 ulCnt ){
- // left truncate cnt bytes
-
- char * ndata;
- char * p;
if( ulCnt >= size ){
if( size > 0 ){
free( data );
@@ -1174,6 +1218,9 @@ xbString &xbString::Ltrunc( xbUInt32 ulCnt ){
}
return *this;
}
+
+ char * ndata;
+ char * p;
ndata = (char *) calloc( 1, size - ulCnt );
p = data;
p += ulCnt;
@@ -1203,12 +1250,27 @@ xbString &xbString::Mid( xbUInt32 ulStartPos, xbUInt32 ulTargLen ){
return( *this );
if( ulStartPos > Len() )
return( *this );
+/*
+ // Resize( ulTargLen + 1 );
char *pTarg = data;
char *pSrc = data + ulStartPos - 1;
for( xbUInt32 l = 0; l < ulTargLen; l++ )
*pTarg++ = *pSrc++;
*pTarg = 0x00;
- Resize( ulTargLen + 1 );
+ // Resize( ulTargLen + 1 );
+ */
+
+ char * newData = (char *) calloc( 1, ulTargLen + 1 );
+ char *pTarg = newData;
+ char *pSrc = data + ulStartPos - 1;
+ for( xbUInt32 l = 0; l < ulTargLen; l++ )
+ *pTarg++ = *pSrc++;
+ *pTarg = 0x00;
+
+ free( data );
+ data = newData;
+ size = ulTargLen + 1;
+
return *this;
}
@@ -1300,8 +1362,6 @@ xbUInt32 xbString::Pos(char c, xbUInt32 ulStartPos ) const {
return 0;
}
-
-
/************************************************************************/
//! @brief Determine position of a given character
/*!
@@ -1323,7 +1383,6 @@ xbUInt32 xbString::Pos(char c) const {
p++;
}
}
-
if( iFound )
return iPos + 1;
else
@@ -1396,10 +1455,6 @@ xbString &xbString::Remove(xbUInt32 ulStartPos, xbUInt32 ulDelSize ) {
return( *this );
}
-
-
-
-
/************************************************************************/
//! @brief Replace a value within a string with another value
/*!
@@ -1457,6 +1512,7 @@ xbString &xbString::Replace( const char *sReplace, const char *sReplaceWith, xbI
free(data);
data = sBuf2;
+ size = ulNewLen;
}
}
return *this;
@@ -1471,12 +1527,11 @@ xbString &xbString::Replace( const char *sReplace, const char *sReplaceWith, xbI
//the new size includes the null termination byte
xbString &xbString::Resize(xbUInt32 ulSize) {
-// data = (char *) realloc((void *) data, ulSize );
+// data = (char *) realloc( data, ulSize );
// original
- data = (char *)realloc(data, ulSize);
-
+ data = (char *) realloc( data, ulSize );
if( ulSize > 0 )
data[ulSize-1] = 0;
@@ -1495,6 +1550,8 @@ xbString &xbString::Rtrim(){
xbUInt32 l = Len();
if( l == 0 )
return *this;
+
+ xbUInt32 ulOrigSize = size;
l--;
for(;;) {
@@ -1506,6 +1563,9 @@ xbString &xbString::Rtrim(){
break;
l--;
}
+
+ if( ulOrigSize != size )
+ data = (char * ) realloc( data, size );
return *this;
}
@@ -1525,7 +1585,7 @@ xbString &xbString::Set( const char *s ) {
free(data);
data = NULL;
}
- if(s == NULL ) {
+ if( s == NULL || !*s ) {
if( data )
free( data );
data = NULL;
@@ -1546,14 +1606,17 @@ xbString &xbString::Set( const char *s ) {
*/
xbString &xbString::Set( const xbString &s ) {
+// if( s.Str() == NULL || s.Len() == 0 ){
+
if( s.Str() == NULL ){
if( data ) free( data );
data = NULL;
size = 0;
} else {
- char *p = (char *) calloc( 1, s.Len() + 1 );
+ xbUInt32 ulLen = s.Len();
+ char *p = (char *) calloc( 1, ulLen + 1 );
xb_strcpy( p, s.Str());
- size = s.Len() + 1;
+ size = ulLen + 1;
if( data ) free( data );
data = p;
}
@@ -1619,12 +1682,8 @@ xbString &xbString::Sprintf( const char *sFormat, ...) {
xbInt32 iRc;
va_list ap;
-
char *t;
-// if( data )
-// free( data );
-
#ifdef HAVE__VSNPRINTF_S_F
va_start( ap, sFormat );
@@ -1646,7 +1705,7 @@ xbString &xbString::Sprintf( const char *sFormat, ...) {
va_start( ap, sFormat );
// size = (xbUInt32) vsprintf_s( NULL, 0, sFormat, ap ) + 1;
- size = _vscprintf( sFormat, ap ) + 1;
+ size = (xbUInt32) _vscprintf( sFormat, ap ) + 1;
va_end( ap );
t = (char *) malloc( size );
@@ -1772,7 +1831,6 @@ xbString &xbString::Trim(){
return *this;
}
-
/************************************************************************/
//! @brief Private function used for reallocateing memory
/*!
@@ -1816,11 +1874,8 @@ char * xbString::xb_realloc( char * pIn, xbUInt32 iLen ){
char * xbString::xb_strcpy( char *sTarget, const char *sSource ){
char *temp = sTarget;
- while( *sSource != '\0'){
+ while( *sSource != '\0')
*sTarget++ = *sSource++;
-// sTarget++;
-// sSource++;
- }
*sTarget= '\0';
return temp;
}
@@ -1890,7 +1945,8 @@ xbString &xbString::ZapChar( char c ){
}
}
*t = 0x00;
- Resize( size );
+
+ data = (char *) realloc( data, size );
return *this;
}
@@ -1914,7 +1970,6 @@ xbString &xbString::ZapLeadingChar( char c ){
return *this;
}
-
/************************************************************************/
//! @brief Remove trailing character from a string.
/*!
@@ -1926,7 +1981,7 @@ xbString &xbString::ZapTrailingChar( char c ){
xbUInt32 l = Len();
if( l == 0 )
return *this;
-
+ xbUInt32 ulOrigSize = size;
l--;
for(;;) {
if( data[l] != c )
@@ -1937,6 +1992,8 @@ xbString &xbString::ZapTrailingChar( char c ){
break;
l--;
}
+ if( ulOrigSize != size )
+ data = (char *) realloc( data, size );
return *this;
}
diff --git a/src/core/xbtag.cpp b/src/core/xbtag.cpp
index a71880b..621d44b 100755
--- a/src/core/xbtag.cpp
+++ b/src/core/xbtag.cpp
@@ -3,7 +3,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
diff --git a/src/core/xbtblmgr.cpp b/src/core/xbtblmgr.cpp
index 2fe6a8c..53b6dd9 100755
--- a/src/core/xbtblmgr.cpp
+++ b/src/core/xbtblmgr.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -124,6 +124,7 @@ xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sFqTblName, const
if( t && (strcmp( t->psTblAlias->Str(), sAlias.Str()) == 0 )){
iErrorStop = 120;
delete i->psFqTblName;
+ delete i->psTblName;
delete i->psTblAlias;
free( i );
iRc = XB_DUP_TABLE_OR_ALIAS;
@@ -194,7 +195,7 @@ xbDbf *xbTblMgr::GetDbfPtr(const xbString& sTblAlias) const {
t = TblList;
while( t ){
- std::cout << "s = [" << s.Str() << "] tbl name = [" << t->psTblName->Str() << "]\n";
+ // std::cout << "s = [" << s.Str() << "] tbl name = [" << t->psTblName->Str() << "]\n";
if( s == t->psTblName->Str()){
std::cout << "found\n";
return t->pDbf;
diff --git a/src/core/xbuda.cpp b/src/core/xbuda.cpp
index 0a9c2e7..5db7aec 100755
--- a/src/core/xbuda.cpp
+++ b/src/core/xbuda.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
diff --git a/src/core/xbxbase.cpp b/src/core/xbxbase.cpp
index 20b7fcc..7267f98 100755
--- a/src/core/xbxbase.cpp
+++ b/src/core/xbxbase.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -21,13 +21,13 @@ namespace xb{
//! @brief Class Constructor.
xbXBase::xbXBase() {
SetEndianType();
- #ifdef XB_LOGGING_SUPPORT
- xLog = new xbLog();
- #endif
xbFile f( this );
f.SetHomeFolders();
-
+ xbDate d( (xbUInt16) 1); // initialize xbDate static variables
+ #ifdef XB_LOGGING_SUPPORT
+ xLog = new xbLog();
+ #endif
}
/*************************************************************************/
//! @brief Class Deconstructor.
@@ -37,11 +37,10 @@ xbXBase::~xbXBase(){
delete xLog;
#endif
}
-
/*************************************************************************/
//! @brief Close all tables / files.
/*!
- This closes everything.
+ This closes everything and deletes references to the associated xbDbf objects.
\returns <a href="xbretcod_8h.html">Return Codes</a>
*/
xbInt16 xbXBase::CloseAllTables(){
@@ -58,6 +57,7 @@ xbInt16 xbXBase::CloseAllTables(){
iErrorStop = 100;
throw iRc;
}
+ delete d;
} else {
iRc = XB_INVALID_OBJECT;
iErrorStop = 110;
@@ -74,7 +74,39 @@ xbInt16 xbXBase::CloseAllTables(){
return iRc;
}
+/************************************************************************/
+//! @brief Fully qualified file name from a directory, filename and extension.
+/*!
+ Given a directory, file name and file extension as inputs, create a fully qualified file name.
+ \param sDirIn Directory
+ \param sFileIn File Name
+ \param sExtIn File Extension
+ \param sFqnOut A fully qualifed unique file name as output
+ \returns XB_INVALIED_PARAMETER or XB_NO_ERROR
+*/
+xbInt16 xbXBase::CreateFqn( const xbString &sDirIn, const xbString &sNameIn, const xbString &sExtIn, xbString &sFqnOut ){
+
+ if( sNameIn == "" || sExtIn == "" )
+ return XB_INVALID_PARAMETER;
+
+ sFqnOut = sDirIn;
+ #ifdef WIN32
+ sFqnOut.SwapChars( '/', '\\' );
+ if( sFqnOut[sFqnOut.Len()] != '\\' )
+ sFqnOut += '\\';
+ #else
+ sFqnOut.SwapChars( '\\', '/' );
+ if( sFqnOut[sFqnOut.Len()] != '/' )
+ sFqnOut += '/';
+ #endif
+ sFqnOut += sNameIn;
+ if( sExtIn != "" ){
+ sFqnOut += '.';
+ sFqnOut += sExtIn;
+ }
+ return XB_NO_ERROR;
+}
/*************************************************************************/
//! @brief Parse commmand line options for a given parm request
@@ -134,18 +166,21 @@ const xbString & xbXBase::GetLogFqFileName() const {
/*!
\returns Returns the log file name.
*/
+/*
const xbString & xbXBase::GetLogFileName() const {
return xLog->GetFileName();
}
+*/
//! @brief Get the log directory.
/*!
\returns Returns the log directory.
*/
+/*
const xbString & xbXBase::GetLogDirectory() const {
- return xLog->GetDirectory();
+ return GetLogDirectory();
}
-
+*/
//! @brief Get the log directory.
/*!
\returns xbTrue - Logging enabled.<br>xbFalse - Logging disables.
@@ -159,19 +194,23 @@ xbBool xbXBase::GetLogStatus() const {
\param sLogFileName - Log File Name.
\return void
*/
+/*
void xbXBase::SetLogFileName( const xbString & sLogFileName ){
xLog->SetFileName( sLogFileName );
}
-
+*/
//! @brief Set the log directory.
/*!
\param sLogDirectory - Log File Directory.
\return void
*/
+/*
void xbXBase::SetLogDirectory( const xbString & sLogDirectory ){
xLog->SetDirectory( sLogDirectory );
}
+*/
+
//! @brief Set the logfile size.
/*!
@@ -182,6 +221,15 @@ void xbXBase::SetLogSize( size_t lSize ) {
xLog->LogSetLogSize( lSize );
}
+//! @brief Get the logfile size.
+/*!
+ \return log file size
+*/
+size_t xbXBase::GetLogSize() const {
+ return xLog->LogGetLogSize();
+}
+
+
//! @brief Write message to logfile.
/*!
\param sLogMessage - Message to write.
@@ -225,18 +273,22 @@ xbInt16 xbXBase::FlushLog() {
const xbString & xbXBase::GetLogFqFileName() const {
return sNullString;
}
+/*
const xbString & xbXBase::GetLogFileName() const {
return sNullString;
}
const xbString & xbXBase::GetLogDirectory() const {
return sNullString;
}
+*/
+/*
void xbXBase::SetLogFileName( const xbString & sLogFileName ){
return;
}
void xbXBase::SetLogDirectory( const xbString & sLogDirectory ){
return;
}
+*/
xbBool xbXBase::GetLogStatus() const {
return xbFalse;
}
@@ -258,6 +310,7 @@ xbInt16 xbXBase::FlushLog() {
void xbXBase::SetLogSize( size_t lSize ) {
return;
}
+
#endif // XB_LOGGING_SUPPORT
/*************************************************************************/
@@ -554,8 +607,8 @@ xbInt16 xbXBase::GetFunctionInfo( const xbString &sExpLine, char &cReturnType, x
\param lMillisecs Milliseconds to sleep.
*/
void xbXBase::xbSleep( xbInt32 lMillisecs ){
- #ifdef WIN32
- Sleep( lMillisecs );
+ #ifdef WIN32
+ Sleep( (xbUInt32) lMillisecs );
#else
usleep( (xbInt64) lMillisecs * 1000 );
#endif
@@ -703,6 +756,7 @@ xbInt16 xbXBase::OpenHighestVersion( const xbString &sTableName, const xbString
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
+
unsigned char cFileTypeByte;
if(( iRc = f.GetXbaseFileTypeByte( f.GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
iErrorStop = 120;
diff --git a/src/examples/xb_ex_date.cpp b/src/examples/xb_ex_date.cpp
index fc038b5..7b92dbe 100755
--- a/src/examples/xb_ex_date.cpp
+++ b/src/examples/xb_ex_date.cpp
@@ -24,6 +24,8 @@ using namespace xb;
int main()
{
+ xbXBase x; /* initial date static variables */
+
xbString StringDate( "19601007" ); /* oct 7 1960 */
char CharDate[9] = "19611109"; /* nov 9 1961 */
diff --git a/src/examples/xb_ex_expression.cpp b/src/examples/xb_ex_expression.cpp
index 840e9c6..f16c79f 100755
--- a/src/examples/xb_ex_expression.cpp
+++ b/src/examples/xb_ex_expression.cpp
@@ -168,7 +168,6 @@ int main(){
}
PrintResult( &sExpression, &exp );
-
// String expression example
sExpression = "CFLD1+CFLD2+'{'+DTOS(DATE1)+'}'";
xbExp exp2( &x );
@@ -176,11 +175,13 @@ int main(){
iErrorStop = 210;
throw iRc;
}
+
// Process the parsed expression
if(( iRc = exp2.ProcessExpression()) != XB_NO_ERROR ){
iErrorStop = 220;
return -1;
}
+
PrintResult( &sExpression, &exp2 );
// Date example
@@ -211,8 +212,6 @@ int main(){
}
PrintResult( &sExpression, &exp4 );
-
-
// Cleanup
MyFile->DeleteTable();
delete MyFile;
diff --git a/src/examples/xb_ex_log.cpp b/src/examples/xb_ex_log.cpp
new file mode 100755
index 0000000..cf5320f
--- /dev/null
+++ b/src/examples/xb_ex_log.cpp
@@ -0,0 +1,77 @@
+/* xb_ex_log.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program demostrates how to use logging
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main( int argCnt, char **av )
+{
+
+ #ifdef XB_LOGGING_SUPPORT
+
+ xbXBase x;
+ xbString sMsg;
+
+
+ std::cout << "Default Logfile Name is: [" << x.GetLogFqFileName().Str()
+ << "] Rollover size = [" << x.GetLogSize()
+ << "]" << std::endl;
+
+ if( x.GetLogStatus() )
+ std::cout << "Logging is active" << std::endl;
+ else
+ std::cout << "Logging is inactive" << std::endl;
+
+ x.SetLogDirectory( PROJECT_LOG_DIR ); // use the library log directory
+ x.SetLogFileName ( "MySpecialLogFile.txt" ); // set to use a special name
+ x.SetLogSize ( x.GetLogSize() * 2 ); // double the log file size
+
+ // enable the logfile and write a message for the new settings to take effect
+ x.EnableMsgLogging();
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+
+ std::cout << "New Logfile Name is: [" << x.GetLogFqFileName().Str()
+ << "] Rollover size = [" << x.GetLogSize()
+ << "]" << std::endl;
+
+ if( x.GetLogStatus() )
+ std::cout << "Logging is active" << std::endl;
+ else
+ std::cout << "Logging is inactive" << std::endl;
+
+ // write some messages to the logfile
+ for( int i = 0; i < 5; i++ ){
+ sMsg.Sprintf( "Test message [%d]", i );
+ x.WriteLogMessage( sMsg );
+ }
+
+ sMsg.Sprintf( "Program [%s] terminating..", av[0] );
+ x.WriteLogMessage( sMsg );
+
+ x.FlushLog(); // not really needed, but here for demonstration purposes
+
+ #endif // B_LOGGING_SUPPORT
+
+ return 0;
+}
+
+
+
+
diff --git a/src/examples/xb_ex_ssv.cpp b/src/examples/xb_ex_ssv.cpp
index a78345f..61d72a2 100755
--- a/src/examples/xb_ex_ssv.cpp
+++ b/src/examples/xb_ex_ssv.cpp
@@ -19,7 +19,9 @@ This program demonstrates using functionality of the xbSsv class (Shared system
using namespace xb;
-int main( int ac, char ** av ){
+//int main( int ac, char ** av ){
+
+int main( int, char ** av ){
xbXBase x; // set up xbase for business
xbString sMsg; // a message string
diff --git a/src/examples/xb_ex_string.cpp b/src/examples/xb_ex_string.cpp
index 30fd74e..0cd7671 100755
--- a/src/examples/xb_ex_string.cpp
+++ b/src/examples/xb_ex_string.cpp
@@ -116,8 +116,9 @@ int main()
std::cout << s3.Str() << std::endl;
- s3 = 'A' + s1;
-
+ // The following compiles and runs, but is not valid
+ // s3 = 'A' + s1;
+
std::cout << std::endl << "== operator tests" << std::endl;
if( s1 == s2 )
std::cout << s1.Str() << " == " << s2.Str() << std::endl;
diff --git a/src/examples/xb_ex_v3_create_dbf.cpp b/src/examples/xb_ex_v3_create_dbf.cpp
index ecfcd72..d6f7047 100755
--- a/src/examples/xb_ex_v3_create_dbf.cpp
+++ b/src/examples/xb_ex_v3_create_dbf.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -47,19 +47,19 @@ int main()
// Create Dbase3 NDX style indices if support compiled in
-#ifdef XB_NDX_SUPPORT
+ #ifdef XB_NDX_SUPPORT
xbIxNdx MyIndex1( MyDbfFile ); /* class for index 1 */
xbIxNdx MyIndex2( MyDbfFile ); /* class for index 2 */
xbIxNdx MyIndex3( MyDbfFile ); /* class for index 3 */
-#endif
+ #endif
-// fixme
-// Create Clipper NTX style indices if support compiled in - bring this back to life in a future release
-#ifdef XB_INDEX_NTX
+ // fixme
+ // Create Clipper NTX style indices if support compiled in - bring this back to life in a future release
+ #ifdef XB_INDEX_NTX
xbNtx MyIndex4( &MyDbfFile ); /* class for index 4 */
xbNtx MyIndex5( &MyDbfFile ); /* class for index 5 */
-#endif
+ #endif
xbInt16 rc;
@@ -68,7 +68,7 @@ int main()
else
{
-#ifdef XB_NDX_SUPPORT
+ #ifdef XB_NDX_SUPPORT
xbIx *pIx;
void *pTag;
@@ -83,6 +83,7 @@ int main()
if(( rc = MyDbfFile->CreateTag ( "NDX", "MYINDEX1.NDX", "LASTNAME", "", 0, 1, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
x.DisplayError( rc );
+
/* define a multi-field index "LASTNAME FIRSTNAME" */
if(( rc = MyDbfFile->CreateTag( "NDX", "MYINDEX2.NDX", "LASTNAME+FIRSTNAME", "", 0, 1, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
x.DisplayError( rc );
@@ -91,12 +92,19 @@ int main()
if(( rc = MyDbfFile->CreateTag( "NDX", "MYINDEX3.NDX", "ZIPCODE", "", 0, 0, XB_OVERLAY, &pIx, &pTag )) != XB_NO_ERROR )
x.DisplayError( rc );
-#endif
+ std::cout << "Tag Count in MYINDEX3.NDX = " << pIx->GetTagCount() << "\n";
+ xbString sTagName;
+ sTagName = pIx->GetTagName( &pTag );
+ std::cout << "Tag Name in MYINDEX3.NDX = " << sTagName.Str() << "\n";
+
+
+ #endif
}
MyDbfFile->Close(); /* Close database and associated indexes */
+ delete MyDbfFile;
-#endif // XB_DBF3_SUPPORT
+ #endif // XB_DBF3_SUPPORT
return 0;
}
diff --git a/src/examples/xb_ex_v3_upd_dbf.cpp b/src/examples/xb_ex_v3_upd_dbf.cpp
index aa6ec49..eecba16 100755
--- a/src/examples/xb_ex_v3_upd_dbf.cpp
+++ b/src/examples/xb_ex_v3_upd_dbf.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2021,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -45,7 +45,9 @@ int main()
x.WriteLogMessage( "Program [xb_ex_v3_upd_dbf] initializing..." );
- xbDbf * MyTable = new xbDbf3( &x ); /* class for V3 table */
+ xbDbf * MyTable = new xbDbf3( &x ); /* class for V3 table */
+
+ xbString sSearchKey; /* string for doing an index lookup */
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
@@ -53,29 +55,36 @@ int main()
try{
if(( iRc = MyTable->Open( "MyV3Table1.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 1;
+ iErrorStop = 100;
throw iRc;
}
+
#ifdef XB_NDX_SUPPORT
// V3 NDX style indices can be opened manually (vs production MDX index files opened automatically)
+
+
if(( iRc = MyTable->OpenIndex( "NDX", "MYINDEX1.NDX")) != XB_NO_ERROR ){
- iErrorStop = 2;
+ iErrorStop = 110;
throw iRc;
}
+
+
+/*
if(( iRc = MyTable->OpenIndex( "NDX", "MYINDEX2.NDX" )) != XB_NO_ERROR ){
- iErrorStop = 3;
+ iErrorStop = 120;
throw iRc;
}
+
if(( iRc = MyTable->OpenIndex( "NDX", "MYINDEX3.NDX" )) != XB_NO_ERROR ){
- iErrorStop = 4;
+ iErrorStop = 130;
throw iRc;
}
+*/
+
std::cout << "Current tag = [" << MyTable->GetCurTagName().Str() << "]\n";
#endif
-
-
// get the field numbers for all the fields in the table
fld_FIRSTNAME = MyTable->GetFieldNo( "FIRSTNAME" );
fld_LASTNAME = MyTable->GetFieldNo( "LASTNAME" );
@@ -84,189 +93,223 @@ int main()
fld_RETIRED = MyTable->GetFieldNo( "RETIRED?" );
fld_ZIPCODE = MyTable->GetFieldNo( "ZIPCODE" );
+
+
+ // do an index lookup for (key does not exist in this example)
+ sSearchKey = "abc123";
+ if(( iRc = MyTable->Find( sSearchKey )) != XB_NOT_FOUND ){
+ iErrorStop = 140;
+ throw iRc;
+ }
+ std::cout << "RC = " << iRc << "\n";
+
+
+
#ifdef XB_MEMO_SUPPORT
fld_MEMO1 = MyTable->GetFieldNo( "MEMO1" );
#endif
+
// Blank the record buffer
if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 7;
+ iErrorStop = 140;
throw iRc;
}
+
// put field examples - using field numbers
if(( iRc = MyTable->PutField( fld_LASTNAME, "JONES" )) != XB_NO_ERROR ){
- iErrorStop = 8;
+ iErrorStop = 150;
throw iRc;
}
+
if(( iRc = MyTable->PutField( fld_FIRSTNAME, "JERRY" )) != XB_NO_ERROR ){
- iErrorStop = 9;
+ iErrorStop = 160;
throw iRc;
}
+
if(( iRc = MyTable->PutField( fld_AMOUNT, "12.35" )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 170;
throw iRc;
}
if(( iRc = MyTable->PutField( fld_BIRTHDATE, "19880208" )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 180;
throw iRc;
}
if(( iRc = MyTable->PutLogicalField( fld_RETIRED, "Y" )) != XB_NO_ERROR ){
- iErrorStop = 11;
+ iErrorStop = 190;
throw iRc;
}
if(( iRc = MyTable->PutLongField( fld_ZIPCODE, 12345 )) != XB_NO_ERROR ){
- iErrorStop = 12;
+ iErrorStop = 200;
throw iRc;
}
#ifdef XB_MEMO_SUPPORT
sMemoData = "Memo data record 1";
if(( iRc = MyTable->UpdateMemoField( fld_MEMO1, sMemoData )) != XB_NO_ERROR ){
- iErrorStop = 13;
+ iErrorStop = 210;
throw iRc;
}
#endif
// Append the first record
if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 15;
- throw iRc;
+ // here is where you would address any errors.
+ // in this program, we simply abort and continue
+ MyTable->Abort();
}
// put field to the record buffer using field name (slightly less efficient than using field numbers)
-
// Blank the record buffer
if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 20;
+ iErrorStop = 220;
throw iRc;
}
if(( iRc = MyTable->PutField( "LASTNAME", "EINSTIEN" )) != XB_NO_ERROR ){
- iErrorStop = 21;
+ iErrorStop = 230;
throw iRc;
}
if(( iRc = MyTable->PutField( "FIRSTNAME", "ALBERT" )) != XB_NO_ERROR ){
- iErrorStop = 22;
+ iErrorStop = 240;
throw iRc;
}
if(( iRc = MyTable->PutField( "AMOUNT", "987.55" )) != XB_NO_ERROR ){
- iErrorStop = 23;
+ iErrorStop = 250;
throw iRc;
}
if(( iRc = MyTable->PutField( fld_BIRTHDATE, "19890209" )) != XB_NO_ERROR ){
- iErrorStop = 24;
+ iErrorStop = 260;
throw iRc;
}
if(( iRc = MyTable->PutLogicalField( "RETIRED?", "N" )) != XB_NO_ERROR ){
- iErrorStop = 25;
+ iErrorStop = 270;
throw iRc;
}
if(( iRc = MyTable->PutLongField( "ZIPCODE", 44256 )) != XB_NO_ERROR ){
- iErrorStop = 26;
+ iErrorStop = 280;
throw iRc;
}
#ifdef XB_MEMO_SUPPORT
sMemoData = "Memo data record 2";
if(( iRc = MyTable->UpdateMemoField( fld_MEMO1, sMemoData )) != XB_NO_ERROR ){
- iErrorStop = 27;
+ iErrorStop = 290;
throw iRc;
}
#endif
// Append the second record
if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 30;
- throw iRc;
+ // here is where you would address any errors.
+ // in this program, we simply abort and continue
+ MyTable->Abort();
}
+
+ if(( iRc = MyTable->GetRecord( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc;
+ }
// get a field with a field number
- xbString FirstName;
- if(( iRc = MyTable->GetField( fld_FIRSTNAME, FirstName )) < 0 ){
- iErrorStop = 40;
+ xbString sFirstName;
+ if(( iRc = MyTable->GetField( fld_FIRSTNAME, sFirstName )) < 0 ){
+ iErrorStop = 310;
throw iRc;
}
- std::cout << "First Name is [" << FirstName.Str() << "]" << std::endl;
+ std::cout << "First Name is [" << sFirstName.Str() << "]" << std::endl;
- xbString LastName;
- if(( iRc = MyTable->GetField( "LASTNAME", LastName )) < 0 ){
- iErrorStop = 41;
+ xbString sLastName;
+ if(( iRc = MyTable->GetField( "LASTNAME", sLastName )) < 0 ){
+ iErrorStop = 320;
throw iRc;
}
- std::cout << "Last Name is [" << LastName.Str() << "]" << std::endl;
+ std::cout << "Last Name is [" << sLastName.Str() << "]" << std::endl;
xbInt16 iNoOfDecimals;
if(( iRc = MyTable->GetFieldDecimal( "AMOUNT", iNoOfDecimals )) != XB_NO_ERROR ){
- iErrorStop = 42;
+ iErrorStop = 330;
throw iRc;
}
std::cout << "There are " << iNoOfDecimals << " decimals in the AMOUNT field" << std::endl;
xbString FieldName;
if(( iRc = MyTable->GetFieldName( 4, FieldName )) != XB_NO_ERROR ){
- iErrorStop = 43;
+ iErrorStop = 340;
throw iRc;
}
std::cout << "Field #4 name is " << FieldName.Str() << std::endl;
xbString sRetired;
if(( iRc = MyTable->GetLogicalField( "RETIRED?", sRetired )) < 0 ){
- iErrorStop = 45;
+ iErrorStop = 350;
throw iRc;
}
std::cout << "Switch value = [" << sRetired.Str() << "]" << std::endl;
xbInt32 lZip;
if(( iRc = MyTable->GetLongField( "ZIPCODE", lZip )) < 0 ){
- iErrorStop = 46;
+ iErrorStop = 360;
throw iRc;
}
std::cout << "Long value = [" << lZip << "]" << std::endl;
// Initialize the record buffer in preparation for another record
if(( iRc = MyTable->BlankRecord()) != XB_NO_ERROR ){
- iErrorStop = 48;
+ iErrorStop = 370;
throw iRc;
}
// Append another record (it will be blank)
if(( iRc = MyTable->AppendRecord()) != XB_NO_ERROR ){
- iErrorStop = 49;
- throw iRc;
+ // here is where you would address any errors.
+ // in this program, we simply abort and continue
+ MyTable->Abort();
};
- // mark current record for deletion
+ // mark record 1 for deletion
+ if(( iRc = MyTable->GetRecord( 1 )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc;
+ }
+
if(( iRc = MyTable->DeleteRecord()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 380;
throw iRc;
};
// save current record
if(( iRc = MyTable->PutRecord()) != XB_NO_ERROR ){
- iErrorStop = 51;
+ iErrorStop = 390;
throw iRc;
}
// pack the table with no options
if(( iRc = MyTable->Pack()) != XB_NO_ERROR ){
- iErrorStop = 52;
+ iErrorStop = 400;
throw iRc;
}
+ if(( iRc = MyTable->Commit()) != XB_NO_ERROR ){
+ // here is where you would address any errors.
+ // in this program, we simply abort and continue
+ MyTable->Abort();
+ }
+
/* Close database and associated indexes */
if(( iRc = MyTable->Close()) != XB_NO_ERROR ){
- iErrorStop = 53;
+ iErrorStop = 410;
throw iRc;
}
@@ -276,7 +319,8 @@ int main()
std::cout << x.GetErrorMessage( rc ) << std::endl;
}
-#endif // XB_DBF3_SUPPORT
+ delete MyTable;
+ #endif // XB_DBF3_SUPPORT
return 0;
}
diff --git a/src/examples/xb_ex_v4_create_dbf.cpp b/src/examples/xb_ex_v4_create_dbf.cpp
index 6169213..d6bfb2f 100755
--- a/src/examples/xb_ex_v4_create_dbf.cpp
+++ b/src/examples/xb_ex_v4_create_dbf.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -60,12 +60,12 @@ 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( "Address.DBF", "Address", MyAddressBookRecord, XB_OVERLAY, XB_MULTI_USER )) != XB_NO_ERROR )
@@ -93,7 +93,8 @@ int main()
}
MyDbfFile->Close(); /* Close database and associated indexes */
+ delete MyDbfFile;
-#endif // XB_DBF4_SUPPORT
+ #endif // XB_DBF4_SUPPORT
return 0;
}
diff --git a/src/examples/xb_ex_v4_upd_dbf.cpp b/src/examples/xb_ex_v4_upd_dbf.cpp
index 75d0641..d128eba 100755
--- a/src/examples/xb_ex_v4_upd_dbf.cpp
+++ b/src/examples/xb_ex_v4_upd_dbf.cpp
@@ -209,7 +209,7 @@ int main()
}
std::cout << "Switch value = [" << sFriend.Str() << "]" << std::endl;
- xbInt32 lZip;
+ xbInt32 lZip = 0;
if(( iRc = MyTable->GetLongField( "ZIPCODE", lZip )) < 0 ){
iErrorStop = 350;
throw iRc;
@@ -259,9 +259,15 @@ int main()
}
// example code to loop through the table
- for( xbUInt32 ul = 1; ul <= MyTable->GetRecordCount(); ul++ ){
+ xbUInt32 ulRecCnt;
+ if(( iRc = MyTable->GetRecordCnt( ulRecCnt )) != XB_NO_ERROR ){
+ iErrorStop = 430;
+ throw iRc;
+ }
+
+ for( xbUInt32 ul = 1; ul <= ulRecCnt; ul++ ){
if(( iRc = MyTable->GetRecord( ul )) != XB_NO_ERROR ){
- iErrorStop = 430;
+ iErrorStop = 440;
throw iRc;
}
// do something with the record here
@@ -271,9 +277,11 @@ int main()
/* Close database and associated indexes */
if(( iRc = MyTable->Close()) != XB_NO_ERROR ){
- iErrorStop = 440;
+ iErrorStop = 450;
throw iRc;
}
+ delete MyTable;
+
}
catch( xbInt16 iRc ){
diff --git a/src/include/xbconfig.h.in b/src/include/xbconfig.h.in
index f0d475a..f084038 100755
--- a/src/include/xbconfig.h.in
+++ b/src/include/xbconfig.h.in
@@ -11,6 +11,7 @@
#define PROJECT_RUNTIME_DIR "@PROJECT_RUNTIME_DIR@"
#define PROJECT_DATA_DIR "@PROJECT_DATA_DIR@"
#define PROJECT_LOG_DIR "@PROJECT_LOG_DIR@"
+#define PROJECT_TEMP_DIR "@PROJECT_TEMP_DIR@"
#define PROJECT_DFLT_LOGFILE "@CMAKE_SYSTEM_NAME@_@XB_PLATFORM@.xbLog.txt"
#define EXTRA_LIBS "@EXTRA_LIBS@"
#define CMAKE_RUNTIME_OUTPUT_DIRECTORY "@CMAKE_RUNTIME_OUTPUT_DIRECTORY@"
@@ -69,11 +70,12 @@
#cmakedefine HAVE__FILENO_F
#cmakedefine HAVE_FOPEN_S_F
#cmakedefine HAVE__FSOPEN_F
-
#cmakedefine HAVE_FORK_F
#cmakedefine HAVE__FSEEKI64_F
#cmakedefine HAVE_FSEEKO_F
#cmakedefine HAVE_FTRUNCATE_F
+
+#cmakedefine HAVE_GETENV_S_F
#cmakedefine HAVE__LOCALTIME64_S_F
#cmakedefine HAVE_LOCKFILE_F
#cmakedefine HAVE_LOCKING_F
@@ -84,6 +86,7 @@
#cmakedefine HAVE__VSNPRINTF_S_F
#cmakedefine HAVE_VSPRINTF_S_F
+
#cmakedefine XB_PLATFORM_32
#cmakedefine XB_PLATFORM_64
#cmakedefine XB_DEBUG_SUPPORT
@@ -98,6 +101,7 @@
#cmakedefine XB_INDEX_SUPPORT
#cmakedefine XB_NDX_SUPPORT
#cmakedefine XB_MDX_SUPPORT
+#cmakedefine XB_TDX_SUPPORT
#cmakedefine XB_SQL_SUPPORT
#cmakedefine XB_INF_SUPPORT
#cmakedefine XB_FILTER_SUPPORT
diff --git a/src/include/xbcrix.cpp b/src/include/xbcrix.cpp
new file mode 100755
index 0000000..b89baaa
--- /dev/null
+++ b/src/include/xbcrix.cpp
@@ -0,0 +1,292 @@
+/* xbcrix.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_SQL_SUPPORT
+
+namespace xb{
+
+
+/***********************************************************************/
+#ifdef XB_INDEX_SUPPORT
+xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
+
+ // std::cout << "CREATE INDEX " << sCmdLine << std::endl;
+
+ // expected format to create an Dbase 3, NDX index:
+ // CREATE INDEX ixname.ndx ON tablename.dbf ( EXPRESSION ) [ASSOCIATE]
+
+ // expected format to create an Dbase 4, tag on an MDX index:
+ // CREATE [UNIQUE] INDEX tagname ON tablename.dbf ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()]
+
+ // The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate
+ // a non production (NDX) index file to a dbf file so it will be automatically
+ // opened with the dbf file whenever the dbf file is opened by the xbase64 routines.
+
+ // The [ASSOCIATE] parameter is not used with MDX production indices
+
+ // This method first looks for ".NDX" in the file name to determine if an NDX
+ // index should be created.
+ // if .NDX is not in the filename, it looks in the uda for "IXTYPE" for either
+ // NDX or MDX to detmermine the index type to create
+ // if IXTYPE not found, create an MDX tag
+
+ // The optional DESC parameter defines an entire index key as descending. This is
+ // different than other SQL implementations where specific fields can be descending.
+
+ // The optional FILTER parameter is specific to the XBASE64 library, is it used to
+ // assign a filter to a tag in an MDX style index. Everything to the right of
+ // the keyword FILTER is considered part of the filter.
+
+ // The original DBASE indices used to '+' to create an index on more than one field
+ // ie: FIELD1+FIELD2+FIELD3
+ // SQL uses commas: ie: FIELD1, FIELD2, FIELD3
+ // The Xbase library supports either '+' or ',' when creating mutli field indices.
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbString sTableName;
+ xbString sIxName;
+ xbString sIxType;
+ xbUInt32 ulPos;
+ xbString sCmd = sCmdLine;
+ xbString sNode;
+ xbBool bUnique = xbFalse;
+ xbDbf * dbf = NULL;
+ xbBool bTableLocked = xbFalse;
+
+ try{
+
+ // drop off the first node
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ sNode.ExtractElement( sCmd, ' ', 1, 0 );
+ sNode.ToUpperCase();
+
+ if( sNode == "UNIQUE" ){
+ //std::cout << "unique ix\n";
+ bUnique = xbTrue;
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+ }
+
+ // go past the index keyword
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // pull the index name off the cmd line
+ sIxName.ExtractElement( sCmd, ' ', 1, 0 );
+
+ #ifdef XB_NDX_SUPPORT
+ xbString sTemp = sIxName;
+ sTemp.ToUpperCase();
+ ulPos = sTemp.Pos( ".NDX" );
+ if(ulPos == (sTemp.Len() - 3) )
+ sIxType = "NDX";
+ #endif // XB_NDX_SUPPORT
+
+ if( sIxType == "" ){
+ if(( iRc = uda.GetTokenForKey( "IXTYPE", sIxType )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+
+ #ifdef XB_NDX_SUPPORT
+ if( sIxType == "NDX" ){
+ xbFile f( xbase );
+ f.SetFileName( sIxName );
+ if( f.FileExists()){
+
+ iErrorStop = 110;
+ iRc = XB_FILE_EXISTS;
+ throw iRc;
+ }
+ }
+ #endif // XB_NDX_SUPPORT
+
+ // skip past index name
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // skip past "ON"
+ ulPos = sCmd.Pos( ' ' );
+ sCmd.Ltrunc( ulPos );
+ sCmd.Ltrim();
+
+ // get the table name
+ ulPos = sCmd.Pos( '(' );
+ sTableName.ExtractElement( sCmd, '(', 1, 0 );
+ sTableName.Trim();
+
+ xbFile fDbf( xbase );
+ fDbf.SetFileName( sTableName );
+
+ // if not open, attempt to open it
+ dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
+
+ if( !dbf ){
+ if(( iRc = xbase->OpenHighestVersion( sTableName, "", &dbf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ }
+
+ if( dbf == NULL ){
+ iErrorStop = 130;
+ iRc = XB_FILE_NOT_FOUND;
+ throw iRc;
+ }
+ sCmd.Ltrunc( ulPos );
+
+ //ulPos = sCmd.GetLastPos( ')' );
+ xbString sKeyExpression;
+ xbBool bDone = xbFalse;
+ xbUInt32 lPos = 1;
+ xbInt16 iParenCtr = 0;
+
+ while( !bDone && lPos < sCmd.Len()){
+ if( sCmd[lPos] == '(' ){
+ iParenCtr++;
+ sKeyExpression.Append( sCmd[lPos] );
+ } else if( sCmd[lPos] == ')' ){
+ if( iParenCtr > 0 ){
+ iParenCtr--;
+ sKeyExpression.Append( sCmd[lPos] );
+ } else {
+ bDone = xbTrue;
+ }
+ } else if( sCmd[lPos] == ',' && iParenCtr == 0 ){
+ sKeyExpression.Append( '+' );
+ } else if( sCmd[lPos] != ' ' ){
+ sKeyExpression.Append( sCmd[lPos] );
+ }
+ lPos++;
+ }
+
+ // std::cout << "Key Expression =[" << sKeyExpression << "]\n";
+ sCmd.Ltrunc( lPos );
+ sCmd.Trim();
+
+ xbBool bDesc = xbFalse;
+ // std::cout << "sCmd - looking for DESC [" << sCmd << "]\n";
+ if( sCmd.Len() > 4 ){
+ sNode = sCmd;
+ sNode.ToUpperCase();
+ ulPos = sNode.Pos( "DESC" );
+ if( ulPos > 0 ){
+ bDesc = xbTrue;
+ sCmd.Ltrunc( 4 );
+ sCmd.Trim();
+ std::cout << "Descending\n";
+ }
+ }
+
+ // std::cout << "sCmd - looking for FILTER stuff [" << sCmd << "]\n";
+ xbString sFilter;
+ if( sCmd.Len() > 6 ){
+ sNode = sCmd;
+ sNode.ToUpperCase();
+ ulPos = sNode.Pos( "FILTER" );
+ if( ulPos > 0 ){
+ sFilter = sCmd;
+ sFilter.Ltrunc( ulPos + 6 );
+ sFilter.Trim();
+ }
+ }
+ // std::cout << "sCmd - FILTER = [" << sFilter << "]\n";
+
+ #ifdef XB_LOCKING_SUPPORT
+ if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 140;
+ throw iRc;
+ } else {
+ bTableLocked = xbTrue;
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ xbIx *pIx;
+ void *vpTag;
+
+ if(( iRc = dbf->CreateTag( sIxType, sIxName, sKeyExpression, sFilter, bDesc, bUnique, xbFalse, &pIx, &vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 150;
+ throw iRc;
+ }
+
+ #ifdef XB_NDX_SUPPORT
+ if( sIxType == "NDX"){
+ sCmd.Ltrunc( ulPos );
+ sCmd.Trim();
+ if( sCmd.Len() > 0 ){
+ sCmd.ToUpperCase();
+ if( sCmd.Pos( "ASSOCIATE" )){
+ if(( iRc = dbf->AssociateIndex( "NDX", sIxName, 0 )) != XB_NO_ERROR ){
+ iErrorStop = 160;
+ throw iRc;
+ }
+ }
+ }
+ }
+ #endif // XB_NDX_SUPPORT
+
+ if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
+
+// if(( iRc = dbf->Reindex( 2, &vpTag )) != XB_NO_ERROR ){
+ iErrorStop = 170;
+ throw iRc;
+ }
+
+
+ //std::cout << "Tag count = " << pIx->GetTagCount() << "\n";
+ // s = pIx->GetTagName( &vpTag );
+ // std::cout << "tagname = [" << s.Str() << "]\n";
+
+
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked ){
+ if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc;
+ } else {
+ bTableLocked = xbFalse;
+ }
+ }
+ #endif // XB_LOCKING_SUPPORT
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbSql::SqlCreateIndex() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ #ifdef XB_LOCKING_SUPPORT
+ if( bTableLocked && dbf )
+ dbf->LockTable( XB_UNLOCK );
+ #endif // XB_LOCKING_SUPPORT
+
+ return iRc;
+}
+#endif // XB_INDEX_SUPPORT
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/src/include/xbdate.h b/src/include/xbdate.h
index 8dff463..e914d65 100755
--- a/src/include/xbdate.h
+++ b/src/include/xbdate.h
@@ -66,6 +66,7 @@ class XBDLLEXPORT xbDate : public xbSsv {
xbDate( const char * Date8 );
xbDate( const xbString &Date8 );
xbDate( xbInt32 lJulDate );
+ xbDate( xbUInt16 iInit ); // Constructor used to set the static variables, also defaults to sysdate
~xbDate();
void operator=( const xbDate &d );
@@ -96,6 +97,7 @@ class XBDLLEXPORT xbDate : public xbSsv {
const char *Str() const;
xbBool IsLeapYear( xbInt16 iYear ) const;
xbBool IsLeapYear() const;
+ xbBool IsNull() const;
xbInt32 JulianDays() const;
xbInt16 JulToDate8( xbInt32 lJulDate );
xbInt16 LastDayOfMonth();
@@ -111,7 +113,8 @@ class XBDLLEXPORT xbDate : public xbSsv {
private:
void SetDateTables();
- xbString sDate8; /* CCYYMMDD date format ie; 20140718 */
+ xbString sDate8; // CCYYMMDD date format ie; 20140718
+ // Null date is identified by sDate.Len() < 8
static int iAggregatedDaysInMonths[2][13];
static int iDaysInMonths[2][13];
diff --git a/src/include/xbdbf.h b/src/include/xbdbf.h
index 16799f2..fe24e72 100755
--- a/src/include/xbdbf.h
+++ b/src/include/xbdbf.h
@@ -164,7 +164,7 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbInt16 DeleteAll ( xbInt16 iOption );
virtual xbInt16 DeleteAllRecords ();
virtual xbInt16 DeleteRecord ();
- virtual xbInt16 DumpHeader ( xbInt16 iOption ) const;
+ virtual xbInt16 DumpHeader ( xbInt16 iOption );
virtual xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );
virtual xbInt16 GetAutoCommit () const;
virtual xbInt16 GetAutoCommit ( xbInt16 iOption ) const;
@@ -186,7 +186,7 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbInt16 GetPrevRecord ( xbInt16 iOption );
virtual xbInt16 GetRecord ( xbUInt32 ulRecNo );
- virtual xbUInt32 GetRecordCount ();
+ // virtual xbUInt32 GetRecordCount ();
virtual xbInt16 GetRecordCnt ( xbUInt32 & ulRecCnt );
virtual char * GetRecordBuf ( xbInt16 iOpt = 0 ) const;
@@ -207,7 +207,7 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbInt16 PutRecord (); // Put record to current location
virtual xbInt16 PutRecord ( xbUInt32 ulRecNo );
- virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );
+// virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );
virtual xbInt16 RecordDeleted ( xbInt16 iOpt = 0 ) const;
virtual xbInt16 Rename ( const xbString sNewName ) = 0;
@@ -251,7 +251,7 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &lFieldValue ) const;
virtual xbInt16 GetLongField( const xbString &sFieldName, xbInt32 &lFieldValue ) const;
virtual xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );
- virtual xbInt16 PutLongField( const xbString &sFieldNo, xbInt32 lFieldValue );
+ virtual xbInt16 PutLongField( const xbString &sFieldName, xbInt32 lFieldValue );
virtual xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &lFieldValue ) const;
virtual xbInt16 GetULongField( const xbString &sFieldName, xbUInt32 &lFieldValue ) const;
@@ -274,6 +274,10 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbInt16 PutDateField( xbInt16 iFieldNo, const xbDate &dt );
virtual xbInt16 PutDateField( const xbString &sFieldName, const xbDate &dt );
+ virtual xbInt16 GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull ) const;
+ virtual xbInt16 GetNullSts( const xbString &sFieldName, xbBool &bIsNull ) const;
+ virtual xbInt16 GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull, xbInt16 iRecBufSw ) const;
+
#ifdef XB_MEMO_SUPPORT
@@ -282,7 +286,7 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbUInt32 GetCreateMemoBlockSize() const;
virtual xbInt16 GetMemoField ( xbInt16 iFldNo, xbString &sMemoData );
virtual xbInt16 GetMemoField ( const xbString & sFldName, xbString &sMemoData );
- virtual xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &ullMemoFieldLen );
+ virtual xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &ulMemoFieldLen );
virtual xbInt16 GetMemoFieldLen ( const xbString & sFldName, xbUInt32 &ulMemoFieldLen );
virtual xbBool MemoFieldExists ( xbInt16 iFieldNo ) const;
virtual xbBool MemoFieldExists ( const xbString &sFieldName ) const;
@@ -347,7 +351,7 @@ class XBDLLEXPORT xbDbf : public xbFile {
xbLinkListNode<xbTag *> *GetTagList () const;
virtual xbInt16 OpenIndex( const xbString &sIxType, const xbString &sIndexName );
- virtual xbInt16 Reindex( xbInt16 iTagOpt );
+ virtual xbInt16 Reindex( xbInt16 iTagOpt = 0, xbInt16 iErrorOpt = 1, xbIx **pIx = NULL, void **vpTag = NULL );
virtual xbInt16 SetCurTag( const xbString &sTagName );
virtual void SetCurTag( const xbString &sIxType, xbIx *pIx, void *vpTag );
@@ -373,14 +377,20 @@ class XBDLLEXPORT xbDbf : public xbFile {
#ifdef XB_INDEX_SUPPORT
friend class xbIx;
friend class xbIxMdx;
+ friend class xbIxTdx;
xbInt16 AddIndex( xbIx *ix, const xbString &sFmt );
void ClearTagList();
xbInt16 RemoveIndex( xbIx * ix );
void UpdateSchemaIxFlag( xbInt16 iFldNo, unsigned char cVal );
+
+
virtual xbInt16 UpdateTagList ();
#endif // XB_INDEX_SUPPORT
+ virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );
+
+
#ifdef XB_INF_SUPPORT
virtual xbInt16 GetInfFileName( xbString &sNdxIdxFileName );
#endif // XB_INF_SUPPORT
diff --git a/src/include/xbexp.h b/src/include/xbexp.h
index 96413ac..4792b0e 100755
--- a/src/include/xbexp.h
+++ b/src/include/xbexp.h
@@ -22,6 +22,7 @@ Email Contact:
// #pragma interface
// #endif
+#define XB_NULL_DATE 21474835648
#ifdef XB_FUNCTION_SUPPORT
diff --git a/src/include/xbexpnode.h b/src/include/xbexpnode.h
index f50d9eb..51efa9b 100755
--- a/src/include/xbexpnode.h
+++ b/src/include/xbexpnode.h
@@ -103,7 +103,7 @@ class XBDLLEXPORT xbExpNode {
xbUInt32 ulResultLen; // for string results, accumulated length of character operations
// includes the sum of all nodes under this + this
// date = 8, numeric = 4, logical = 1
- xbInt16 iWeight; // used for buildign the tree of nodes, assigned to operators
+ xbInt16 iWeight; // used for building the tree of nodes, assigned to operators
// the higher the number, the lower it goes on the tree
};
diff --git a/src/include/xbfile.h b/src/include/xbfile.h
index af04e98..e346a75 100755
--- a/src/include/xbfile.h
+++ b/src/include/xbfile.h
@@ -56,108 +56,109 @@ This class could be used if you want to write a platform independent program tha
class XBDLLEXPORT xbFile : public xbSsv {
public:
- // xbFile();
xbFile( xbXBase * x );
-
~xbFile();
- xbInt16 SetHomeFolders();
-
- xbInt16 CreateUniqueFileName( const xbString &sDirIn, const xbString &sExtIn, xbString &sFqnOut );
- xbInt16 CreateUniqueFileName( const xbString &sDirIn, const xbString &sExtIn, xbString &sFqnOut, xbInt16 iOption );
-
const xbString& GetDirectory() const;
const xbString& GetFileName() const;
const xbString& GetFqFileName() const;
- void SetDirectory ( const xbString &sDirectory);
- void SetFileName ( const xbString &sFileName );
- void SetFqFileName( const xbString &sFqName );
- xbUInt32 GetBlockSize () const;
- xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );
+ xbInt16 CreateUniqueFileName( const xbString &sDirIn, const xbString &sExtIn, xbString &sFqnOut, xbInt16 iOption = 0 );
+
+ xbInt16 DetermineXbaseTableVersion( unsigned char cFileTypeByte ) const;
+ xbInt16 DetermineXbaseMemoVersion( unsigned char cFileTypeByte ) const;
+
+ xbDouble eGetDouble ( const char *p ) const;
+ xbInt32 eGetInt32 ( const char *p ) const;
+ xbUInt32 eGetUInt32 ( const char *p ) const;
+ xbInt16 eGetInt16 ( const char *p ) const;
+ xbUInt16 eGetUInt16 ( const char *p ) const;
+ void ePutDouble ( char *p, xbDouble d );
+ void ePutInt32 ( char *p, xbInt32 l );
+ void ePutUInt32 ( char *p, xbUInt32 ul );
+ void ePutInt16 ( char *p, xbInt16 s );
+ void ePutUInt16 ( char *p, xbUInt16 s );
+
+ xbBool FileExists () const;
+ xbBool FileExists ( xbInt16 iOption ) const;
+ xbBool FileExists ( const xbString &sFileName ) const;
+ xbBool FileExists ( const xbString &sFileName, xbInt16 iOption ) const;
+ xbBool FileIsOpen () const;
- xbInt16 GetOpenMode () const;
- xbInt16 GetShareMode () const;
+ xbUInt32 GetBlockSize () const;
xbInt16 GetFileDirPart ( xbString &sFileDirPartOut ) const;
xbInt16 GetFileDirPart ( const xbString &sCompleteFileNameIn, xbString &sFileDirPartOut ) const;
xbInt16 GetFileExtPart ( xbString &sFileExtPartOut ) const;
xbInt16 GetFileExtPart ( const xbString &sCompleteFileNameIn, xbString &sFileExtPartOut ) const;
+ xbInt16 GetFileMtime ( time_t &mtime );
xbInt16 GetFileNamePart( xbString &sFileNamePartOut ) const;
xbInt16 GetFileNamePart( const xbString &sCompleteFileNameIn, xbString &sFileNamePartOut ) const;
+ xbInt16 GetFileSize ( xbUInt64 &ullFileSize );
xbInt16 GetFileType ( xbString &sFileType ) const;
+
+ xbInt16 GetOpenMode () const;
+ xbInt16 GetShareMode () const;
+
+
xbInt16 GetXbaseFileTypeByte( const xbString &sFileName, xbInt16 &iVersion );
xbInt16 GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte );
xbInt16 GetXbaseFileTypeByte( const xbString &sFileName, unsigned char &cFileTypeByte, xbInt16 &iVersion );
- xbInt16 DetermineXbaseTableVersion( unsigned char cFileTypeByte ) const;
- xbInt16 DetermineXbaseMemoVersion( unsigned char cFileTypeByte ) const;
- xbBool FileExists () const;
- xbBool FileExists ( xbInt16 iOption ) const;
- xbBool FileExists ( const xbString &sFileName ) const;
- xbBool FileExists ( const xbString &sFileName, xbInt16 iOption ) const;
+ xbInt16 NameSuffixMissing( const xbString &sFileName, xbInt16 iOption ) const;
- xbBool FileIsOpen () const;
+ xbInt16 ReadBlock ( xbUInt32 ulBlockNo, size_t readSize, void *buf );
+ xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf );
- xbInt16 ReadBlock ( xbUInt32 ulBlockNo, size_t readSize, void *buf );
- xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize, size_t readSize, void *buf );
- xbInt16 WriteBlock( xbUInt32 ulBlockNo, size_t writeSize, void *buf );
-
- xbInt16 GetFileSize( xbUInt64 &ullFileSize );
- xbInt16 GetFileMtime( time_t &mtime );
-
- xbDouble eGetDouble( const char *p ) const;
- xbInt32 eGetInt32 ( const char *p ) const;
- xbUInt32 eGetUInt32( const char *p ) const;
- xbInt16 eGetInt16 ( const char *p ) const;
- xbUInt16 eGetUInt16( const char *p ) const;
- void ePutDouble( char *p, xbDouble d );
- void ePutInt32 ( char *p, xbInt32 l );
- void ePutUInt32( char *p, xbUInt32 ul );
- void ePutInt16 ( char *p, xbInt16 s );
- void ePutUInt16( char *p, xbUInt16 s );
-
- xbInt16 xbFclose ();
- xbInt16 xbFeof ();
- xbInt16 xbFflush ();
- xbInt16 xbFgetc ( xbInt32 &c );
- xbInt16 xbFgetc ( char &c );
+ xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );
+ void SetDirectory ( const xbString &sDirectory);
+ void SetFileName ( const xbString &sFileName );
+ void SetFqFileName ( const xbString &sFqName );
+ xbInt16 SetHomeFolders();
- #ifdef XB_LOCKING_SUPPORT
- xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, size_t stLen );
- xbInt16 GetLockRetryCount() const;
- void SetLockRetryCount( xbInt16 iLockRetries );
- #endif
+ xbInt16 WriteBlock ( xbUInt32 ulBlockNo, size_t writeSize, void *buf );
- xbInt16 xbFopen ( xbInt16 iOpenMode );
- xbInt16 xbFopen ( const xbString &sOpenMode, xbInt16 iShareMode );
- xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );
- xbInt16 xbFopen ( const xbString &sMode, const xbString &sFileName, xbInt16 iShareMode );
+ xbInt16 xbFclose ();
+ xbInt16 xbFeof ();
+ xbInt16 xbFflush ();
+ xbInt16 xbFgetc ( xbInt32 &c );
+ xbInt16 xbFgetc ( char &c );
+ xbInt16 xbFgets ( size_t lSize, xbString &sLine );
- xbInt16 xbFputc ( xbInt32 c );
- xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );
- xbInt16 xbFputs ( const xbString &s );
- xbInt16 xbFread ( void *ptr, size_t size, size_t nmemb );
- xbInt16 xbFgets ( size_t lSize, xbString &sLine );
- size_t xbFtell ();
- xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );
+ xbInt16 xbFopen ( xbInt16 iOpenMode );
+ xbInt16 xbFopen ( const xbString &sOpenMode, xbInt16 iShareMode );
+ xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );
+ xbInt16 xbFopen ( const xbString &sMode, const xbString &sFileName, xbInt16 iShareMode );
+ xbInt16 xbFputc ( xbInt32 c );
+ xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );
+ xbInt16 xbFputs ( const xbString &s );
+ xbInt16 xbFread ( void *ptr, size_t size, size_t nmemb );
+ xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );
+ size_t xbFtell ();
void xbFTurnOffFileBuffering();
- xbInt16 xbFwrite ( const void *ptr, size_t lSize, size_t lNmemb );
+
+ xbInt16 xbReadUntil ( const char cDelim, xbString &sOut );
+ xbInt16 xbRemove ( const xbString &sFileName, xbInt16 iOption );
+ xbInt16 xbRemove ( const xbString &sFileName );
+ xbInt16 xbRemove ();
- xbInt16 xbReadUntil ( const char cDelim, xbString &sOut );
- xbInt16 xbRemove ( const xbString &sFileName, xbInt16 iOption );
- xbInt16 xbRemove ( const xbString &sFileName );
- xbInt16 xbRemove ();
+ xbInt16 xbRename ( const xbString &sOldName, const xbString &sNewName );
+ void xbRewind ();
- xbInt16 xbRename ( const xbString &sOldName, const xbString &sNewName );
- void xbRewind ();
+ xbInt16 xbFwrite ( const void *ptr, size_t lSize, size_t lNmemb );
- xbInt16 xbTruncate ( xbInt64 llSize );
- xbInt16 NameSuffixMissing( const xbString &sFileName, xbInt16 iOption ) const;
+ xbInt16 xbTruncate ( xbInt64 llSize );
+
+
+ #ifdef XB_LOCKING_SUPPORT
+ xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset, size_t stLen );
+ xbInt16 GetLockRetryCount() const;
+ void SetLockRetryCount( xbInt16 iLockRetries );
+ #endif
#ifdef XB_DEBUG_SUPPORT
xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlockSize );
diff --git a/src/include/xbindex.h b/src/include/xbindex.h
index b42f76e..959562c 100755
--- a/src/include/xbindex.h
+++ b/src/include/xbindex.h
@@ -167,7 +167,6 @@ class XBDLLEXPORT xbIx : public xbFile {
virtual xbBool GetSortOrder( void *vpTag ) const = 0;
virtual xbInt16 Open( const xbString &sFileName );
- virtual xbInt16 Reindex( void **vpTag ) = 0;
virtual xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;
virtual xbInt16 SetCurTag( xbString &sTagName ) = 0;
virtual void SetCurTag( void * vpCurTag );
@@ -176,6 +175,10 @@ class XBDLLEXPORT xbIx : public xbFile {
virtual void TestStub( char *s, void *vpTag ) {};
+
+ virtual xbInt16 Reindex( void **vpTag ) = 0;
+
+
#ifdef XB_DEBUG_SUPPORT
virtual xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) { return XB_NO_ERROR; }
virtual xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;
@@ -199,17 +202,13 @@ class XBDLLEXPORT xbIx : public xbFile {
virtual xbInt16 CreateKeys( xbInt16 iOpt );
virtual xbInt16 CreateKey( void * vpTag, xbInt16 iOpt ) = 0;
virtual xbInt16 DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;
-// virtual xbInt16 DeleteKeys( xbUInt32 ulRecNo );
virtual xbInt16 DeleteKeys();
virtual xbInt16 DeleteKey( void *vpTag ) = 0;
-
virtual xbInt16 DeleteTag( void *vpTag ) = 0;
-
virtual xbInt16 FindKeyForCurRec( void *vpTag ) = 0;
virtual xbIxNode *FreeNodeChain( xbIxNode *np );
virtual xbInt16 GetBlock( void *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );
-// virtual xbBool GetIndexUpdated() const = 0;
virtual xbInt32 GetKeyCount( xbIxNode *npNode ) const;
virtual char *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) const;
virtual xbInt16 GetKeySts( void *vpTag ) const = 0;
@@ -217,9 +216,9 @@ class XBDLLEXPORT xbIx : public xbFile {
virtual xbInt16 InsertNodeL( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 uiPtr ) = 0;
virtual xbInt16 InsertNodeI( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;
virtual xbInt16 KeyExists( void * ) = 0;
-// virtual xbInt16 KeyUpdated( void *vpTag ) const = 0;
virtual void NodeFree( xbIxNode * ixNode );
virtual xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;
+ // virtual xbInt16 Reindex( void **vpTag ) = 0;
virtual void SetDbf( xbDbf *dbf );
virtual xbInt16 SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr ) = 0;
virtual xbInt16 SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;
@@ -267,7 +266,6 @@ struct XBDLLEXPORT xbNdxTag {
char *cpKeyBuf; // key buffer, for searches and adds
char *cpKeyBuf2; // key buffer, for deletes
xbString sTagName; // tag name - is the file name without the extension
-// xbInt16 iKeyUpdated; // key updated? set in method KeyUpdated, checked in AddKey and DeleteKey routines
xbBool bFoundSts; // key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey
@@ -307,7 +305,6 @@ class XBDLLEXPORT xbIxNdx : public xbIx {
~xbIxNdx();
xbInt16 CheckTagIntegrity( void *vpTag, xbInt16 iOpt );
xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag );
-// xbInt16 DeleteTag( void *vpTag );
xbInt16 FindKey( void *vpTag, const void *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
xbInt16 GetFirstKey( void *vpTag, xbInt16 iRetrieveSw );
@@ -326,12 +323,9 @@ class XBDLLEXPORT xbIxNdx : public xbIx {
xbInt16 GetTagCount() const;
xbBool GetUnique( void *vpTag = NULL ) const;
xbBool GetSortOrder( void *vpTag ) const;
- xbInt16 Reindex( void **vpTag );
xbInt16 SetCurTag( xbInt16 iTagNo );
xbInt16 SetCurTag( xbString &sTagName );
-
-
#ifdef XB_DEBUG_SUPPORT
xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, void *vpTag = NULL );
xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );
@@ -340,6 +334,9 @@ class XBDLLEXPORT xbIxNdx : public xbIx {
xbInt16 DumpNode( void * vpTag, xbIxNode * pNode, xbInt16 iOption ) const;
#endif
+ xbInt16 Reindex( void **vpTag );
+
+
protected:
friend class xbDbf;
xbInt16 AddKey( void *vpTag, xbUInt32 ulRecNo );
@@ -349,20 +346,16 @@ class XBDLLEXPORT xbIxNdx : public xbIx {
xbInt16 CreateKey( void * vpTag, xbInt16 iOpt );
xbInt16 DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );
xbInt16 DeleteKey( void *vpTag );
-
xbInt16 DeleteTag( void *vpTag );
-
xbInt16 FindKeyForCurRec( void *vpTag );
-// xbBool GetIndexUpdated() const;
xbInt16 GetKeyTypeN( const void *vpTag ) const;
xbInt16 GetKeySts( void *vpTag ) const;
xbInt16 GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 iRetrieveSw = 1 );
xbInt16 InsertNodeI( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );
xbInt16 InsertNodeL( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 uiPtr );
xbInt16 KeyExists( void *vpTag = NULL );
-// xbBool KeyFiltered( void *vpTag ) const;
-// xbInt16 KeyUpdated( void *vpTag ) const;
xbInt16 ReadHeadBlock(xbInt16 iOpt); // read the header node of the disk NDX file
+// xbInt16 Reindex( void **vpTag );
xbInt16 SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );
xbInt16 SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr );
xbInt16 UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo = 0 );
@@ -377,7 +370,6 @@ class XBDLLEXPORT xbIxNdx : public xbIx {
xbBool IsLeaf( void *vpTag, xbIxNode *npNode ) const;
xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );
xbInt16 KeySetPosDel( xbNdxTag *npTag );
- // void SetCurNode( void *vpTag, xbIxNode *np );
xbNdxTag *ndxTag;
};
@@ -409,7 +401,6 @@ struct XBDLLEXPORT xbMdxTag {
// one unused byte fits here
char cTag11; // dbase sets to 0x1B
-
xbInt16 iKeyLen;
xbInt16 iKeysPerBlock;
xbInt16 iSecKeyType;
@@ -418,10 +409,8 @@ struct XBDLLEXPORT xbMdxTag {
char cSerialNo; // Increments +1 for each tag update
char cUnique;
xbString *sKeyExp; // Key expression
-
char cHasFilter; // 0x00 or 0x01
char cHasKeys; // 0x00 or 0x01
-
xbUInt32 ulLeftChild; // dbase 7 sets this to the root page on tag creation
xbUInt32 ulRightChild; // dbase 7 sets this to the root page on tag creation
@@ -441,12 +430,6 @@ struct XBDLLEXPORT xbMdxTag {
char *cpKeyBuf; // key buffer
char *cpKeyBuf2; // key buffer
-// xbBool iKeyUpdated; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines
- // 0 - no update
- // 1 - Add
- // 2 - Update
- // 3 - Delete
-// xbBool bKeyFiltered; // key filtered? True if included key, False if excluded key. Set in method CreateKey, checked in AddKey and DeleteKey routines
xbString *sTagName; // string tag name
@@ -469,59 +452,67 @@ class XBDLLEXPORT xbIxMdx : public xbIx {
public:
xbIxMdx( xbDbf * d );
~xbIxMdx();
- xbInt16 CheckTagIntegrity( void *vpTag, xbInt16 iOpt );
- xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag );
-// xbInt16 DeleteTag( void *vpTag );
- xbInt16 FindKey( void *vpTag, const void *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
- xbInt16 FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw );
- xbInt16 GetFirstKey( void *vpTag, xbInt16 lRetrieveSw );
- xbString &GetKeyExpression( const void *vpTag ) const;
- xbString &GetKeyFilter( const void *vpTag ) const;
- char GetKeyType( const void *vpTag ) const;
- xbInt16 GetLastKey( void *vpTag, xbInt16 lRetrieveSw );
- xbInt16 GetNextKey( void *vpTag, xbInt16 lRetrieveSw );
- xbInt16 GetPrevKey( void *vpTag, xbInt16 lRetrieveSw );
- xbBool GetReuseEmptyNodesSw() const;
- xbBool GetSortOrder( void *vpTag ) const;
- void *GetTag( xbInt16 iTagNo ) const;
- void *GetTag( xbString &sTagName ) const;
- xbInt16 GetTagCount() const;
+ virtual xbInt16 CheckTagIntegrity( void *vpTag, xbInt16 iOpt );
+ virtual xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag );
+ virtual xbInt16 FindKey( void *vpTag, const void *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw );
+ virtual xbInt16 GetFirstKey( void *vpTag, xbInt16 lRetrieveSw );
+ virtual xbString &GetKeyExpression( const void *vpTag ) const;
+ virtual xbString &GetKeyFilter( const void *vpTag ) const;
+ virtual char GetKeyType( const void *vpTag ) const;
+ virtual xbInt16 GetLastKey( void *vpTag, xbInt16 lRetrieveSw );
+ virtual xbInt16 GetNextKey( void *vpTag, xbInt16 lRetrieveSw );
+ virtual xbInt16 GetPrevKey( void *vpTag, xbInt16 lRetrieveSw );
+ virtual xbBool GetReuseEmptyNodesSw() const;
+ virtual xbBool GetSortOrder( void *vpTag ) const;
+ virtual void *GetTag( xbInt16 iTagNo ) const;
+ virtual void *GetTag( xbString &sTagName ) const;
+ virtual xbInt16 GetTagCount() const;
- xbString &GetTagName( void *vpTag ) const;
- const char * GetTagName( void *vpTag, xbInt16 iOpt ) const;
- void GetTagName( void *vpTag, xbString &sTagName );
+ virtual xbString &GetTagName( void *vpTag ) const;
+ virtual const char * GetTagName( void *vpTag, xbInt16 iOpt ) const;
+ virtual void GetTagName( void *vpTag, xbString &sTagName );
+
+ virtual xbInt16 GetUnique( void *vpTag ) const;
+ virtual xbInt16 SetCurTag( xbInt16 iTagNo );
+ virtual xbInt16 SetCurTag( xbString &sTagName );
+ void SetReuseEmptyNodesSw( xbBool bReuse );
+
+ void TestStub( char *s, void *vpTag );
- xbInt16 GetUnique( void *vpTag ) const;
- xbInt16 Reindex( void **vpTag );
- xbInt16 SetCurTag( xbInt16 iTagNo );
- xbInt16 SetCurTag( xbString &sTagName );
- void SetReuseEmptyNodesSw( xbBool bReuse );
- void TestStub( char *s, void *vpTag );
+ virtual xbInt16 Reindex( void **vpTag );
+
protected:
friend class xbDbf;
xbInt16 AddKey( void *vpTag, xbUInt32 ulRecNo );
xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );
+ void CalcBtreePointers();
+ char CalcTagKeyFmt( xbExp &exp );
+
xbInt16 CheckForDupKey( void *vpTag );
- xbInt16 Close();
+ virtual xbInt16 Close();
xbInt16 CreateKey( void * vpTag, xbInt16 iOpt );
xbInt16 DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );
xbInt16 DeleteKey( void *vpTag );
- xbInt16 DeleteTag( void *vpTag );
+ virtual xbInt16 DeleteTag( void *vpTag );
xbInt16 FindKeyForCurRec( void *vpTag );
xbInt16 GetKeySts( void *vpTag ) const;
xbInt16 GetLastKey( xbUInt32 ulBlockNo, void *vpTag, xbInt16 lRetrieveSw );
void *GetTagTblPtr() const;
+
+ xbInt16 HarvestTagNodes( xbMdxTag *mpTag, xbBool bRecycleRoot = xbFalse );
void Init( xbInt16 iOpt = 0 );
xbInt16 InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );
xbInt16 InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr );
xbInt16 KeyExists( void * );
xbInt16 LoadTagTable();
xbInt16 ReadHeadBlock(xbInt16 iOpt); // read the header node of the disk file
+ //virtual xbInt16 Reindex( void **vpTag );
xbInt16 SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );
xbInt16 SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr );
xbInt16 UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo = 0 );
@@ -535,34 +526,10 @@ class XBDLLEXPORT xbIxMdx : public xbIx {
void DumpIxNodeChain( void *vpTag, xbInt16 iOutputOpt ) const;
#endif
- private:
- xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );
- void AppendNodeChain( void *vpTag, xbIxNode *npNode );
- xbUInt32 BlockToPage( xbUInt32 ulBlockNo );
- void CalcBtreePointers();
- char CalcTagKeyFmt( xbExp &exp );
- char CalcTagFwdThread1();
- char CalcTagFwdThread2();
- xbMdxTag *ClearTagTable();
- xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );
- xbInt16 GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulDbfPtr ) const;
- xbInt16 GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr ) const;
- xbInt16 GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpKeyBuf );
- xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, xbBool bHarvestRoot = xbFalse );
- xbInt16 HarvestTagNodes( xbMdxTag *mpTag, xbBool bRecycleRoot = xbFalse );
- xbBool IsLeaf( void *vpTag, xbIxNode *npNode ) const;
- xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );
- xbInt16 KeySetPosDel( xbMdxTag *mpTag );
- xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );
- xbUInt32 PageToBlock( xbUInt32 ulPageNo );
- xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );
- xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );
- #ifdef XB_DEBUG_SUPPORT
- xbInt16 PrintKey( void *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, char cType, xbInt16 iOutputOpt );
- #endif
+ xbMdxTag *mdxTagTbl;
- // MDX File Header Fields
+// MDX File Header Fields
char cVersion;
char cCreateYY;
char cCreateMM;
@@ -588,18 +555,59 @@ class XBDLLEXPORT xbIxMdx : public xbIx {
// end of MDX Header fields
-
- xbMdxTag *mdxTagTbl;
-
xbBool bReuseEmptyNodes; // Reuese empty MDX nodes when all keys deleted?
// DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file
// Codebase 6.x reuses empty nodes.
// Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.
+
+ private:
+ xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );
+ void AppendNodeChain( void *vpTag, xbIxNode *npNode );
+ xbUInt32 BlockToPage( xbUInt32 ulBlockNo );
+ xbMdxTag *ClearTagTable();
+ xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );
+ xbInt16 GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulDbfPtr ) const;
+ xbInt16 GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr ) const;
+ xbInt16 GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpKeyBuf );
+ xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, xbBool bHarvestRoot = xbFalse );
+ xbBool IsLeaf( void *vpTag, xbIxNode *npNode ) const;
+ xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );
+ xbInt16 KeySetPosDel( xbMdxTag *mpTag );
+ xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );
+ xbUInt32 PageToBlock( xbUInt32 ulPageNo );
+ xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );
+ xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 PrintKey( void *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, char cType, xbInt16 iOutputOpt );
+ #endif
+
+
+ };
+ #endif /* XB_MDX_SUPPORT */
+
+
+#ifdef XB_TDX_SUPPORT
+
+class XBDLLEXPORT xbIxTdx : public xbIxMdx {
+ public:
+ xbIxTdx( xbDbf * d );
+ ~xbIxTdx();
+
+ xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag );
+
+ protected:
+ friend class xbDbf;
+ xbInt16 Close();
+ xbInt16 DeleteTag( void *vpTag );
+
+ private:
};
-#endif /* XB_MDX_SUPPORT */
-
-} /* namespace xb */
-#endif /* XB_INDEX_SUPPORT */
-#endif /* __XB_INDEX_H__ */
+#endif /* XB_TDX_SUPPORT */
+
+
+ } /* namespace xb */
+ #endif /* XB_INDEX_SUPPORT */
+#endif /* __XB_INDEX_H__ */
diff --git a/src/include/xbindex.h.nope b/src/include/xbindex.h.nope
new file mode 100755
index 0000000..b42f76e
--- /dev/null
+++ b/src/include/xbindex.h.nope
@@ -0,0 +1,605 @@
+/* xbindex.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014, 2018, 2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+
+#ifndef __XB_INDEX_H__
+#define __XB_INDEX_H__
+
+#ifdef XB_INDEX_SUPPORT
+
+
+#define XB_ADD_KEY 1
+#define XB_UPD_KEY 2
+#define XB_DEL_KEY 3
+
+namespace xb{
+
+
+
+///@cond DOXYOFF
+// structure for index nodes, each node contains information regarding one block
+struct XBDLLEXPORT xbIxNode {
+ xbIxNode *npPrev; // pointer to previous node in chain
+ xbIxNode *npNext; // pointer to next node in chain
+ xbUInt32 iCurKeyNo; // current key number in the node, 0 offset
+ xbUInt32 ulBlockNo; // this block number
+ xbUInt32 ulBufSize; // size of cpBlockData
+ char *cpBlockData; // pointer to memory version of block data stored in file
+};
+///@endcond DOXYOFF
+
+
+//! @brief Base class for handling dbf indices.
+/*!
+
+The xbIx class is used as a base class for accessing index files.
+Each index file can have one or more tags.
+
+Calls to the index routines to perform index updates are handled automatically by the dbf class.
+The application program does not need to be concerned with index updates.
+
+If there is a production MDX index, it is opened automatically when the dbf file is opened.
+If there is an ndx file, that has been associated with the dbf file with the metadata routines,
+it will be opened automatically when the dbf file is opened.
+If there are non prod ndx indices that are not associated with the dbf file, the application
+program will need to open as appropriate.
+The meta data association logic is specific to the Xbase64 library and is not applicable to
+other available tools that handle ndx indices.
+All index files are automatically closed when the dbf file is closed.
+
+
+<br>
+The class is designed to support the addition of additional indices with a minimal amount of effort
+needed to integrate into the library.
+If you are looking at adding an new index type to the library, create a derived class using xbIx as a
+base class and modify methods needed to support the new index file version.
+The xbDbf class (and derived classes) perform the needed calls to the index routines for updates.<br>
+See the following for examples on how to start on this:<br>
+xbIxNdx is a derived class and supports a single tag.<br>
+xbIxMdx is a derived class and supports multiple tags.<br>
+
+
+
+<br>
+How data fields are stored in index files:
+<table>
+<tr><th>Field Type<th>Stored in DBF as<th>Stored in NDX as<th>Stored in MDX as</tr>
+<tr><td>C<td>char<td>char<td>char
+<tr><td>F<td>text numbers<td>xbDouble<td>xbBcd
+<tr><td>N<td>text numbers<td>xbDouble<td>xbBcd
+<tr><td>D<td>text CCYYMMDD<td>xbDouble - julian<td>xbDouble - julian
+</table>
+
+
+<br>
+Pages Vs Blocks
+<br>
+For purposes of the Xbase index classes, a page is considered to be 512 bytes of data
+and a block is made up of one or more 512 byte pages.
+<br>Default block sixe of NDX indices is one 512 byte page.
+<br>Default block size of MDX indices is two 512 byte pages or 1024 bytes.
+
+<br>The WriteBlock and GetBlock functions calculate the physical position in the
+file based on a combination of Block Number and Block Size. Block size is set at
+time of index file creation, default is 1024 or two pages.
+
+<br>Page numbers are stored in the physical file, but block reads and writes
+are performed.
+
+<br>
+Duplicate Keys
+<br>
+With the original DBase unique indexing option, if a table has multiple records with the
+same key value, DBase would allow multiple records in the table, but only the first
+record would be found in the index.
+<br>
+XBase64 can be configured to support the original DBase duplicate key implementation,
+or can be configured to halt with a DUPLICATE_KEY error on the insertion of a record
+with a duplicate key.
+<br>
+<table>
+<tr><th>Option<th>Description</tr>
+<tr><td>XB_HALT_ON_DUPKEY</td><td>Return error XB_KEY_NOT_UNIQUE when attempting to append record with duplicate key</td></tr>
+<tr><td>XB_EMULATE_DBASE</td><td>Emulate DBase, allow duplicate records with the same key, only the first record is indexed</td></tr>
+</table>
+*/
+
+
+class XBDLLEXPORT xbIx : public xbFile {
+ public:
+ xbIx( xbDbf * d );
+ virtual ~xbIx();
+
+ virtual xbInt16 CheckTagIntegrity( void *vpTag, xbInt16 iOpt ) = 0;
+ virtual xbInt16 Close();
+ virtual xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag ) = 0;
+ virtual xbInt16 FindKey( void *vpTag, const xbString &sKey, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, const char * cKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, const xbBcd &bcd, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, const xbDate &dtKey, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw );
+ virtual xbInt16 FindKey( void *vpTag, const void *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw ) = 0;
+ virtual void *GetCurTag() const;
+ virtual xbDbf *GetDbf() const;
+
+ virtual xbString &GetKeyExpression( const void *vpTag ) const = 0;
+ virtual xbString &GetKeyFilter( const void *vpTag ) const = 0;
+ virtual char GetKeyType( const void *vpTag ) const = 0;
+ virtual xbBool GetLocked() const;
+
+ virtual xbInt16 GetFirstKey( void *vpTag, xbInt16 iRetrieveSw ) = 0;
+ virtual xbInt16 GetFirstKey( void *vpTag );
+ virtual xbInt16 GetFirstKey();
+
+ virtual xbInt16 GetLastKey( void *vpTag, xbInt16 lRetrieveSw ) = 0;
+ virtual xbInt16 GetLastKey( void *vpTag );
+ virtual xbInt16 GetLastKey();
+
+ virtual xbInt16 GetNextKey( void *vpTag, xbInt16 iRetrieveSw ) = 0;
+ virtual xbInt16 GetNextKey( void *vpTag );
+ virtual xbInt16 GetNextKey();
+
+ virtual xbInt16 GetPrevKey( void *vpTag, xbInt16 iRetrieveSw ) = 0;
+ virtual xbInt16 GetPrevKey( void *vpTag );
+ virtual xbInt16 GetPrevKey();
+
+ virtual void *GetTag( xbInt16 iTagNo ) const = 0;
+ virtual void *GetTag( xbString &sTagName ) const = 0;
+ virtual xbInt16 GetTagCount() const = 0;
+
+ virtual xbString &GetTagName( void *vpTag ) const = 0;
+ virtual const char * GetTagName( void *vpTag, xbInt16 iOpt ) const = 0;
+ virtual void GetTagName( void *vpTag, xbString &sTagName ) {};
+
+ virtual xbBool GetUnique( void *vpTag ) const = 0;
+ virtual xbBool GetSortOrder( void *vpTag ) const = 0;
+
+ virtual xbInt16 Open( const xbString &sFileName );
+ virtual xbInt16 Reindex( void **vpTag ) = 0;
+ virtual xbInt16 SetCurTag( xbInt16 iTagNo ) = 0;
+ virtual xbInt16 SetCurTag( xbString &sTagName ) = 0;
+ virtual void SetCurTag( void * vpCurTag );
+ virtual void SetLocked( xbBool bLocked );
+
+ virtual void TestStub( char *s, void *vpTag ) {};
+
+
+ #ifdef XB_DEBUG_SUPPORT
+ virtual xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 ) { return XB_NO_ERROR; }
+ virtual xbInt16 DumpHeader( xbInt16 iDestOpt = 0, xbInt16 iFmtOpt = 0 ) = 0;
+ virtual xbInt16 DumpIxForTag( void *vpTag, xbInt16 iOutputOpt ) = 0;
+ virtual void DumpIxNodeChain( void *vpTag, xbInt16 iOutputOpt ) const = 0;
+ virtual xbInt16 DumpNode( void * vpTag, xbIxNode * pNode, xbInt16 iOption ) const;
+ virtual xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, void *vpTag = NULL ) = 0;
+
+ #endif
+
+ protected:
+ friend class xbDbf;
+
+ virtual xbInt16 AddKey( void *vpTag, xbUInt32 ulRecNo ) = 0;
+ virtual xbInt16 AddKeys( xbUInt32 ulRecNo );
+ virtual xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );
+ virtual xbInt16 BSearchBlock( char cKeyType, xbIxNode *npNode, xbInt32 lKeyLen, const void *vpKey, xbInt32 lSearchKeyLen, xbInt16 &iCompRc, xbBool bDescending = xbFalse ) const;
+ virtual xbInt16 CheckForDupKeys();
+ virtual xbInt16 CheckForDupKey( void *vpTag ) = 0;
+ virtual xbInt16 CompareKey( char cKeyType, const void *v1, const void *v2, size_t lKeyLen ) const;
+ virtual xbInt16 CreateKeys( xbInt16 iOpt );
+ virtual xbInt16 CreateKey( void * vpTag, xbInt16 iOpt ) = 0;
+ virtual xbInt16 DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo ) = 0;
+// virtual xbInt16 DeleteKeys( xbUInt32 ulRecNo );
+ virtual xbInt16 DeleteKeys();
+ virtual xbInt16 DeleteKey( void *vpTag ) = 0;
+
+ virtual xbInt16 DeleteTag( void *vpTag ) = 0;
+
+
+ virtual xbInt16 FindKeyForCurRec( void *vpTag ) = 0;
+ virtual xbIxNode *FreeNodeChain( xbIxNode *np );
+ virtual xbInt16 GetBlock( void *vpTag, xbUInt32 ulBlockNo, xbInt16 iOpt, xbUInt32 ulAddlBuf = 0 );
+// virtual xbBool GetIndexUpdated() const = 0;
+ virtual xbInt32 GetKeyCount( xbIxNode *npNode ) const;
+ virtual char *GetKeyData( xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iKeyItemLen ) const;
+ virtual xbInt16 GetKeySts( void *vpTag ) const = 0;
+ virtual xbInt16 GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 lRetrieveSw ) = 0;
+ virtual xbInt16 InsertNodeL( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 uiPtr ) = 0;
+ virtual xbInt16 InsertNodeI( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;
+ virtual xbInt16 KeyExists( void * ) = 0;
+// virtual xbInt16 KeyUpdated( void *vpTag ) const = 0;
+ virtual void NodeFree( xbIxNode * ixNode );
+ virtual xbInt16 ReadHeadBlock( xbInt16 iOpt = 0 ) = 0;
+ virtual void SetDbf( xbDbf *dbf );
+ virtual xbInt16 SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr ) = 0;
+ virtual xbInt16 SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr ) = 0;
+ virtual xbInt16 UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo = 0 ) = 0;
+ virtual xbInt16 WriteHeadBlock( xbInt16 iOption ) = 0;
+
+ xbDbf *dbf;
+ char *cNodeBuf; // pointer to memory for processing in a block of index data
+ void *vpCurTag; // pointer to active tag. Single index files have only one tag
+
+ private:
+ virtual void AppendNodeChain( void *vpTag, xbIxNode *npNode ) = 0;
+ virtual xbInt16 GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr ) const = 0;
+ virtual xbBool IsLeaf( void *vpTag, xbIxNode *npNode ) const = 0;
+ // virtual void SetCurNode( void *vpTag, xbIxNode *npNode ) = 0;
+
+ xbBool bLocked; // index file locked?
+};
+
+#ifdef XB_NDX_SUPPORT
+
+#define XB_NDX_BLOCK_SIZE 512
+
+
+///@cond DOXYOFF
+struct XBDLLEXPORT xbNdxTag {
+
+ // NDX File Header Fields
+ xbUInt32 ulRootBlock; // header node is 0
+ xbUInt32 ulTotalBlocks; // includes header node
+ char cKeyType; // C = Char, F = Numeric, D = Date
+ xbInt16 iKeyLen; // length of key data
+ xbInt16 iKeysPerBlock; // max number keys per block <=100
+ xbInt16 iKeyType; // 00 = Char, 01 = Numeric
+ xbInt16 iKeyItemLen; // KeyLen + 8 bytes
+ char cSerNo; // rolling incrementing serial number +1 on each index update
+ xbInt16 iUnique; // True if unique
+ xbString sKeyExpression; // index expression
+ // end of NDX Header field
+
+ xbExp *exp; // pointer to expression for expression keys
+ time_t tNodeChainTs; // node chain time stamp
+ xbIxNode *npNodeChain;
+ xbIxNode *npCurNode;
+ char *cpKeyBuf; // key buffer, for searches and adds
+ char *cpKeyBuf2; // key buffer, for deletes
+ xbString sTagName; // tag name - is the file name without the extension
+// xbInt16 iKeyUpdated; // key updated? set in method KeyUpdated, checked in AddKey and DeleteKey routines
+ xbBool bFoundSts; // key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey
+
+
+ xbInt16 iKeySts; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines
+ // old key filtered new key filtered iKeySts
+ // Y Y XB_UPD_KEY 2 - update key if changed (delete and add)
+ // Y N XB_DEL_KEY 3 - delete key
+ // N Y XB_ADD_KEY 1 - add key
+ // N N 0 - no update
+
+};
+///@endcond DOXYOFF
+
+//! @brief Class for handling NDX single tag indices.
+/*!
+
+The xbIxNdx class is derived from the xbIx base class and is specific to handling NDX single tag index files.
+Each NDX index file can have only one tag, but the methods are set up to take an argument for a specific tag.
+This was done in order to provide a consistant interface across index types.
+
+Calls to the ndx index routines to perform index updates are handled automatically be the dbf class after
+the ndx file has been opened.
+
+Xbase64 provides a mechanism to automatically open ndx files when a dbf file is opened.
+If the ndx file has been associated with the dbf file with the metadata routines,
+it will be opened automatically when the dbf file is opened.
+If there are non prod ndx indices that are not associated with the dbf file, the application
+program will need to open as appropriate.
+The meta data association logic is specific to the Xbase64 library and is not applicable to
+other available tools that handle ndx indices.
+
+*/
+
+class XBDLLEXPORT xbIxNdx : public xbIx {
+ public:
+ xbIxNdx( xbDbf * d );
+ ~xbIxNdx();
+ xbInt16 CheckTagIntegrity( void *vpTag, xbInt16 iOpt );
+ xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag );
+// xbInt16 DeleteTag( void *vpTag );
+ xbInt16 FindKey( void *vpTag, const void *vpKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
+ xbInt16 GetFirstKey( void *vpTag, xbInt16 iRetrieveSw );
+
+ xbInt16 GetLastKey( void *vpTag, xbInt16 iRetrieveSw = 1 );
+ xbInt16 GetNextKey( void *vpTag, xbInt16 iRetrieveSw = 1 );
+ xbInt16 GetPrevKey( void *vpTag, xbInt16 iRetrieveSw = 1 );
+ xbInt32 GetKeyLen ( const void *vpTag ) const;
+ char GetKeyType ( const void *vpTag ) const;
+ xbString &GetKeyExpression( const void *vpTag ) const;
+ xbString &GetKeyFilter( const void *vpTag ) const;
+ void *GetTag( xbInt16 iTagNo ) const;
+ void *GetTag( xbString &sTagName ) const;
+ xbString &GetTagName( void *vpTag ) const;
+ const char * GetTagName( void *vpTag, xbInt16 iOpt ) const;
+
+ xbInt16 GetTagCount() const;
+ xbBool GetUnique( void *vpTag = NULL ) const;
+ xbBool GetSortOrder( void *vpTag ) const;
+ xbInt16 Reindex( void **vpTag );
+ xbInt16 SetCurTag( xbInt16 iTagNo );
+ xbInt16 SetCurTag( xbString &sTagName );
+
+
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, void *vpTag = NULL );
+ xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmt = 0 );
+ xbInt16 DumpIxForTag( void *vpTag, xbInt16 iOutputOpt );
+ void DumpIxNodeChain( void *vpTag, xbInt16 iOutputOpt ) const;
+ xbInt16 DumpNode( void * vpTag, xbIxNode * pNode, xbInt16 iOption ) const;
+ #endif
+
+ protected:
+ friend class xbDbf;
+ xbInt16 AddKey( void *vpTag, xbUInt32 ulRecNo );
+ xbIxNode *AllocateIxNode( xbUInt32 ulBufSize = 0, xbInt16 iOption = 0 );
+ xbInt16 CheckForDupKey( void *vpTag );
+ xbIxNode *CreateIxNode( xbUInt32 ulBufSize );
+ xbInt16 CreateKey( void * vpTag, xbInt16 iOpt );
+ xbInt16 DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );
+ xbInt16 DeleteKey( void *vpTag );
+
+ xbInt16 DeleteTag( void *vpTag );
+
+ xbInt16 FindKeyForCurRec( void *vpTag );
+// xbBool GetIndexUpdated() const;
+ xbInt16 GetKeyTypeN( const void *vpTag ) const;
+ xbInt16 GetKeySts( void *vpTag ) const;
+ xbInt16 GetLastKey( xbUInt32 ulNodeNo, void *vpTag, xbInt16 iRetrieveSw = 1 );
+ xbInt16 InsertNodeI( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );
+ xbInt16 InsertNodeL( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 uiPtr );
+ xbInt16 KeyExists( void *vpTag = NULL );
+// xbBool KeyFiltered( void *vpTag ) const;
+// xbInt16 KeyUpdated( void *vpTag ) const;
+ xbInt16 ReadHeadBlock(xbInt16 iOpt); // read the header node of the disk NDX file
+ xbInt16 SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );
+ xbInt16 SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr );
+ xbInt16 UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo = 0 );
+ xbInt16 WriteHeadBlock( xbInt16 iOption );
+
+ private:
+ xbInt16 AddKeyNewRoot( xbNdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );
+ void AppendNodeChain( void *vpTag, xbIxNode *npNode );
+ xbInt16 GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulDbfPtr ) const;
+ xbInt16 GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr ) const;
+ xbInt16 GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpKeyBuf );
+ xbBool IsLeaf( void *vpTag, xbIxNode *npNode ) const;
+ xbInt16 KeySetPosAdd( xbNdxTag *npTag, xbUInt32 ulAddKeyRecNo );
+ xbInt16 KeySetPosDel( xbNdxTag *npTag );
+ // void SetCurNode( void *vpTag, xbIxNode *np );
+ xbNdxTag *ndxTag;
+};
+
+#endif /* XB_NDX_SUPPORT */
+
+
+#ifdef XB_MDX_SUPPORT
+//#define XB_MDX_BLOCK_SIZE 1024
+
+struct XBDLLEXPORT xbMdxTag {
+
+ // next 7 fields comprise the tag table entry
+ xbUInt32 ulTagHdrPageNo; // 512 byte page number, NOT block number
+ char cTagName[11];
+ char cKeyFmt; // always 0x10 w/ DBase V7
+ char cLeftChild; // cFwdTagThread
+ char cRightChild; // cFwdTagThread2
+ char cParent; // cBwdTagThread
+ char c2;
+ char cKeyType; // C,D,N
+
+ xbUInt32 ulRootPage; // 512 byte page number, NOT block number
+ xbUInt32 ulTagSize; // Number of 512 byte pages allocated to the tag. Tag size of two is a single 1024 block
+
+ char cKeyFmt2; // 0x10 - base
+ // 0x08 - descending
+ // 0x40 - unique
+ char cKeyType2;
+ // one unused byte fits here
+
+ char cTag11; // dbase sets to 0x1B
+
+ xbInt16 iKeyLen;
+ xbInt16 iKeysPerBlock;
+ xbInt16 iSecKeyType;
+ xbInt16 iKeyItemLen; // iKeyLen + 4
+
+ char cSerialNo; // Increments +1 for each tag update
+ char cUnique;
+ xbString *sKeyExp; // Key expression
+
+ char cHasFilter; // 0x00 or 0x01
+ char cHasKeys; // 0x00 or 0x01
+
+ xbUInt32 ulLeftChild; // dbase 7 sets this to the root page on tag creation
+ xbUInt32 ulRightChild; // dbase 7 sets this to the root page on tag creation
+
+ char cTagYY;
+ char cTagMM;
+ char cTagDD;
+
+ char cKeyFmt3; // dbase 7 sets this 0x01 if discreet field or 0x00 if calculated or combination field key expression on tag creation
+
+ xbString *sFiltExp; // Filter expression
+
+ time_t tNodeChainTs;
+ xbIxNode *npNodeChain;
+ xbIxNode *npCurNode;
+ xbExp *exp; // pointer to expression for expression based tags
+ xbExp *filter; // pointer to expression for index filter
+
+ char *cpKeyBuf; // key buffer
+ char *cpKeyBuf2; // key buffer
+// xbBool iKeyUpdated; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines
+ // 0 - no update
+ // 1 - Add
+ // 2 - Update
+ // 3 - Delete
+// xbBool bKeyFiltered; // key filtered? True if included key, False if excluded key. Set in method CreateKey, checked in AddKey and DeleteKey routines
+ xbString *sTagName; // string tag name
+
+
+ xbMdxTag *next;
+ xbBool bFoundSts; // key found? used to determine if new key should be added in XB_EMULATE_DBASE mode in AddKey
+
+
+ xbInt16 iKeySts; // key updated? set in method CreateKey, checked in AddKey and DeleteKey routines
+ // old key filtered new key filtered iKeySts
+ // Y Y XB_UPD_KEY 2 - update key if changed (delete and add)
+ // Y N XB_DEL_KEY 3 - delete key
+ // N Y XB_ADD_KEY 1 - add key
+ // N N 0 - no update
+
+
+};
+
+
+class XBDLLEXPORT xbIxMdx : public xbIx {
+ public:
+ xbIxMdx( xbDbf * d );
+ ~xbIxMdx();
+ xbInt16 CheckTagIntegrity( void *vpTag, xbInt16 iOpt );
+ xbInt16 CreateTag( const xbString &sName, const xbString &sKey, const xbString &sFilter, xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverlay, void **vpTag );
+// xbInt16 DeleteTag( void *vpTag );
+ xbInt16 FindKey( void *vpTag, const void *vKey, xbInt32 lKeyLen, xbInt16 iRetrieveSw );
+ xbInt16 FindKey( void *vpTag, xbDouble dKey, xbInt16 iRetrieveSw );
+ xbInt16 GetFirstKey( void *vpTag, xbInt16 lRetrieveSw );
+ xbString &GetKeyExpression( const void *vpTag ) const;
+ xbString &GetKeyFilter( const void *vpTag ) const;
+ char GetKeyType( const void *vpTag ) const;
+ xbInt16 GetLastKey( void *vpTag, xbInt16 lRetrieveSw );
+ xbInt16 GetNextKey( void *vpTag, xbInt16 lRetrieveSw );
+ xbInt16 GetPrevKey( void *vpTag, xbInt16 lRetrieveSw );
+ xbBool GetReuseEmptyNodesSw() const;
+ xbBool GetSortOrder( void *vpTag ) const;
+ void *GetTag( xbInt16 iTagNo ) const;
+ void *GetTag( xbString &sTagName ) const;
+ xbInt16 GetTagCount() const;
+
+ xbString &GetTagName( void *vpTag ) const;
+ const char * GetTagName( void *vpTag, xbInt16 iOpt ) const;
+ void GetTagName( void *vpTag, xbString &sTagName );
+
+ xbInt16 GetUnique( void *vpTag ) const;
+ xbInt16 Reindex( void **vpTag );
+ xbInt16 SetCurTag( xbInt16 iTagNo );
+ xbInt16 SetCurTag( xbString &sTagName );
+ void SetReuseEmptyNodesSw( xbBool bReuse );
+
+ void TestStub( char *s, void *vpTag );
+
+ protected:
+ friend class xbDbf;
+
+ xbInt16 AddKey( void *vpTag, xbUInt32 ulRecNo );
+ xbIxNode *AllocateIxNode( xbMdxTag * mpTag, xbUInt32 ulBufSize, xbUInt32 ulBlock2 );
+ xbInt16 CheckForDupKey( void *vpTag );
+ xbInt16 Close();
+ xbInt16 CreateKey( void * vpTag, xbInt16 iOpt );
+ xbInt16 DeleteFromNode( void *vpTag, xbIxNode * npNode, xbInt16 iSlotNo );
+ xbInt16 DeleteKey( void *vpTag );
+
+ xbInt16 DeleteTag( void *vpTag );
+
+ xbInt16 FindKeyForCurRec( void *vpTag );
+ xbInt16 GetKeySts( void *vpTag ) const;
+ xbInt16 GetLastKey( xbUInt32 ulBlockNo, void *vpTag, xbInt16 lRetrieveSw );
+ void *GetTagTblPtr() const;
+ void Init( xbInt16 iOpt = 0 );
+ xbInt16 InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xbUInt32 uiPtr );
+ xbInt16 InsertNodeL( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr );
+ xbInt16 KeyExists( void * );
+ xbInt16 LoadTagTable();
+ xbInt16 ReadHeadBlock(xbInt16 iOpt); // read the header node of the disk file
+ xbInt16 SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, xbUInt32 uiPtr );
+ xbInt16 SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight, xbInt16 iSlotNo, char *cpKeyBuf, xbUInt32 uiPtr );
+ xbInt16 UpdateTagKey( char cAction, void *vpTag, xbUInt32 ulRecNo = 0 );
+ xbInt16 WriteHeadBlock( xbInt16 iOption );
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 DumpTagBlocks( xbInt16 iOpt = 1, void *vpTag = NULL );
+ xbInt16 DumpFreeBlocks( xbInt16 iOpt = 0 );
+ xbInt16 DumpHeader( xbInt16 iOpt = 0, xbInt16 iFmtOpt = 0 );
+ xbInt16 DumpIxForTag( void *vpTag, xbInt16 iOutputOpt );
+ void DumpIxNodeChain( void *vpTag, xbInt16 iOutputOpt ) const;
+ #endif
+
+ private:
+ xbInt16 AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *npRight );
+ void AppendNodeChain( void *vpTag, xbIxNode *npNode );
+ xbUInt32 BlockToPage( xbUInt32 ulBlockNo );
+ void CalcBtreePointers();
+ char CalcTagKeyFmt( xbExp &exp );
+ char CalcTagFwdThread1();
+ char CalcTagFwdThread2();
+ xbMdxTag *ClearTagTable();
+ xbInt16 DumpBlock( xbInt16 iOpt, xbUInt32 ulBlockNo, xbMdxTag * mpTag );
+ xbInt16 GetDbfPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulDbfPtr ) const;
+ xbInt16 GetKeyPtr( void *vpTag, xbInt16 iKeyNo, xbIxNode *npNode, xbUInt32 &ulKeyPtr ) const;
+ xbInt16 GetLastKeyForBlockNo( void *vpTag, xbUInt32 ulBlockNo, char *cpKeyBuf );
+ xbInt16 HarvestEmptyNode( xbMdxTag *mpTag, xbIxNode *npNode, xbInt16 iOpt, xbBool bHarvestRoot = xbFalse );
+ xbInt16 HarvestTagNodes( xbMdxTag *mpTag, xbBool bRecycleRoot = xbFalse );
+ xbBool IsLeaf( void *vpTag, xbIxNode *npNode ) const;
+ xbInt16 KeySetPosAdd( xbMdxTag *mpTag, xbUInt32 ulAddKeyRecNo );
+ xbInt16 KeySetPosDel( xbMdxTag *mpTag );
+ xbInt16 LoadTagDetail( xbInt16 iOption, xbMdxTag *tte );
+ xbUInt32 PageToBlock( xbUInt32 ulPageNo );
+ xbInt16 TagSerialNo( xbInt16 iOption, xbMdxTag *mpTag );
+ xbInt16 UpdateTagSize( xbMdxTag *mpTag, xbUInt32 ulTagSz );
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 PrintKey( void *vpTag, xbIxNode *npNode, xbInt16 iKeyNo, xbInt16 iDepth, char cType, xbInt16 iOutputOpt );
+ #endif
+
+ // MDX File Header Fields
+ char cVersion;
+ char cCreateYY;
+ char cCreateMM;
+ char cCreateDD;
+ xbString sFileName;
+ xbInt16 iBlockFactor; // 1-32 #of 512 byte segments in a block
+
+ // use file version
+ // xbInt16 iBlockSize; // Stored at the xbFile level
+
+ char cProdIxFlag;
+ char cTagEntryCnt;
+ xbInt16 iTagLen;
+ xbInt16 iTagUseCnt;
+ char cNextTag; // byte 28 +1
+ char c1B; // always 0x1B
+ xbUInt32 ulPageCnt; // number of 512 byte pages in the mdx file
+ xbUInt32 ulFirstFreePage; // page number corresponding to the next free block
+ xbUInt32 ulNoOfBlockAvail; // might be improperly named?? not sure how it is used
+ char cUpdateYY;
+ char cUpdateMM;
+ char cUpdateDD;
+ // end of MDX Header fields
+
+
+
+ xbMdxTag *mdxTagTbl;
+
+ xbBool bReuseEmptyNodes; // Reuese empty MDX nodes when all keys deleted?
+ // DBase 7.x and MS ODBC drivers do not reuse empty nodes, leaves them stranded in the file
+ // Codebase 6.x reuses empty nodes.
+ // Setting this to True will reuse empty nodes in the same manner Codebase 6.x reuses them.
+
+};
+#endif /* XB_MDX_SUPPORT */
+
+
+} /* namespace xb */
+#endif /* XB_INDEX_SUPPORT */
+#endif /* __XB_INDEX_H__ */
diff --git a/src/include/xblog.h b/src/include/xblog.h
index e78f476..5c7d721 100755
--- a/src/include/xblog.h
+++ b/src/include/xblog.h
@@ -44,13 +44,14 @@ class XBDLLEXPORT xbLog : public xbFile {
xbLog( const xbString &sLogFileName );
~xbLog();
- xbInt16 LogClose ();
- xbInt16 LogGetStatus ();
- xbInt16 LogOpen ();
- void LogSetStatus ( xbBool bLogStatus );
- void LogSetLogSize( size_t lSize ); // { LogSize = size; }
- xbInt16 LogWrite ( const xbString &LogEntry, xbInt16 iOutputOption = 0 );
- xbInt16 LogWriteBytes( xbUInt32 lByteCnt, const char *p );
+ xbInt16 LogClose ();
+ xbInt16 LogGetStatus ();
+ xbInt16 LogOpen ();
+ void LogSetStatus ( xbBool bLogStatus );
+ void LogSetLogSize( size_t lSize ); // { LogSize = size; }
+ xbInt16 LogWrite ( const xbString &LogEntry, xbInt16 iOutputOption = 0 );
+ xbInt16 LogWriteBytes( xbUInt32 lByteCnt, const char *p );
+ size_t LogGetLogSize() const { return lLogSize; }
private:
xbBool bLoggingStatus; // false = logging off
diff --git a/src/include/xbretcod.h b/src/include/xbretcod.h
index ec1f91b..f2885b1 100755
--- a/src/include/xbretcod.h
+++ b/src/include/xbretcod.h
@@ -24,9 +24,10 @@ namespace xb{
#define XB_NO_ERROR 0 // general
#define XB_NO_MEMORY -100 // general
#define XB_INVALID_OPTION -101 // general
+ #define XB_INVALID_PARAMETER -102 // general
#define XB_DUP_TABLE_OR_ALIAS -110 // table manager
#define XB_INVALID_NODELINK -120 // linklist
- #define XB_KEY_NOT_UNIQUE -121 // linklist
+ #define XB_KEY_NOT_UNIQUE -121 // linklist, index
#define XB_MEMCPY_ERROR -122 // memcpy failure
#define XB_FILE_EXISTS -200 // file
diff --git a/src/include/xbssv.h b/src/include/xbssv.h
index d050bcb..3b87a13 100755
--- a/src/include/xbssv.h
+++ b/src/include/xbssv.h
@@ -64,11 +64,19 @@ class XBDLLEXPORT xbSsv{
void DisplayError ( xbInt16 ErrorCode ) const;
xbString& GetDefaultDateFormat () const;
xbString& GetDataDirectory () const;
- xbInt16 GetEndianType () const;
+ xbString& GetTempDirectory () const;
+
+ void GetHomeDir ( xbString &sHomeDirOut );
+
+ xbInt16 GetEndianType () const;
const char *GetErrorMessage ( xbInt16 ErrorCode ) const;
+ char GetPathSeparator () const;
+
void SetDataDirectory ( const xbString &sDataDirectory );
void SetDefaultDateFormat ( const xbString &sDefaultDateFormat );
+ void SetTempDirectory ( const xbString &sTempDirectory );
+
xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
void BitDump ( unsigned char c ) const;
@@ -77,11 +85,11 @@ class XBDLLEXPORT xbSsv{
xbBool GetDefaultAutoCommit () const;
void SetDefaultAutoCommit ( xbBool bDefaultAutoCommit );
- void GetHomeDir ( xbString &sHomeDirOut );
-
xbString& GetLogDirectory () const;
xbString& GetLogFileName () const;
void SetLogDirectory ( const xbString &sLogDirectory );
+ void SetLogFileName ( const xbString &sLogFileName );
+
xbBool GetMultiUser () const;
void SetMultiUser ( xbBool bMultiUser );
@@ -127,10 +135,11 @@ class XBDLLEXPORT xbSsv{
static xbString sDefaultDateFormat;
static xbString sDataDirectory; //Data file directory
+ static xbString sTempDirectory; //Temp file directory
#ifdef XB_LOGGING_SUPPORT
- static xbString sLogDirectory; //Default location to store log files
- static xbString sLogFileName; //Default LogFileName
+ static xbString sLogDirectory; //Default location to store log files
+ static xbString sLogFileName; //Default LogFileName
#endif
static xbInt16 iDefaultFileVersion; // 3 = DBase 3
diff --git a/src/include/xbstring.h b/src/include/xbstring.h
index 3e70acc..7fe1692 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 lCopyLen );
- xbString &Assign(const xbString &s, xbUInt32 lCopyLen );
+ xbString &Assign(const xbString &s, xbUInt32 ulStartPos, xbUInt32 lCopyLen );
+ xbString &Assign(const xbString &s, xbUInt32 ulStartPos );
xbString Copy() const;
xbUInt32 CountChar( char c ) const;
@@ -112,7 +112,9 @@ class XBDLLEXPORT xbString {
void DumpHex( const char *title ) const;
#endif
+ xbString &ExtractElement(xbString &s, char delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );
xbString &ExtractElement(const char *src, char delim, xbUInt32 iCnt, xbInt16 iOpt = 0 );
+
char GetCharacter( xbUInt32 lPos ) const;
xbUInt32 GetLastPos(char c) const;
xbUInt32 GetLastPos(const char *s) const;
diff --git a/src/include/xbxbase.h b/src/include/xbxbase.h
index fe1f323..702da23 100755
--- a/src/include/xbxbase.h
+++ b/src/include/xbxbase.h
@@ -126,12 +126,13 @@ class XBDLLEXPORT xbXBase : public xbTblMgr{
~xbXBase();
xbInt16 CloseAllTables();
+ xbInt16 CreateFqn( const xbString &sDirIn, const xbString &sNameIn, const xbString &sExtIn, xbString &sFqfnOut );
void DisableMsgLogging();
void EnableMsgLogging ();
xbInt16 FlushLog();
- const xbString &GetLogDirectory () const;
- const xbString &GetLogFileName () const;
+ //const xbString &GetLogDirectory () const;
+ //const xbString &GetLogFileName () const;
const xbString &GetLogFqFileName() const;
xbBool GetLogStatus () const;
@@ -140,9 +141,13 @@ class XBDLLEXPORT xbXBase : public xbTblMgr{
xbDbf * Open( const xbString &sTableName, xbInt16 &iRc );
xbDbf * Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &iRc );
- void SetLogDirectory( const xbString &sLogFileDirectory );
- void SetLogFileName ( const xbString &sLogFileName );
+
+ // next three methods moved to xbssv for consistency
+ // void SetLogDirectory( const xbString &sLogFileDirectory );
+ // void SetLogFileName ( const xbString &sLogFileName );
void SetLogSize ( size_t lSize );
+ size_t GetLogSize () const;
+
xbInt16 WriteLogMessage( const xbString &sLogMessage, xbInt16 iOutputOpt = 0 );
xbInt16 WriteLogBytes ( xbUInt32 lCnt, const char *p );
diff --git a/src/sql/xbcrix.cpp b/src/sql/xbcrix.cpp
index 6a391f7..8efdc39 100755
--- a/src/sql/xbcrix.cpp
+++ b/src/sql/xbcrix.cpp
@@ -66,6 +66,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
xbString sNode;
xbBool bUnique = xbFalse;
xbDbf * dbf = NULL;
+ xbBool bTableLocked = xbFalse;
try{
@@ -113,6 +114,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
xbFile f( xbase );
f.SetFileName( sIxName );
if( f.FileExists()){
+
iErrorStop = 110;
iRc = XB_FILE_EXISTS;
throw iRc;
@@ -140,12 +142,14 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
// if not open, attempt to open it
dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
+
if( !dbf ){
if(( iRc = xbase->OpenHighestVersion( sTableName, "", &dbf )) != XB_NO_ERROR ){
iErrorStop = 120;
throw iRc;
}
}
+
if( dbf == NULL ){
iErrorStop = 130;
iRc = XB_FILE_NOT_FOUND;
@@ -153,8 +157,6 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
}
sCmd.Ltrunc( ulPos );
- // std::cout << "cp1 ulPos = " << ulPos << " sCmd = [" << sCmd << "]\n";
-
//ulPos = sCmd.GetLastPos( ')' );
xbString sKeyExpression;
xbBool bDone = xbFalse;
@@ -181,7 +183,6 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
}
// std::cout << "Key Expression =[" << sKeyExpression << "]\n";
-
sCmd.Ltrunc( lPos );
sCmd.Trim();
@@ -199,7 +200,6 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
}
}
-
// std::cout << "sCmd - looking for FILTER stuff [" << sCmd << "]\n";
xbString sFilter;
if( sCmd.Len() > 6 ){
@@ -218,11 +218,11 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
iErrorStop = 140;
throw iRc;
+ } else {
+ bTableLocked = xbTrue;
}
#endif // XB_LOCKING_SUPPORT
- // std::cout << "SqlCreateIndex() - ixtype = " << sIxType << "\n";
-
xbIx *pIx;
void *vpTag;
@@ -230,14 +230,16 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
iErrorStop = 150;
throw iRc;
}
- // std::cout << "SqlCreateIndex() - back from tag create\n";
+
#ifdef XB_NDX_SUPPORT
+ xbBool bAssociate = xbFalse;
if( sIxType == "NDX"){
sCmd.Ltrunc( ulPos );
sCmd.Trim();
if( sCmd.Len() > 0 ){
sCmd.ToUpperCase();
if( sCmd.Pos( "ASSOCIATE" )){
+ bAssociate = xbTrue;
if(( iRc = dbf->AssociateIndex( "NDX", sIxName, 0 )) != XB_NO_ERROR ){
iErrorStop = 160;
throw iRc;
@@ -245,25 +247,36 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
}
}
}
-// if( sIxType == "NDX"){
-// if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
-// iErrorStop = 160;
-// throw iRc;
-// }
-// }
#endif // XB_NDX_SUPPORT
+ iRc = dbf->Reindex( 2, 1, &pIx, &vpTag );
- if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
- iErrorStop = 170;
+ #ifdef XB_NDX_SUPPORT
+ if( iRc != XB_NO_ERROR && sIxType == "NDX" && bAssociate ){
+ xbInt16 iRc2;
+ if(( iRc2 = dbf->AssociateIndex( "NDX", sIxName, 1 )) != XB_NO_ERROR ){
+ iErrorStop = 180;
+ throw iRc2;
+ }
+ iErrorStop = 190;
+ throw iRc;
+ }
+ #endif // XB_NDX_SUPPORT
+
+ if( iRc != XB_NO_ERROR ){
+ iErrorStop = 200;
throw iRc;
}
#ifdef XB_LOCKING_SUPPORT
- if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 180;
- throw iRc;
+ if( bTableLocked ){
+ if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 210;
+ throw iRc;
+ } else {
+ bTableLocked = xbFalse;
+ }
}
#endif // XB_LOCKING_SUPPORT
@@ -273,11 +286,10 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
sMsg.Sprintf( "xbSql::SqlCreateIndex() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
-
}
-
#ifdef XB_LOCKING_SUPPORT
- dbf->LockTable( XB_UNLOCK );
+ if( bTableLocked && dbf )
+ dbf->LockTable( XB_UNLOCK );
#endif // XB_LOCKING_SUPPORT
return iRc;
diff --git a/src/sql/xbcrtbl.cpp b/src/sql/xbcrtbl.cpp
index dfb3403..e22b0b5 100755
--- a/src/sql/xbcrtbl.cpp
+++ b/src/sql/xbcrtbl.cpp
@@ -69,8 +69,8 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
sTableName.ExtractElement( s, ' ', 3, 0 );
sTableName.Trim();
- // std::cout << "Tablename = [" << sTableName << "]\n";
-
+// std::cout << "Create table - Tablename = [" << sTableName.Str() << "]\n";
+// std::cout << "Cm line = [" << sCmdLine.Str() << "]\n";
// determine if it already exists
xbFile f( xbase );
@@ -160,17 +160,21 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
if( iAttribCnt == 1 ){
sAttrib1 = sWork;
} else {
+
lCmPos = sWork.Pos( ',' );
if( lCmPos <= 0 ){
iErrorStop = 140;
iRc = XB_INVALID_FIELD_LEN;
throw iRc;
}
+
sAttrib1.Assign( sWork, 1, lCmPos - 1);
sAttrib1.Trim();
+
sWork.Ltrunc( lCmPos );
sAttrib2 = sWork;
sAttrib2.Trim();
+
}
s.Ltrunc( lPos );
}
@@ -239,13 +243,15 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
#elif defined (XB_DBF3_SUPPORT)
dbf = new xbDbf3( xbase );
#endif
+
if(( iRc = dbf->CreateTable( sTableName, "", schema, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
iErrorStop = 150;
throw iRc;
}
-
free( schema );
+
ll.Clear();
+
}
catch (xbInt16 iRc ){
xbString sMsg;
@@ -258,6 +264,7 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
xbase->WriteLogMessage( GetErrorMessage( iRc ));
if( schema ) free( schema );
}
+
return iRc;
}
diff --git a/src/sql/xbcrtbl.save.cpp b/src/sql/xbcrtbl.save.cpp
deleted file mode 100755
index 445ad56..0000000
--- a/src/sql/xbcrtbl.save.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/* xbcrtbl.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2019,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-#ifdef XB_SQL_SUPPORT
-
-namespace xb{
-
-
-/***********************************************************************/
-xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
-
-
- // std::cout << "CREATE TABLE " << sCmdLine << std::endl;
-
- // expected format:
- // CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... )
-
- // supported field types
- //
- // SQL TYPE XBASE Field Type
- // -------- ----------------
- // SMALLINT NUMERIC(6,0)
- // INTEGER NUMERIC(11,0)
- // DECIMAL(x,y) NUMERIC(x+1,y)
- // NUMERIC(x,y) NUMERIC(x,y)
- // FLOAT(x,y) FLOAT(x,y)
- // CHAR(n) CHARACTER(n)
- // DATE DATE
- // VARCHAR MEMO
- // LOGICAL LOGICAL
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- xbString sTableName;
- xbString sFieldName;
- xbString sDataType;
- xbString sAttrib1;
- xbString sAttrib2;
- xbString sLlEntry;
- xbInt16 iType = 0;
- xbInt16 iAttribCnt; // number of attributes for a given data type
- xbString s;
- xbUInt32 lPos = 0;
- xbUInt32 lSpPos = 0; // space position
- xbUInt32 lCmPos = 0; // comma position
- xbUInt32 lLpPos = 0; // left paren position
- xbLinkList<xbString> ll;
- xbSchema *schema = NULL;
- xbString sMsg;
-
- try{
- // retrieve table name
- s.ExtractElement( sCmdLine, '(', 1, 0 );
- sTableName.ExtractElement( s, ' ', 3, 0 );
- sTableName.Trim();
-
- // std::cout << "Tablename = [" << sTableName << "]\n";
-
-
- // determine if it already exists
- xbFile f( xbase );
- f.SetFileName( sTableName );
- if( f.FileExists() ){
- iErrorStop = 100;
- iRc = XB_FILE_EXISTS;
- throw iRc;
- }
-
- // build out table structure with parms from the sql string
- lPos = sCmdLine.Pos( '(' );
- s = sCmdLine;
- s.Ltrunc( lPos );
- s.Trim();
-
- // remove the last byte, should be a )
- s.Remove( s.Len(), 1 );
-
- s.Trim();
- //std::cout << "s = [" << s << "]\n";
-
-
- xbBool bDone = xbFalse;
- xbInt16 iLoop = 0;
- while( !bDone && iLoop++ < 255 ){
- sFieldName.ExtractElement( s, ' ', 1 , 0 );
- lPos = sFieldName.Len();
- sFieldName.Trim();
- if( sFieldName.Len() > 10 )
- sFieldName.Mid( 1, 10 ); // shrink to 10 buytes if too big
-
- //std::cout << "field name=[" << sFieldName << "]\n";
- s.Ltrunc( lPos + 1 );
- s.Ltrim();
- //std::cout << "remainder after field name removed = [" << s << "]\n";
-
- // Data type is delimited with either a space, comma or left paren
- lPos = 9999999;
- lSpPos = s.Pos( ' ' );
- lCmPos = s.Pos( ',' );
- lLpPos = s.Pos( '(' );
- if( lSpPos != 0 ) lPos = lSpPos;
- if( lCmPos != 0 && lCmPos < lPos ) lPos = lCmPos;
- if( lLpPos != 0 && lLpPos < lPos ) lPos = lLpPos;
-
- //sMsg.Sprintf( "SpPos=[%d] CmPos=[%d] LpPos=[%d] lPos=[%d]", lSpPos, lCmPos, lLpPos, lPos );
- //std::cout << sMsg << "\n";
-
- sDataType.Assign( s, 1, lPos-1 );
-
- //std::cout << "DataType=[" << sDataType << "]\n";
- if( sDataType == "CHAR" )
- iAttribCnt = 1;
- else if( sDataType == "DECIMAL" || sDataType == "NUMERIC" || sDataType == "FLOAT" )
- iAttribCnt = 2;
- else if( sDataType == "SMALLINT" || sDataType == "INTEGER" || sDataType == "DATE" || sDataType == "VARCHAR" || sDataType == "LOGICAL" )
- iAttribCnt = 0;
- else{
- iErrorStop = 110;
- iRc = XB_INVALID_FIELD_TYPE;
- throw iRc;
- }
-
- sAttrib1 = "";
- sAttrib2 = "0";
-
- if( iAttribCnt == 0 ){
- s.Ltrunc( sDataType.Len());
-
- } else if( iAttribCnt > 0 ){
- lPos = s.Pos( '(' );
- if( lPos <= 0 ){
- iErrorStop = 110;
- iRc = XB_INVALID_FIELD_LEN;
- throw iRc;
- }
- s.Ltrunc( lPos );
- if( iAttribCnt == 1 )
- lPos = s.Pos( ')' );
- else
- lPos = s.Pos( ',' );
-
- sAttrib1.Assign( s, 1, lPos-1 );
- sAttrib1.Trim();
- s.Ltrunc( lPos );
-
- if( iAttribCnt > 1 ){
- lPos = s.Pos( ')' );
- sAttrib2.Assign( s, 1, lPos-1 );
- s.Ltrunc( lPos );
- }
- }
-
- s.Ltrim();
- s.ZapLeadingChar( ',' );
- s.Ltrim();
-
- if( sDataType == "CHAR" ){
- iType = XB_CHAR_FLD;
- } else if( sDataType == "DECIMAL" ){
- xbInt32 lVal = atol( sAttrib1.Str()) + 1;
- sAttrib1.Sprintf( "%d", lVal );
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "SMALLINT" ){
- sAttrib1 = "6";
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "INTEGER" ){
- sAttrib1 = "11";
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "NUMERIC" ){
- iType = XB_NUMERIC_FLD;
- } else if( sDataType == "FLOAT" ) {
- iType = XB_FLOAT_FLD;
- } else if( sDataType == "DATE" ){
- iType = XB_DATE_FLD;
- sAttrib1 = "8";
- } else if( sDataType == "VARCHAR" ){
- iType = XB_MEMO_FLD;
- sAttrib1 = "10";
- } else if( sDataType == "LOGICAL" ){
- iType = XB_LOGICAL_FLD;
- sAttrib1 = "1";
- }
- sLlEntry.Sprintf( "%s,%s,%c,%s,%s", sFieldName.Str(), sDataType.Str(), iType, sAttrib1.Str(), sAttrib2.Str());
- ll.InsertAtEnd( sLlEntry );
-
- if( s.Len() == 0 )
- bDone = xbTrue;
- }
-
- schema = (xbSchema *) calloc( ll.GetNodeCnt()+1, sizeof( xbSchema ));
- xbLinkListNode<xbString> * llN = ll.GetHeadNode();
- xbUInt32 ulCnt = ll.GetNodeCnt();
-
- char *pTrg;
- for( xbUInt32 i = 0; i < ulCnt; i++ ){
- s = llN->GetKey();
- sFieldName.ExtractElement( s, ',', 1 , 0 );
- pTrg = schema[i].cFieldName;
- for( xbUInt32 j = 0; j < sFieldName.Len(); j++ )
- *pTrg++ = sFieldName[j+1];
- sDataType.ExtractElement( s, ',', 3, 0 );
- schema[i].cType = sDataType[1];
- sAttrib1.ExtractElement( s, ',', 4, 0 );
- schema[i].iFieldLen = atoi( sAttrib1.Str());
- sAttrib2.ExtractElement( s, ',', 5, 0 );
- schema[i].iNoOfDecs = atoi( sAttrib2.Str());
- llN = llN->GetNextNode();
- }
-
- // create the table
- xbDbf * dbf = NULL;
- #ifdef XB_DBF4_SUPPORT
- dbf = new xbDbf4( xbase );
- #elif defined (XB_DBF3_SUPPORT)
- dbf = new xbDbf3( xbase );
- #endif
- if(( iRc = dbf->CreateTable( sTableName, "", schema, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
- iErrorStop = 120;
- throw iRc;
- }
-
- free( schema );
- ll.Clear();
- }
- catch (xbInt16 iRc ){
- xbString sMsg;
- if( sFieldName.Len() > 0 )
- sMsg.Sprintf( "xbSql::SqlCreateTbl() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s] field = [%s]", iErrorStop, iRc, sTableName.Str(), sFieldName.Str() );
- else
- sMsg.Sprintf( "xbSql::SqlCreateTbl() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
-
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- if( schema ) free( schema );
- }
- return iRc;
-}
-
-/***********************************************************************/
-} /* namespace */
-#endif /* XB_SQL_SUPPORT */
-
diff --git a/src/sql/xbdelete.cpp b/src/sql/xbdelete.cpp
index 82b4937..9bd4279 100755
--- a/src/sql/xbdelete.cpp
+++ b/src/sql/xbdelete.cpp
@@ -134,7 +134,7 @@ xbInt16 xbSql::SqlDelete( const xbString &sCmdLine ){
catch (xbInt16 iRc ){
xbString sMsg;
- sMsg.Sprintf( "xbSql::SqlDropTable() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
+ sMsg.Sprintf( "xbSql::SqlDelete() Exception Caught. Error Stop = [%d] rc = [%d] table = [%s]", iErrorStop, iRc, sTableName.Str() );
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
diff --git a/src/sql/xbdrptbl.cpp b/src/sql/xbdrptbl.cpp
index b03ee8f..ee3e325 100755
--- a/src/sql/xbdrptbl.cpp
+++ b/src/sql/xbdrptbl.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -86,8 +86,10 @@ xbInt16 xbSql::SqlDropTable( const xbString &sCmdLine ){
dbf = xbase->GetDbfPtr( fDbf.GetFqFileName());
if( !dbf ){
- dbf = xbase->Open( sTableName, iRc );
- if( iRc != XB_NO_ERROR ){
+
+ //dbf = xbase->Open( sTableName, iRc );
+ iRc = xbase->OpenHighestVersion( sTableName, "", &dbf );
+ if( iRc != XB_NO_ERROR ){
if( iRc == XB_FILE_NOT_FOUND && bIfExists ){
return XB_NO_ERROR;
} else {
@@ -106,6 +108,9 @@ xbInt16 xbSql::SqlDropTable( const xbString &sCmdLine ){
iErrorStop = 130;
throw iRc;
}
+
+ delete dbf;
+ // dbf = NULL;
}
catch (xbInt16 iRc ){
diff --git a/src/tests/tstfuncs.cpp b/src/tests/tstfuncs.cpp
index d9b108d..377b199 100755
--- a/src/tests/tstfuncs.cpp
+++ b/src/tests/tstfuncs.cpp
@@ -415,7 +415,7 @@ xbInt16 SetCmd( xbXBase &x, const xbString &sFileName, const xbString &sCmd, con
#ifdef HAVE__FSOPEN_F
// 0x40 is SH_DENYNO or _SH_DENYNO
- if(( f = _fsopen( sFileName.Str(), "r", 0x40 )) == NULL){
+ if(( f = _fsopen( sFileName.Str(), "w", 0x40 )) == NULL){
x.xbSleep( 250 );
iTryCnt++;
}
diff --git a/src/tests/xb_test_date.cpp b/src/tests/xb_test_date.cpp
index 7aee584..0efe102 100755
--- a/src/tests/xb_test_date.cpp
+++ b/src/tests/xb_test_date.cpp
@@ -69,6 +69,8 @@ int main( int argCnt, char **av )
iRc += TestMethod( po, "FormatDate( '', sOutDate ) (sys default format)", d3.FormatDate( sFmt, sOutDate ), 0 );
iRc += TestMethod( po, "FormatDate( '', sOutDate ) (sys default format)", sOutDate, "07/09/12", 8 );
+
+
iRc += TestMethod( po, "CenturyOf()" , d3.CenturyOf(), 20 );
iRc += TestMethod( po, "YearOf()", d3.YearOf(), 2012 );
iRc += TestMethod( po, "MonthOf()", d3.MonthOf(), 7 );
@@ -84,12 +86,11 @@ int main( int argCnt, char **av )
d1.Set( "20010102" );
iRc += TestMethod( po, "d1.Set('20010102')", d1.Str(), "20010102", 8 );
- iRc += TestMethod( po, "d1.CalcRollingCenturyForYear(10)", d1.CalcRollingCenturyForYear( 10 ), 20 );
+ iRc += TestMethod( po, "d1.CalcRollingCenturyForYear(10)", d1.CalcRollingCenturyForYear( 10 ), 20 );
iRc += TestMethod( po, "d1.JulianDays()", d1.JulianDays(), 2451912 );
-
-
iRc += TestMethod( po, "d1.Set( '20140709' )", d1.Set( "20140709" ) , 0 );
+
d1.CharDayOf( s );
iRc += TestMethod( po, "d1.CharDayOf(s)", s, "Wednesday", 9 );
@@ -135,8 +136,8 @@ int main( int argCnt, char **av )
iRc+= TestMethod( po, "d1+2", d1+2, "20130407", 8 );
iRc+= TestMethod( po, "d1-5", d1-5, "20130402", 8 );
-// d1.Dump( "d1" );
-// d2.Dump( "d2" );
+ //d1.Dump( "d1" );
+ //d2.Dump( "d2" );
iRc+= TestMethod( po, "d1==d2", d1==d2, 0 );
d2 = d1;
@@ -159,6 +160,29 @@ int main( int argCnt, char **av )
iRc+= TestMethod( po, "d1<=d2", d1<=d2, 0 );
iRc+= TestMethod( po, "d1-d2", d1-d2, 1 );
+
+ // null date testing follows
+ iRc+= TestMethod( po, "IsNull", d1.IsNull(), xbFalse );
+ xbDate dN;
+ iRc+= TestMethod( po, "IsNull", dN.IsNull(), xbTrue );
+
+ xbDate dtNull1;
+ xbDate dtNull2;
+
+ iRc+= TestMethod( po, "dtNull1==dtNull2", dtNull1 == dtNull2, 1 );
+ iRc+= TestMethod( po, "dtNull1!=dtNull2", dtNull1 != dtNull2, 0 );
+
+ iRc+= TestMethod( po, "dtNull1 < d2", dtNull1 < d2, 1 );
+ iRc+= TestMethod( po, "dtNull1 > d2", dtNull1 > d2, 0 );
+ iRc+= TestMethod( po, "dtNull1 <= d2", dtNull1 <= d2, 1 );
+ iRc+= TestMethod( po, "dtNull1 >= d2", dtNull1 >= d2, 0 );
+
+ iRc+= TestMethod( po, "d2 < dtNull1", d2 < dtNull1, 0 );
+ iRc+= TestMethod( po, "d2 > dtNull1", d2 > dtNull1, 1 );
+ iRc+= TestMethod( po, "d2 <= dtNull1", d2 <= dtNull1, 0 );
+ iRc+= TestMethod( po, "d2 >= dtNull1", d2 >= dtNull1, 1 );
+
+
/*
xbDate d4( "20171015" );
std::cout << "day of [" << d4.Str() << "][" << d4.DayOf( XB_FMT_WEEK ) << "]\n";
diff --git a/src/tests/xb_test_dbf_v3_memos.cpp b/src/tests/xb_test_dbf_v3_memos.cpp
index e42edb1..7940c35 100755
--- a/src/tests/xb_test_dbf_v3_memos.cpp
+++ b/src/tests/xb_test_dbf_v3_memos.cpp
@@ -206,7 +206,6 @@ int main( int argCnt, char **av )
rc += TestMethod( po, "UpdateMemoField()", V3Dbf.UpdateMemoField( fldMemo2, sData ), XB_NO_ERROR );
rc += TestMethod( po, "AppendRecord()", V3Dbf.AppendRecord(), XB_NO_ERROR );
-
// Flag 1, 3, 5 and 7 for deletion
rc += TestMethod( po, "GetRecord()", V3Dbf.GetRecord( 1 ), XB_NO_ERROR );
rc += TestMethod( po, "DeleteRecord()", V3Dbf.DeleteRecord(), XB_NO_ERROR );
@@ -219,6 +218,7 @@ 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;
@@ -228,8 +228,8 @@ int main( int argCnt, char **av )
sDbfName.Sprintf( "%snewV3nm.DBF", sDir.Str());
sDbtName.Sprintf( "%snewV3nm.DBT", sDir.Str());
- std::cout << "remove [" << sDbfName.Str() << "\n";
- std::cout << "remove [" << sDbtName.Str() << "\n";
+ //std::cout << "remove [" << sDbfName.Str() << "]\n";
+ //std::cout << "remove [" << sDbtName.Str() << "]\n";
V3Dbf.xbRemove( sDbfName );
V3Dbf.xbRemove( sDbtName );
diff --git a/src/tests/xb_test_dbf_v4_nomemos.cpp b/src/tests/xb_test_dbf_v4_nomemos.cpp
index 984eb63..dd4976d 100755
--- a/src/tests/xb_test_dbf_v4_nomemos.cpp
+++ b/src/tests/xb_test_dbf_v4_nomemos.cpp
@@ -125,8 +125,22 @@ int main( int argCnt, char **av )
rc += TestMethod( po, "GetFieldNo()", V4Dbf.GetFieldNo("LASTNAME"), 1 );
rc += TestMethod( po, "GetFieldNo()", V4Dbf.GetFieldNo("MIDDLEINIT"), 2 );
+ xbBool bIsNull;
+ rc += TestMethod( po, "GetNullSts()", V4Dbf.GetNullSts( V4Dbf.GetFieldNo("LASTNAME"), bIsNull, 0 ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNullSts()", bIsNull, xbTrue );
+
+
+
xbInt16 fldLastName = V4Dbf.GetFieldNo( "LASTNAME" );
rc += TestMethod( po, "PutField()", V4Dbf.PutField( fldLastName, "NELSON" ), XB_NO_ERROR );
+
+ rc += TestMethod( po, "GetNullSts()", V4Dbf.GetNullSts( V4Dbf.GetFieldNo("LASTNAME"), bIsNull, 0 ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNullSts()", bIsNull, xbFalse );
+
+ rc += TestMethod( po, "GetNullSts()", V4Dbf.GetNullSts( V4Dbf.GetFieldNo("FIRSTNAME"), bIsNull, 0 ), XB_NO_ERROR );
+ rc += TestMethod( po, "GetNullSts()", bIsNull, xbTrue );
+
+
rc += TestMethod( po, "PutField()", V4Dbf.PutField( "FIRSTNAME", "WILLIE" ), XB_NO_ERROR );
rc += TestMethod( po, "PutField()", V4Dbf.PutField( "AMOUNT", "12.34" ), XB_NO_ERROR );
xbDate dt( "19500209" );
diff --git a/src/tests/xb_test_expression.cpp b/src/tests/xb_test_expression.cpp
index ac1cde7..52c0b5c 100755
--- a/src/tests/xb_test_expression.cpp
+++ b/src/tests/xb_test_expression.cpp
@@ -384,6 +384,8 @@ int main( int argCnt, char **av )
{ "CHAR2", XB_CHAR_FLD, 7, 0 },
{ "DATE1", XB_DATE_FLD, 8, 0 },
{ "DATE2", XB_DATE_FLD, 8, 0 },
+ { "NULLDATE1", XB_DATE_FLD, 8, 0 },
+ { "NULLDATE2", XB_DATE_FLD, 8, 0 },
{ "NUM1", XB_NUMERIC_FLD, 9, 2 },
{ "",0,0,0 }
};
@@ -391,6 +393,10 @@ int main( int argCnt, char **av )
xbXBase x;
xbDbf * MyFile;
xbDate d;
+ xbDate dtTest1( "19890303" );
+ xbDate dtTest2( "20120708" );
+
+
#ifdef XB_LOGGING_SUPPORT
x.SetLogDirectory( PROJECT_LOG_DIR );
@@ -412,8 +418,6 @@ int main( int argCnt, char **av )
std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
}
-// return 0;
-
#ifdef XB_DBF4_SUPPORT
MyFile = new xbDbf4( &x ); /* version 4 dbf file */
#else
@@ -421,13 +425,8 @@ int main( int argCnt, char **av )
#endif
-
-// return 0;
-
rc2 = MyFile->CreateTable( "ExpTest.DBF", "ExpTest", MyRecord, XB_OVERLAY, XB_MULTI_USER );
-// return 0;
-
iRc += TestMethod( po, "CreateTable()", rc2, XB_NO_ERROR );
iRc += TestMethod( po, "PutField()", MyFile->PutField( "CHAR1", "TEST" ), XB_NO_ERROR );
iRc += TestMethod( po, "PutField()", MyFile->PutField( "CHAR2", "TEST7B" ), XB_NO_ERROR );
@@ -437,8 +436,6 @@ int main( int argCnt, char **av )
iRc += TestMethod( po, "AppendRecord()", MyFile->AppendRecord(), XB_NO_ERROR );
-// return 0;
-
iRc += TestTokenMethod( &x, po, "EOX Test1", "", "", "", '?', XB_EXP_UNKNOWN, XB_NO_ERROR, XB_END_OF_EXPRESSION );
iRc += TestTokenMethod( &x, po, "EOX Test2 ", " ", "", "", '?', XB_EXP_UNKNOWN, XB_NO_ERROR, XB_END_OF_EXPRESSION );
@@ -634,49 +631,64 @@ int main( int argCnt, char **av )
iRc += TestMethod( &x, MyFile, po, "FuncTest41", "VAL( \"89\" )", (xbDouble) 89 );
iRc += TestMethod( &x, MyFile, po, "FuncTest42", "VAL( \"22.13 and some text\" )", (xbDouble) 22.13 );
iRc += TestMethod( &x, MyFile, po, "FuncTest43", "YEAR( STOD( \"20171017\" ))", (xbDouble) 2017 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest44", "CTOD( \"07\\08\\12\" )", dtTest2 );
+ xbDate dtToday;
+ dtToday.Sysdate();
+ iRc += TestMethod( &x, MyFile, po, "FuncTest45", "DATE()", dtToday );
+ dtTest2 = "28870625";
+ iRc += TestMethod( &x, MyFile, po, "FuncTest46", "DESCEND( DATE2 )", dtTest2 );
+ iRc += TestMethod( &x, MyFile, po, "FuncTest47", "STOD( \"19890303\" )", dtTest1 );
+
// date logic tests
- xbDate dtTest1( "19890303" );
- xbDate dtTest2( "20120708" );
+
iRc += TestMethod( &x, MyFile, po, "DateTest1", "ExpTest->DATE1", dtTest1 );
iRc += TestMethod( &x, MyFile, po, "DateTest2", "DATE1", dtTest1 );
+ dtTest2.Set( "20120708" );
iRc += TestMethod( &x, MyFile, po, "DateTest3", "ExpTest->DATE2", dtTest2 );
iRc += TestMethod( &x, MyFile, po, "DateTest4", "DATE2", dtTest2 );
iRc += TestMethod( &x, MyFile, po, "DateTest5", "DATE2 - DATE1", (xbDouble) 8528 );
+
dtTest1.Set( "20120705" );
iRc += TestMethod( &x, MyFile, po, "DateTest6", "DATE2 - 3", dtTest1 );
-
iRc += TestMethod( &x, MyFile, po, "DateTest7", "DATE2 -= 3", dtTest1 );
-
dtTest1.Set( "20120718" );
iRc += TestMethod( &x, MyFile, po, "DateTest8", "DATE2 + 10", dtTest1 );
iRc += TestMethod( &x, MyFile, po, "DateTest9", "DATE2 += 10", dtTest1 );
-
dtTest1.Set( "20120709" );
iRc += TestMethod( &x, MyFile, po, "DateTest10", "++DATE2", dtTest1 );
dtTest1.Set( "20120707" );
iRc += TestMethod( &x, MyFile, po, "DateTest11", "--DATE2", dtTest1 );
-
dtTest1.Set( "20120708" );
iRc += TestMethod( &x, MyFile, po, "DateTest12", "DATE2++", dtTest1 );
iRc += TestMethod( &x, MyFile, po, "DateTest13", "DATE2--", dtTest1 );
-
iRc += TestMethod( &x, MyFile, po, "DateTest14", "{07/08/12}", dtTest1 );
iRc += TestMethod( &x, MyFile, po, "DateTest15", "{07/08/2012}", dtTest1 );
-
iRc += TestMethod( &x, MyFile, po, "DateTest16", "{07/11/12} -3", dtTest1 );
iRc += TestMethod( &x, MyFile, po, "DateTest17", "{07/06/2012} + 2", dtTest1 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest44", "CTOD( \"07\\08\\12\" )", dtTest1 );
-
- xbDate dtToday;
- iRc += TestMethod( &x, MyFile, po, "FuncTest45", "DATE()", dtToday );
-
- dtTest2 = "28870625";
- iRc += TestMethod( &x, MyFile, po, "FuncTest46", "DESCEND( DATE2 )", dtTest2 );
- iRc += TestMethod( &x, MyFile, po, "FuncTest47", "STOD( \"20120708\" )", dtTest1 );
+ iRc += TestMethod( &x, MyFile, po, "DateTest18", "ExpTest->NULLDATE1 = {07/06/2012}", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest19", "ExpTest->NULLDATE1 != {07/06/2012}", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest20", "ExpTest->NULLDATE1 < {07/06/2012}", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest21", "ExpTest->NULLDATE1 <= {07/06/2012}", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest22", "ExpTest->NULLDATE1 > {07/06/2012}", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest23", "ExpTest->NULLDATE1 >= {07/06/2012}", (xbBool) xbFalse );
+
+ iRc += TestMethod( &x, MyFile, po, "DateTest24", "{07/06/2012} = ExpTest->NULLDATE1", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest25", "{07/06/2012} != ExpTest->NULLDATE1", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest26", "{07/06/2012} < ExpTest->NULLDATE1", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest27", "{07/06/2012} <= ExpTest->NULLDATE1", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest28", "{07/06/2012} > ExpTest->NULLDATE1", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest29", "{07/06/2012} >= ExpTest->NULLDATE1", (xbBool) xbTrue );
+
+ iRc += TestMethod( &x, MyFile, po, "DateTest18", "ExpTest->NULLDATE1 = ExpTest->NULLDATE2", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest19", "ExpTest->NULLDATE1 != ExpTest->NULLDATE2", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest20", "ExpTest->NULLDATE1 < ExpTest->NULLDATE2", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest21", "ExpTest->NULLDATE1 <= ExpTest->NULLDATE2", (xbBool) xbTrue );
+ iRc += TestMethod( &x, MyFile, po, "DateTest22", "ExpTest->NULLDATE1 > ExpTest->NULLDATE2", (xbBool) xbFalse );
+ iRc += TestMethod( &x, MyFile, po, "DateTest23", "ExpTest->NULLDATE1 >= ExpTest->NULLDATE2", (xbBool) xbTrue );
// boolean logic tests
iRc += TestMethod( &x, MyFile, po, "LogicTest1", "3=5", (xbBool) xbFalse );
diff --git a/src/tests/xb_test_file.cpp b/src/tests/xb_test_file.cpp
index cf835c2..0db6eca 100755
--- a/src/tests/xb_test_file.cpp
+++ b/src/tests/xb_test_file.cpp
@@ -27,24 +27,24 @@ using namespace xb;
int main( int argCnt, char **av )
{
- int rc = 0;
- int po = 1; /* print option */
+ int iRc = 0;
+ int iPo = 1; /* print option */
/* 0 - QUIET */
/* 1 - NORMAL */
/* 2 - VERBOSE */
if( argCnt > 1 ) {
if( av[1][0] == 'Q' )
- po = 0;
+ iPo = 0;
else if( av[1][0] == 'V' )
- po = 2;
+ iPo = 2;
}
xbXBase x;
#ifdef XB_LOGGING_SUPPORT
x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
- if( po ){
+ if( iPo ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
}
xbString sMsg;
@@ -65,14 +65,14 @@ int main( int argCnt, char **av )
sWrkStr.SwapChars( '\\', '/' );
#endif
- rc += TestMethod( po, "Set/GetDataDirectory()", f.GetDataDirectory(), sWrkStr, sWrkStr.Len());
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", f.GetDataDirectory(), sWrkStr, sWrkStr.Len());
f.SetFileName( "TestFile.txt" );
sWrkStr = "TestFile.txt";
- rc += TestMethod( po, "Set/GetFileName()", f.GetFileName(), sWrkStr, sWrkStr.Len());
+ iRc += TestMethod( iPo, "Set/GetFileName()", f.GetFileName(), sWrkStr, sWrkStr.Len());
f.GetFileType( sWrkStr );
- rc += TestMethod( po, "GetFileType()", sWrkStr, "TXT", 3 );
+ iRc += TestMethod( iPo, "GetFileType()", sWrkStr, "TXT", 3 );
#ifdef WIN32
sWrkStr = "\\my\\directory\\";
@@ -81,10 +81,10 @@ int main( int argCnt, char **av )
#endif
f.SetDirectory( sWrkStr );
- rc += TestMethod( po, "Set/GetDirectory()", f.GetDirectory(), sWrkStr, sWrkStr.Len());
+ iRc += TestMethod( iPo, "Set/GetDirectory()", f.GetDirectory(), sWrkStr, sWrkStr.Len());
sWrkStr += "TestFile.txt";
- rc += TestMethod( po, "GetFqFileName()", f.GetFqFileName(), sWrkStr, 26 );
+ iRc += TestMethod( iPo, "GetFqFileName()", f.GetFqFileName(), sWrkStr, 26 );
#ifdef WIN32
sWrkStr = "\\some\\directory\\myfile.dat";
@@ -95,115 +95,115 @@ int main( int argCnt, char **av )
#endif
f.SetFqFileName( sWrkStr );
- rc += TestMethod( po, "GetDirectory()", f.GetDirectory(), sWrkStr2, 16 );
- rc += TestMethod( po, "GetFileName()", f.GetFileName(), "myfile.dat", 10 );
+ iRc += TestMethod( iPo, "GetDirectory()", f.GetDirectory(), sWrkStr2, 16 );
+ iRc += TestMethod( iPo, "GetFileName()", f.GetFileName(), "myfile.dat", 10 );
- rc += TestMethod( po, "NameSuffixMissing()", f.NameSuffixMissing( "myfile.dbf", 1 ), 0 );
- rc += TestMethod( po, "NameSuffixMissing()", f.NameSuffixMissing( "myfile", 1 ), 1 );
- rc += TestMethod( po, "NameSuffixMissing()", f.NameSuffixMissing( "MYFILE", 1 ), 2 );
+ iRc += TestMethod( iPo, "NameSuffixMissing()", f.NameSuffixMissing( "myfile.dbf", 1 ), 0 );
+ iRc += TestMethod( iPo, "NameSuffixMissing()", f.NameSuffixMissing( "myfile", 1 ), 1 );
+ iRc += TestMethod( iPo, "NameSuffixMissing()", f.NameSuffixMissing( "MYFILE", 1 ), 2 );
f.SetDirectory( PROJECT_DATA_DIR );
f.SetFileName( "xbfile.txt" );
- rc += TestMethod( po, "xbFopen()", f.xbFopen( "w+b", XB_MULTI_USER ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFopen()", f.xbFopen( "w+b", XB_MULTI_USER ), XB_NO_ERROR );
xbString sTest;
sTest = "Test Data";
- rc += TestMethod( po, "xbWrite()", f.xbFwrite( sTest.Str(), 9, 1 ), XB_NO_ERROR );
- rc += TestMethod( po, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbWrite()", f.xbFwrite( sTest.Str(), 9, 1 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
- rc += TestMethod( po, "xbFopen()", f.xbFopen( "r+b", XB_MULTI_USER ), XB_NO_ERROR );
- rc += TestMethod( po, "xbFseek()", f.xbFseek( 0, SEEK_SET ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFopen()", f.xbFopen( "r+b", XB_MULTI_USER ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFseek()", f.xbFseek( 0, SEEK_SET ), XB_NO_ERROR );
char buf[10];
for( int i = 0; i < 10; i++ )
buf[i] = 0x00;
- rc += TestMethod( po, "xbFread()", f.xbFread( buf, 5, 1 ), XB_NO_ERROR );
- rc += TestMethod( po, "xbFread()", buf, "Test ", 5 );
+ iRc += TestMethod( iPo, "xbFread()", f.xbFread( buf, 5, 1 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFread()", buf, "Test ", 5 );
- rc += TestMethod( po, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
- rc += TestMethod( po, "xbRemove()", f.xbRemove(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbRemove()", f.xbRemove(), XB_NO_ERROR );
xbInt16 iWork = 100;
char cBuf[9];
char *p = cBuf;
f.ePutInt16( cBuf, iWork );
- rc += TestMethod( po, "Put/GetShort()", f.eGetInt16( p ), 100 );
+ iRc += TestMethod( iPo, "Put/GetShort()", f.eGetInt16( p ), 100 );
xbInt32 lWork = 10101;
f.ePutInt32( p, lWork );
- rc += TestMethod( po, "Put/GetLong()", f.eGetInt32( p ), 10101 );
+ iRc += TestMethod( iPo, "Put/GetLong()", f.eGetInt32( p ), 10101 );
lWork = 2147483647;
f.ePutInt32( p, lWork );
- rc += TestMethod( po, "Put/GetLong()", f.eGetInt32( p ), 2147483647 );
- rc += TestMethod( po, "Put/GetLong()", (xbInt32) f.eGetUInt32( p ), 2147483647 );
+ iRc += TestMethod( iPo, "Put/GetLong()", f.eGetInt32( p ), 2147483647 );
+ iRc += TestMethod( iPo, "Put/GetLong()", (xbInt32) f.eGetUInt32( p ), 2147483647 );
xbDouble d = 123456.789;
f.ePutDouble( p, d );
- rc += TestMethod( po, "Put/GetDouble()", f.eGetDouble( p ), 123456.789 );
+ iRc += TestMethod( iPo, "Put/GetDouble()", f.eGetDouble( p ), 123456.789 );
xbString sFqnS;
xbString sFqnT;
xbFile f2( &x );
- rc += TestMethod( po, "CreateUniqueFileName()", f2.CreateUniqueFileName( PROJECT_DATA_DIR, "dbf", sFqnS ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CreateUniqueFileName()", f2.CreateUniqueFileName( PROJECT_DATA_DIR, "dbf", sFqnS ), XB_NO_ERROR );
- rc += TestMethod( po, "FileExists()", f2.FileExists( sFqnS ), xbFalse );
- rc += TestMethod( po, "xbFopen()", f2.xbFopen( "w+b", sFqnS, XB_SINGLE_USER ), XB_NO_ERROR );
- rc += TestMethod( po, "xbFclose()", f2.xbFclose(), XB_NO_ERROR );
- rc += TestMethod( po, "FileExists()", f2.FileExists( sFqnS ), xbTrue );
+ iRc += TestMethod( iPo, "FileExists()", f2.FileExists( sFqnS ), xbFalse );
+ iRc += TestMethod( iPo, "xbFopen()", f2.xbFopen( "w+b", sFqnS, XB_SINGLE_USER ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFclose()", f2.xbFclose(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "FileExists()", f2.FileExists( sFqnS ), xbTrue );
- rc += TestMethod( po, "CreateUniqueFileName()", f2.CreateUniqueFileName( PROJECT_DATA_DIR, "dbf", sFqnT ), XB_NO_ERROR );
- rc += TestMethod( po, "xbRename()", f2.xbRename( sFqnS, sFqnT ), XB_NO_ERROR );
- rc += TestMethod( po, "xbRemove()", f.xbRemove( sFqnT ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CreateUniqueFileName()", f2.CreateUniqueFileName( PROJECT_DATA_DIR, "dbf", sFqnT ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbRename()", f2.xbRename( sFqnS, sFqnT ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbRemove()", f.xbRemove( sFqnT ), XB_NO_ERROR );
xbString sFn;
- rc += TestMethod( po, "GetFileNamePart()", f2.GetFileNamePart( sFqnS , sFn ), XB_NO_ERROR );
- rc += TestMethod( po, "GetFileExtPart()", f2.GetFileExtPart( sFqnS , sFn ), XB_NO_ERROR );
- rc += TestMethod( po, "GetFileExtPart()", f2.GetFileDirPart( sFqnS , sFn ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetFileNamePart()", f2.GetFileNamePart( sFqnS , sFn ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetFileExtPart()", f2.GetFileExtPart( sFqnS , sFn ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetFileExtPart()", f2.GetFileDirPart( sFqnS , sFn ), XB_NO_ERROR );
- 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 );
+ iRc += TestMethod( iPo, "SetBlockSize()", f.SetBlockSize( 100 ), XB_INVALID_BLOCK_SIZE );
+ iRc += TestMethod( iPo, "SetBlockSize()", f.SetBlockSize( 512 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetBlockSize()", (xbInt32) f.GetBlockSize(), 512 );
char BlockBuf[513];
memset( BlockBuf, 0x00, 513 );
- rc += TestMethod( po, "xbFopen()", f.xbFopen( "w+b", XB_SINGLE_USER ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbFopen()", f.xbFopen( "w+b", XB_SINGLE_USER ), XB_NO_ERROR );
for( int i = 0; i < 512; i++ )
BlockBuf[i] = 'A';
- rc += TestMethod( po, "WriteBlock()", f.WriteBlock( 0L, 512, BlockBuf ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "WriteBlock()", f.WriteBlock( 0L, 512, BlockBuf ), XB_NO_ERROR );
for( int i = 0; i < 512; i++ )
BlockBuf[i] = 'B';
- rc += TestMethod( po, "WriteBlock()", f.WriteBlock( 1L, 512, BlockBuf ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "WriteBlock()", f.WriteBlock( 1L, 512, BlockBuf ), XB_NO_ERROR );
for( int i = 0; i < 512; i++ )
BlockBuf[i] = 'C';
- rc += TestMethod( po, "WriteBlock()", f.WriteBlock( 2L, 512, BlockBuf ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "WriteBlock()", f.WriteBlock( 2L, 512, BlockBuf ), XB_NO_ERROR );
char BlockBuf2[513];
memset( BlockBuf2, 0x00, 513 );
- rc += TestMethod( po, "ReadBlock()", f.ReadBlock( 2L, 512, BlockBuf2 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "ReadBlock()", f.ReadBlock( 2L, 512, BlockBuf2 ), XB_NO_ERROR );
xbString s1 = BlockBuf;
xbString s2 = BlockBuf2;
- rc += TestMethod( po, "ReadBlock()", s1, s2, 512 );
-
- rc += TestMethod( po, "xbTruncate()", f.xbTruncate( 1000 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "ReadBlock()", s1, s2, 512 );
+ iRc += TestMethod( iPo, "xbTruncate()", f.xbTruncate( 1000 ), XB_NO_ERROR );
xbUInt64 ullFsize;
- rc += TestMethod( po, "GetFileSize()", f.GetFileSize( ullFsize ), XB_NO_ERROR );
- rc += TestMethod( po, "xbGetFileSize()", (xbInt32) ullFsize, 1000 );
- rc += TestMethod( po, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "GetFileSize()", f.GetFileSize( ullFsize ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "xbGetFileSize()", (xbInt32) ullFsize, 1000 );
+ iRc += TestMethod( iPo, "xbFclose()", f.xbFclose(), XB_NO_ERROR );
+
- if( po > 0 || rc < 0 )
- fprintf( stdout, "Total Errors = %d\n", rc * -1 );
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
#ifdef XB_LOGGING_SUPPORT
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
x.WriteLogMessage( sMsg );
#endif
- return rc;
+ return iRc;
}
diff --git a/src/tests/xb_test_funcs.cpp b/src/tests/xb_test_funcs.cpp
index c7bf0d3..7eb8b16 100755
--- a/src/tests/xb_test_funcs.cpp
+++ b/src/tests/xb_test_funcs.cpp
@@ -125,6 +125,8 @@ int main( int argCnt, char **av )
iRc += TestMethod( po, "CTOD( \"01\\03\\87\", dtResult )", x.CTOD( "01\\03\\87", dtResult ), XB_NO_ERROR );
iRc += TestMethod( po, "CTOD( \"01\\03\\87\", dtResult )", dtResult.Str(), "19870103", 8 );
iRc += TestMethod( po, "DATE( dtResult )", x.DATE( dtResult ), XB_NO_ERROR );
+
+ d.Sysdate();
iRc += TestMethod( po, "DATE( dtResult )", dtResult.Str(), d.Str(), 8 );
iRc += TestMethod( po, "DAY(\"19870103\", dResult )", x.DAY( "19870103", dResult ), XB_NO_ERROR );
iRc += TestMethod( po, "DAY(\"19870103\", dResult )", dResult, (xbDouble) 3 );
@@ -229,6 +231,7 @@ int main( int argCnt, char **av )
iRc += TestMethod( po, "x.RTRIM( \"zzz \", sResult )", sResult, "zzz", 3 );
iRc += TestMethod( po, "x.TRIM( \"aaa \", sResult )", x.TRIM( "aaa ", sResult ), XB_NO_ERROR );
iRc += TestMethod( po, "x.TRIM( \"aaa \", sResult )", sResult, "aaa", 3 );
+
iRc += TestMethod( po, "x.SPACE( 3, sResult )", x.SPACE( 3, sResult ), XB_NO_ERROR );
iRc += TestMethod( po, "x.SPACE( 3, sResult )", sResult, " ", 3 );
iRc += TestMethod( po, "x.SQRT( 9, dResult )", x.SQRT( 9, dResult ), XB_NO_ERROR );
diff --git a/src/tests/xb_test_lock.cpp b/src/tests/xb_test_lock.cpp
index 39332ad..2df71a8 100755
--- a/src/tests/xb_test_lock.cpp
+++ b/src/tests/xb_test_lock.cpp
@@ -34,7 +34,8 @@ int main( int argCnt, char **av )
/* 2 - VERBOSE */
xbInt16 iErrorStop = 0;
- xbString sLockFile = "locktest.txt";
+ xbString sLockFile;
+ xbString sLockFile2;
xbString sLockCmd;
xbString sResult;
@@ -69,23 +70,34 @@ int main( int argCnt, char **av )
x.WriteLogMessage( sMsg );
#endif
+
x.SetDataDirectory( PROJECT_DATA_DIR );
InitTime();
#ifdef XB_DBF4_SUPPORT
- MyFile = new xbDbf4( &x ); /* version 4 dbf file */
+ MyFile = new xbDbf4( &x ); // version 4 dbf file
#else
- MyFile = new xbDbf3( &x ); /* version 3 dbf file */
+ MyFile = new xbDbf3( &x ); // version 3 dbf file
#endif
iRc2 = MyFile->CreateTable( "LockTest.DBF", "LockTest", MyRecord, XB_OVERLAY, XB_MULTI_USER );
iRc += TestMethod( po, "CreateTable()", iRc2, XB_NO_ERROR );
+
+ #ifdef XB_MDX_SUPPORT
+ xbIx *ixPtr;
+ void *pTag;
+ iRc2 = MyFile->CreateTag( "MDX", "LockTag", "LOCKTEST", "", 0, 0, XB_OVERLAY, &ixPtr, &pTag );
+ iRc += TestMethod( po, "CreateTag()", iRc2, XB_NO_ERROR );
+ #endif // XB_MDX_SUPPORT
+
+
iRc += TestMethod( po, "PutField()", MyFile->PutField( "LOCKTEST", "TEST" ), XB_NO_ERROR );
iRc += TestMethod( po, "AppendRecord()", MyFile->AppendRecord(), XB_NO_ERROR );
- iRc += TestMethod( po, "Close()", MyFile->Close(), XB_NO_ERROR );
- MyFile->Close();
+ iRc += TestMethod( po, "Close()", MyFile->Close(), XB_NO_ERROR );
+
+ sLockFile.Sprintf( "%slocktest.txt", PROJECT_DATA_DIR );
+ // std::cout << "xb_test_lock - lockfile = [ " << sLockFile.Str() << "]\n";
- //unlink( sLockFile );
- remove( sLockFile );
+ remove( sLockFile.Str() );
#if defined (HAVE_FORK_F)
pid_t pid;
@@ -104,14 +116,15 @@ int main( int argCnt, char **av )
xbString sLastLockCmd;
#ifdef XB_DBF4_SUPPORT
- MyFileChld = new xbDbf4( &x ); /* version 4 dbf file */
+ MyFileChld = new xbDbf4( &x ); // version 4 dbf file
#else
- MyFileChld = new xbDbf3( &x ); /* version 3 dbf file */
+ MyFileChld = new xbDbf3( &x ); // version 3 dbf file
#endif
x.xbSleep( 250 );
while( !bDone ){
+
iRc2 = GetCmd( x, sLockFile, sLockCmd, 'C', po );
if( sLockCmd == sLastLockCmd )
@@ -139,7 +152,6 @@ int main( int argCnt, char **av )
x.xbSleep( 250 );
} else {
-
if( sLockCmd == "START" ){
// begin the process
iRcChld = MyFileChld->Open( "LockTest.DBF" );
@@ -199,8 +211,31 @@ int main( int argCnt, char **av )
#else
sLockCmd = "OK";
#endif
+
+ } else if( sLockCmd == "IL" ){
+ // index lock
+ #ifdef XB_MDX_SUPPORT
+ if(( iRcChld = MyFileChld->LockIndices( XB_LOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif // XB_MDX_SUPPORT
+
+ } else if( sLockCmd == "IU" ){
+ // index unlock
+ #ifdef XB_MDX_SUPPORT
+ if(( iRcChld = MyFileChld->LockIndices( XB_UNLOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif // XB_MDX_SUPPORT
}
+
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Child task [%s] Result [%s] RC = [%d]", av[0], sLockCmd.Str(), sResult.Str(), iRcChld );
x.WriteLogMessage( sMsg );
@@ -212,7 +247,6 @@ int main( int argCnt, char **av )
delete MyFileChld;
}
}
-
} else {
iRc = iRc2;
bDone = xbTrue;
@@ -226,6 +260,8 @@ int main( int argCnt, char **av )
delete MyFile;
delete MyFileChld;
+ remove( sLockFile );
+
if( po > 0 )
std::cout << "Exiting child\n";
@@ -241,9 +277,7 @@ int main( int argCnt, char **av )
xbInt16 iLoopCtr = 0;
try{
-
// start
-
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task issuing START command", av[0] );
x.WriteLogMessage( sMsg );
@@ -266,7 +300,7 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc2 = -1;
throw iRc2;
}
@@ -294,19 +328,19 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 20;
+ iErrorStop = 110;
iRc2 = -1;
throw iRc2;
}
// attempt to lock table, should fail
if(( iRc2 = MyFile->Open( "LockTest.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 30;
+ iErrorStop = 120;
throw iRc2;
}
if(( iRc2 = MyFile->LockTable( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 40;
+ iErrorStop = 130;
throw iRc2;
}
@@ -336,24 +370,24 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 50;
+ iErrorStop = 140;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 60;
+ iErrorStop = 150;
throw iRc2;
}
if( po > 0 )
std::cout << "[PASS] LockTable Test 2\n";
if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 70;
+ iErrorStop = 160;
throw iRc2;
}
- /* record lock */
+ // record lock
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task issuing RL command", av[0] );
x.WriteLogMessage( sMsg );
@@ -376,19 +410,19 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 80;
+ iErrorStop = 170;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) == XB_NO_ERROR ){
- iErrorStop = 90;
+ iErrorStop = 180;
throw iRc2;
}
if( po > 0 )
std::cout << "[PASS] LockRecord Test 1\n";
- /* record unlock */
+ // record unlock
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task issuing RU command", av[0] );
x.WriteLogMessage( sMsg );
@@ -411,29 +445,29 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 100;
+ iErrorStop = 190;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 110;
+ iErrorStop = 200;
throw iRc2;
}
std::cout << "[PASS] LockRecord Test 2\n";
if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 120;
+ iErrorStop = 210;
throw iRc2;
}
- /* memo lock */
+ // memo lock
#ifdef XB_MEMO_SUPPORT
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task issuing ML command", av[0] );
x.WriteLogMessage( sMsg );
- #endif
+ #endif // XB_LOGGING_SUPPORT
sLockCmd = "ML";
SetCmd( x, sLockFile, sLockCmd, 'P', po );
@@ -449,26 +483,26 @@ int main( int argCnt, char **av )
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
x.WriteLogMessage( sMsg );
- #endif
+ #endif // XB_LOGGING_SUPPORT
if( sResult != "OK" ){
- iErrorStop = 130;
+ iErrorStop = 220;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockMemo( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 140;
+ iErrorStop = 230;
throw iRc2;
}
if( po > 0 )
std::cout << "[PASS] LockMemo Test 1\n";
- /* memo unlock */
+ // memo unlock
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task issuing MU command", av[0] );
x.WriteLogMessage( sMsg );
- #endif
+ #endif // XB_LOGGING_SUPPORT
sLockCmd = "MU";
SetCmd( x, sLockFile, sLockCmd, 'P', po );
@@ -484,30 +518,110 @@ int main( int argCnt, char **av )
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
x.WriteLogMessage( sMsg );
- #endif
+ #endif // XB_LOGGING_SUPPORT
if( sResult != "OK" ){
- iErrorStop = 150;
+ iErrorStop = 240;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 160;
+ iErrorStop = 250;
throw iRc2;
}
std::cout << "[PASS] LockMemo Test 2\n";
if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 170;
+ iErrorStop = 260;
throw iRc2;
}
- #endif
+ #endif // XB_MEMO_SUPPORT
+
+ // index lock
+ #ifdef XB_MDX_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing IL command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ sLockCmd = "IL";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ if( sResult != "OK" ){
+ iErrorStop = 270;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) == XB_NO_ERROR ){
+ iErrorStop = 280;
+ throw iRc2;
+ }
+ if( po > 0 )
+ std::cout << "[PASS] LockIndex Test 1\n";
+
+ // memo unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing IU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ sLockCmd = "IU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 30 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif // XB_LOGGING_SUPPORT
+
+ if( sResult != "OK" ){
+ iErrorStop = 290;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 300;
+ throw iRc2;
+ }
+
+ std::cout << "[PASS] LockIndex Test 2\n";
+ if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 310;
+ throw iRc2;
+ }
+ #endif // XB_MDX_SUPPORT
+
+
// exit
sLockCmd = "EXIT";
SetCmd( x, sLockFile, sLockCmd, 'P', po );
+
+
} catch (xbInt16 iRc3 ){
iRc = iRc3;
if( po > 0 )
@@ -533,6 +647,7 @@ int main( int argCnt, char **av )
SetCmd( x, sLockFile, sLockCmd, 'P', po );
MyFile->Close();
delete MyFile;
+
}
#elif defined (HAVE_CREATEPROCESSW_F)
@@ -578,7 +693,7 @@ int main( int argCnt, char **av )
GetCmd( x, sLockFile, sResult, 'P', po );
while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
+ x.xbSleep( 300 );
iLoopCtr++;
}
@@ -600,7 +715,7 @@ int main( int argCnt, char **av )
GetCmd( x, sLockFile, sResult, 'P', po );
while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
+ x.xbSleep( 310 );
iLoopCtr++;
}
@@ -610,19 +725,19 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 200;
+ iErrorStop = 320;
iRc2 = -1;
throw iRc2;
}
// attempt to lock table, should fail
if(( iRc2 = MyFile->Open( "LockTest.DBF" )) != XB_NO_ERROR ){
- iErrorStop = 210;
+ iErrorStop = 330;
throw iRc2;
}
if(( iRc2 = MyFile->LockTable( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 220;
+ iErrorStop = 340;
throw iRc2;
}
@@ -658,13 +773,13 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 230;
+ iErrorStop = 350;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 240;
+ iErrorStop = 360;
throw iRc2;
}
if( po > 0 ){
@@ -676,11 +791,11 @@ int main( int argCnt, char **av )
}
if(( iRc2 = MyFile->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 250;
+ iErrorStop = 370;
throw iRc2;
}
- /* record lock */
+ // record lock
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task issuing RL command", av[0] );
x.WriteLogMessage( sMsg );
@@ -693,7 +808,7 @@ int main( int argCnt, char **av )
GetCmd( x, sLockFile, sResult, 'P', po );
while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
GetCmd( x, sLockFile, sResult, 'P', po );
- x.xbSleep( 250 );
+ x.xbSleep( 380 );
iLoopCtr++;
}
@@ -703,19 +818,19 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 260;
+ iErrorStop = 390;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) == XB_NO_ERROR ){
- iErrorStop = 270;
+ iErrorStop = 400;
throw iRc2;
}
if( po > 0 )
std::cout << "[PASS] LockRecord Test 1\n";
- /* record unlock */
+ // record unlock
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task issuing RU command", av[0] );
x.WriteLogMessage( sMsg );
@@ -738,24 +853,23 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 280;
+ iErrorStop = 410;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockRecord( XB_LOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 290;
+ iErrorStop = 420;
throw iRc2;
}
std::cout << "[PASS] LockRecord Test 2\n";
if(( iRc2 = MyFile->LockRecord( XB_UNLOCK, 1 )) != XB_NO_ERROR ){
- iErrorStop = 300;
+ iErrorStop = 430;
throw iRc2;
}
-
- /* memo lock */
+ // memo lock
#ifdef XB_MEMO_SUPPORT
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task issuing ML command", av[0] );
@@ -779,19 +893,19 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 310;
+ iErrorStop = 440;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockMemo( XB_LOCK )) == XB_NO_ERROR ){
- iErrorStop = 320;
+ iErrorStop = 450;
throw iRc2;
}
if( po > 0 )
std::cout << "[PASS] LockMemo Test 1\n";
- /* memo unlock */
+ // memo unlock
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Parent task issuing MU command", av[0] );
x.WriteLogMessage( sMsg );
@@ -814,19 +928,95 @@ int main( int argCnt, char **av )
#endif
if( sResult != "OK" ){
- iErrorStop = 330;
+ iErrorStop = 460;
iRc2 = -1;
throw iRc2;
}
if(( iRc2 = MyFile->LockMemo( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 340;
+ iErrorStop = 470;
throw iRc2;
}
std::cout << "[PASS] LockMemo Test 2\n";
if(( iRc2 = MyFile->LockMemo( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 350;
+ iErrorStop = 480;
+ throw iRc2;
+ }
+ #endif
+
+ // index lock
+ #ifdef XB_MDX_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing IL command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "IL";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 490 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 500;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) == XB_NO_ERROR ){
+ iErrorStop = 510;
+ throw iRc2;
+ }
+ if( po > 0 )
+ std::cout << "[PASS] LockIndex Test 1\n";
+
+ // index unlock
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task issuing IU command", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ sLockCmd = "IU";
+ SetCmd( x, sLockFile, sLockCmd, 'P', po );
+ sResult = "";
+
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ while( sResult != "OK" && sResult != "FAIL" && iLoopCtr < 10 ){
+ GetCmd( x, sLockFile, sResult, 'P', po );
+ x.xbSleep( 250 );
+ iLoopCtr++;
+ }
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] Parent task retrieved result [%s]", av[0], sResult.Str() );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ if( sResult != "OK" ){
+ iErrorStop = 520;
+ iRc2 = -1;
+ throw iRc2;
+ }
+
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) != XB_NO_ERROR ){
+ iErrorStop = 530;
+ throw iRc2;
+ }
+
+ std::cout << "[PASS] LockIndex Test 2\n";
+ if(( iRc2 = MyFile->LockIndices( XB_UNLOCK )) != XB_NO_ERROR ){
+ iErrorStop = 540;
throw iRc2;
}
#endif
@@ -835,6 +1025,7 @@ int main( int argCnt, char **av )
sLockCmd = "EXIT";
SetCmd( x, sLockFile, sLockCmd, 'P', po );
+
} catch (xbInt16 iRc3 ){
if( po > 0 )
std::cout << "Parent lock task exiting on failure [" << sLockCmd.Str() << "][" << iErrorStop << "]\n";
@@ -852,6 +1043,7 @@ int main( int argCnt, char **av )
}
#else
+
iRc--;
sMsg.Sprintf( "Program [%s] not executed. Library does not support 'fork' or 'CreateProcess' function call", av[0] );
#ifdef XB_LOGGING_SUPPORT
diff --git a/src/tests/xb_test_lock2.cpp b/src/tests/xb_test_lock2.cpp
index d5534ec..82b4dea 100755
--- a/src/tests/xb_test_lock2.cpp
+++ b/src/tests/xb_test_lock2.cpp
@@ -38,8 +38,7 @@ int main( int argCnt, char **av )
/* 2 - VERBOSE */
xbBool bDone = xbFalse;
-// xbInt16 iErrorStop = 0;
- xbString sLockFile = "locktest.txt";
+ xbString sLockFile;
xbString sLockCmd;
xbString sResult;
xbInt32 iChildLoop = 0;
@@ -74,6 +73,9 @@ int main( int argCnt, char **av )
x.SetDataDirectory( PROJECT_DATA_DIR );
InitTime();
+ sLockFile.Sprintf( "%slocktest.txt", PROJECT_DATA_DIR );
+ // std::cout << "xb_test_lock2 - lockfile = [ " << sLockFile.Str() << "]\n";
+
#ifdef XB_DBF4_SUPPORT
MyFile = new xbDbf4( &x ); /* version 4 dbf file */
#else
@@ -166,7 +168,31 @@ int main( int argCnt, char **av )
#else
sLockCmd = "OK";
#endif
+
+ } else if( sLockCmd == "IL" ){
+ // index lock
+ #ifdef XB_MDX_SUPPORT
+ if(( iRc2 = MyFile->LockIndices( XB_LOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif
+
+ } else if( sLockCmd == "IU" ){
+ // index unlock
+ #ifdef XB_MDX_SUPPORT
+ if(( iRc2 = MyFile->LockIndices( XB_UNLOCK )) != XB_NO_ERROR )
+ sResult = "FAIL";
+ else
+ sResult = "OK";
+ #else
+ sLockCmd = "OK";
+ #endif
}
+
+
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Child task [%s] Result [%s] RC = [%d]", av[0], sLockCmd.Str(), sResult.Str(), iRc2 );
x.WriteLogMessage( sMsg );
@@ -188,7 +214,7 @@ int main( int argCnt, char **av )
if( po > 0 )
std::cout << "Exiting child\n";
- remove( sLockFile );
+ remove( sLockFile.Str() );
#ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] Child task terminating", av[0] );
x.WriteLogMessage( sMsg );
@@ -202,6 +228,6 @@ int main( int argCnt, char **av )
x.WriteLogMessage( sMsg );
#endif
- ExitProcess( iRc );
+ ExitProcess( (xbUInt32) iRc );
}
diff --git a/src/tests/xb_test_log.cpp b/src/tests/xb_test_log.cpp
index 28ae552..a586809 100755
--- a/src/tests/xb_test_log.cpp
+++ b/src/tests/xb_test_log.cpp
@@ -41,7 +41,7 @@ int main( int argCnt, char **av )
}
xbXBase x;
- x.SetLogDirectory( PROJECT_LOG_DIR );
+
x.EnableMsgLogging();
InitTime();
if( po ){
@@ -51,28 +51,58 @@ int main( int argCnt, char **av )
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
- xbString sNewLogFileName = "Logfile2.txt";
- sMsg.Sprintf( "Switching to logfile [%s]", sNewLogFileName.Str() );
- x.WriteLogMessage( sMsg );
+ // verify first logfile location is correct
+ xbString sWork;
+ x.GetHomeDir( sWork );
+ std::cout << "Home Dir = " << sWork.Str() << std::endl;
+
+ // verify home directory > 0 length
+ xbInt32 iLen = (xbInt32) sWork.Len();
+ if( sWork.Len() == 0 )
+ rc += TestMethod( po, "GetHomeDir()", iLen, 1 );
+ else
+ rc += TestMethod( po, "GetHomeDir()", iLen, iLen );
+
+ sWork.Sprintf( "%s%cxbase64%clogs", sWork.Str(),
+ x.GetPathSeparator(), x.GetPathSeparator());
+
+ // verify path exists
+ // std::cout << "Home Dir = " << sHomeDir.Str() << std::endl;
+ xbFile f( &x );
+ rc += TestMethod( po, "FileExists()", f.FileExists( sWork ), xbTrue );
+
+
+ sWork.Sprintf( "%s%c%s", sWork.Str(),
+ x.GetPathSeparator(), x.GetLogFileName().Str() );
+
+ // std::cout << "Home Dir = " << sWork.Str() << std::endl;
+ rc += TestMethod( po, "FileExists()", f.FileExists( sWork ), xbTrue );
+ rc += TestMethod( po, "Get Log Status()", x.GetLogStatus(), xbTrue );
+
x.DisableMsgLogging();
- rc += TestMethod( po, "Set/Get Log Status()", x.GetLogStatus(), xbFalse );
- x.SetLogFileName( sNewLogFileName );
+ rc += TestMethod( po, "Get Log Status()", x.GetLogStatus(), xbFalse );
+ xbString sNewLogFileName = "Logfile2.txt";
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.SetLogFileName( sNewLogFileName );
+ sWork.Sprintf( "%s%c%s",
+ PROJECT_LOG_DIR, x.GetPathSeparator(), sNewLogFileName.Str());
+
+ sMsg.Sprintf( "Switching to logfile [%s]", sWork.Str() );
x.EnableMsgLogging();
- rc += TestMethod( po, "Set/Get Log Status()", x.GetLogStatus(), 1 );
- rc += TestMethod( po,"WriteLogMessage()", x.WriteLogMessage( "Test log message........" ), XB_NO_ERROR );
+ rc += TestMethod( po, "Get Log Status()", x.GetLogStatus(), xbTrue );
+ rc += TestMethod( po, "FileExists()", f.FileExists( sWork ), xbTrue );
- sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
x.WriteLogMessage( sMsg );
+ rc += TestMethod( po, "Get Log Status()", x.GetLogStatus(), xbTrue );
+ x.WriteLogMessage( "Test Log Message" );
if( po > 0 || rc < 0 )
fprintf( stdout, "Total Errors = %d\n", rc * -1 );
-
#endif /* XB_LOGGING_SUPPORT */
-
return rc;
}
diff --git a/src/tests/xb_test_mdx.cpp b/src/tests/xb_test_mdx.cpp
index 2ef5ffb..680be5c 100755
--- a/src/tests/xb_test_mdx.cpp
+++ b/src/tests/xb_test_mdx.cpp
@@ -1,4 +1,4 @@
-/* xb_test_ndx.cpp
+/* xb_test_mdx.cpp
XBase64 Software Library
@@ -280,9 +280,18 @@ int main( int argCnt, char **av )
iRc += TestMethod( iPo, "CheckTagIntegrity(7)", V4DbfX2->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+
+ iRc2 = V4DbfX2->CreateTag( "MDX", "TAG2", "CHAR27", ".NOT. DELETED()", 0, 1, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(5)", iRc2, 0 );
+
+ iRc2 += V4DbfX2->Reindex( 1 );
+ iRc += TestMethod( iPo, "Reindex()", iRc2, XB_KEY_NOT_UNIQUE );
+
+
x.CloseAllTables();
- delete V4DbfX1;
- delete V4DbfX2;
+// delete V4DbfX1;
+// delete V4DbfX2;
if( iPo > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
diff --git a/src/tests/xb_test_ndx.cpp b/src/tests/xb_test_ndx.cpp
index 34496b6..320a1c9 100755
--- a/src/tests/xb_test_ndx.cpp
+++ b/src/tests/xb_test_ndx.cpp
@@ -117,6 +117,14 @@ int main( int argCnt, char **av )
iRc2 = V3Dbf->AssociateIndex( "NDX", "TestNdxN.NDX", 0 );
iRc += TestMethod( iPo, "Associate()", (xbInt32) iRc2, XB_NO_ERROR );
+ xbInt16 iTagCnt = ixPtr->GetTagCount();
+ iRc += TestMethod( iPo, "GetTagCount()", (xbInt32) iTagCnt, 1 );
+
+ xbString sTagName;
+ sTagName = ixPtr->GetTagName( &ndx );
+ iRc += TestMethod( iPo, "GetTagName()", sTagName.Str(), "TestNdxN", 8 );
+
+
#ifdef XB_LOCKING_SUPPORT
iRc += TestMethod( iPo, "LockTable()", V3Dbf->LockTable( XB_LOCK ), XB_NO_ERROR );
#endif
@@ -307,13 +315,12 @@ int main( int argCnt, char **av )
xbIxList *ixl = V3Dbf->GetIxList();
xbIxNdx *ix;
- xbString sTagName;
while( ixl ){
if( *ixl->sFmt == "NDX" ){
ix = (xbIxNdx *) ixl->ix;
//ix->GetTagName( 0, sTagName );
sMsg.Sprintf( "CheckTagIntegrity() - [%s]", ix->GetTagName(ix->GetCurTag()).Str());
- iRc += TestMethod( iPo, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 2 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 0 ), XB_NO_ERROR );
ixl = ixl->next;
}
}
@@ -382,14 +389,54 @@ int main( int argCnt, char **av )
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 );
+ iRc += TestMethod( iPo, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 0 ), XB_NO_ERROR );
}
ixl = ixl->next;
}
-// iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
+ iRc2 = V3Dbf->Reindex( 1 ); // reindex all tags
+ iRc += TestMethod( iPo, "Reindex()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
+
+
+
+ // test tag delete on unsuccessful reindex
+
+ iRc2 = V3Dbf->CreateTable( "TestNdx.DBF", "TestNdx", MyV3Record, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "AAA" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc += TestMethod( iPo, "BlankRecord()", V3Dbf->BlankRecord(), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "CFLD", "BBB" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "Putfield()", V3Dbf->PutField( "DFLD", "19611109" ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "PutfieldDouble()", V3Dbf->PutDoubleField( "NFLD", 50 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "AppendRecord()", V3Dbf->AppendRecord(), XB_NO_ERROR );
+
+ iRc2 = V3Dbf->Reindex( 1 ); // verify reindex works with no tags
+ iRc += TestMethod( iPo, "Reindex()", (xbInt32) iRc2, XB_NO_ERROR );
+
+
+ x.SetUniqueKeyOpt( XB_HALT_ON_DUPKEY );
+ iRc2 = V3Dbf->CreateTag( "NDX", "TestNdxX.NDX", "CFLD", "", 0, 1, XB_OVERLAY, &ixPtr, &ndx );
+ iRc += TestMethod( iPo, "CreateTag()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = V3Dbf->Reindex( 1 ); // verify reindex fails with dup key
+ iRc += TestMethod( iPo, "Reindex()", (xbInt32) iRc2, XB_KEY_NOT_UNIQUE );
x.CloseAllTables();
+// delete V3Dbf;
if( iPo > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
diff --git a/src/tests/xb_test_sql.cpp b/src/tests/xb_test_sql.cpp
index 99a4f0b..3341895 100755
--- a/src/tests/xb_test_sql.cpp
+++ b/src/tests/xb_test_sql.cpp
@@ -57,11 +57,12 @@ int main( int argCnt, char **av )
{ "",0,0,0 }
};
- above structure below, depending on how table is created
+ above structure corresponds to sql below
sSql = "CREATE TABLE Address.DBF ( ADDRESS CHAR(30), CITY CHAR(30), STATE CHAR(2), ZIPCODE NUMERIC(9,0), NOTES VARCHAR, LASTUPDATE DATE, ACTIVE LOGICAL )";
*/
+/*
xbSchema MyZipRecord[] =
{
{ "ZIPCODE", XB_NUMERIC_FLD, 9, 0 },
@@ -69,7 +70,7 @@ int main( int argCnt, char **av )
{ "STATE", XB_CHAR_FLD, 2, 0 },
{ "",0,0,0 }
};
-
+*/
xbXBase x;
#ifdef XB_LOGGING_SUPPORT
@@ -85,54 +86,32 @@ int main( int argCnt, char **av )
x.SetDataDirectory( PROJECT_DATA_DIR );
- InitTime();
xbSql sql( &x );
if( po > 0 )
std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
-
- xbDbf4 SqlDbf( &x ); // version 4 dbf file
- xbDbf4 SqlDbfZ( &x ); // version 4 dbf file
-
-
-
-
-
- sSql = "DROP TABLE IF EXISTS AddressR.DBF";
+/*
+ // verify a delete on a non existant table doesn't crash things
+ sSql = "DROP TABLE IF EXISTS NoTable.DBF";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
-
-
sSql = "DROP TABLE IF EXISTS Address.DBF";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
-
-
sSql = "CREATE TABLE Address.DBF ( ADDRESS CHAR(30), CITY CHAR(30), STATE CHAR(2), ZIPCODE NUMERIC(9,0), NOTES VARCHAR, LASTUPDATE DATE, ACTIVE LOGICAL )";
-
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
-/*
- non sql way to create a table
- iRc2 = SqlDbf.CreateTable( "Address.DBF", "Address", MyAddressRecord, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
- if( iRc2 )
- x.DisplayError( iRc2 );
-*/
-
-// return 0;
-
#ifdef XB_MDX_SUPPORT
sSql = "CREATE INDEX tag1 ON Address.DBF( CITY, STATE, DTOS( LASTUPDATE )) FILTER .NOT. DELETED()";
// xbString sSql = "CREATE INDEX tag1 ON Address.DBF( CITY, STATE )";
@@ -155,8 +134,13 @@ int main( int argCnt, char **av )
if( iRc2 )
x.DisplayError( iRc2 );
- sSql = "ALTER TABLE Address.DBF RENAME TO AddressR.DBF";
+ sSql = "DROP TABLE IF EXISTS AddressR.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+ sSql = "ALTER TABLE Address.DBF RENAME TO AddressR.DBF";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqlAlterTable()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
@@ -186,64 +170,91 @@ int main( int argCnt, char **av )
if( iRc2 )
x.DisplayError( iRc2 );
+ sSql = "DELETE FROM AddressR.DBF WHERE BAD='EXPRESSION'";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_INVALID_FIELD_NAME );
- iRc2 = SqlDbfZ.CreateTable( "ZipCode.DBF", "", MyZipRecord, XB_OVERLAY, XB_MULTI_USER );
- iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ sSql = "DROP TABLE IF EXISTS AddressR.DBF";
+ iRc += TestMethod( po, "Drop Table()", sql.ExecuteNonQuery( sSql ), XB_NO_ERROR );
+ iRc += TestMethod( po, "Drop Table()", sql.ExecuteNonQuery( sSql ), XB_NO_ERROR );
+
+*/
+
+
+ sSql = "DROP TABLE IF EXISTS ZipCode.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
-// sSql = "INSERT INTO ZipCode.DBF ( ZIPCODE, CITY, STATE ) VALUES ( 75087, 'Rockwall', 'TX' )";
-
+ sSql = "CREATE TABLE ZipCode.DBF ( ZIPCODE NUMERIC(9,0), CITY CHAR(30), STATE CHAR(2) )";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
-// std::cout << "---------------------------------------------------------\n";
-// std::cout << sSql.Str() << "\n";
+ sSql = "INSERT INTO ZipCode.DBF ( ZIPCODE, CITY, STATE ) VALUES ( 75087, 'Rockwall', 'TX' )";
+ iRc2 = sql.ExecuteNonQuery( sSql );
- sSql = "INSERT INTO ZipCode ( CITY ) VALUES ( 'city' )";
+ sSql = "INSERT INTO ZipCode.DBF ( ZIPCODE, CITY, STATE ) VALUES ( 75087, 'Rockwall', 'TX' )";
iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
+
+/*
+
+ sSql = "CREATE INDEX ZipCode1.NDX ON ZipCode.DBF( ZIPCODE ) ASSOCIATE";
+ iRc2 = sql.ExecuteNonQuery( sSql );
if( iRc2 )
x.DisplayError( iRc2 );
+ iRc += TestMethod( po, "Create Index()", (xbInt32) iRc2, XB_NO_ERROR );
+*/
+ sSql = "CREATE UNIQUE INDEX ZipCode2.NDX ON ZipCode.DBF( ZIPCODE ) ASSOCIATE";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "Create Index()", (xbInt32) iRc2, XB_KEY_NOT_UNIQUE );
+
-//**************** work in progress
/*
- sSql = "DELETE FROM AddressR.DBF WHERE BAD='EXPRESSION'";
+ sSql = "DROP TABLE IF EXISTS ZipCode.DBF";
iRc2 = sql.ExecuteNonQuery( sSql );
- iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_INVALID_FIELD_NAME );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
*/
-// if( iRc2 )
-// x.DisplayError( iRc2 );
+// sSql = "INSERT INTO ZipCode.DBF ( ZIPCODE, CITY, STATE ) VALUES ( 75087, 'Rockwall', 'TX' )";
+// iRc2 = sql.ExecuteNonQuery( sSql );
+
+
+ x.DisplayTableList();
- iRc += TestMethod( po, "Close()", SqlDbf.Close(), XB_NO_ERROR );
- iRc += TestMethod( po, "Close()", SqlDbfZ.Close(), XB_NO_ERROR );
-// return 0;
-// std::cout << "---------------------------------------------------------\n";
+/*
+ sSql = "CREATE INDEX ZipCode.NDX ON Addres.DBF( ZIPCODE )";
- xbStmt sqlQry1( &x );
-// sSql = "SELECT CITY, STATE, ZIPCODE FROM Address.DBF T LEFT JOIN LJ.DBF LJ WHERE CITY IS NOT NULL ORDER BY 2 GROUP BY STATE HAVING ZIPCODE .NOT. NULL";
-// sSql = "SELECT CITY, STATE, ZIPCODE FROM AddressR.DBF T WHERE CITY IS NOT NULL ORDER BY 2 GROUP BY STATE HAVING ZIPCODE .NOT. NULL";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+*/
-// sSql = "SELECT CITY, STATE, ZIPCODE FROM AddressR A LEFT JOIN ZipCode Z ON A.ZIPCODE = Z.ZIPCODE WHERE CITY IS NOT NULL ORDER BY 2 GROUP BY STATE HAVING ZIPCODE .NOT. NULL";
-// sSql = "SELECT M.ID, M.LEFTFK0, L0.CFLD FROM MAIN0 M LEFT JOIN LEFT0 L0 ON M.LEFTFK0 = L0.LEFTFK0 WHERE M.ID IS NOT NULL";
- iRc += TestMethod( po, "Select()", sqlQry1.ExecuteQuery( sSql ), XB_NO_ERROR );
+// sSql = "DROP TABLE IF EXISTS AddressR.DBF";
+// iRc += TestMethod( po, "Drop Table()", sqlQry1.ExecuteQuery( sSql ), XB_NO_ERROR );
- sqlQry1.DumpStmtInternals();
- // sqlQry1.Test();
- x.DisplayTableList();
+ // x.DisplayTableList();
+ x.CloseAllTables();
if( po > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
diff --git a/src/tests/xb_test_string.cpp b/src/tests/xb_test_string.cpp
index 2f01e51..9dd48af 100755
--- a/src/tests/xb_test_string.cpp
+++ b/src/tests/xb_test_string.cpp
@@ -188,6 +188,19 @@ int main( int argCnt, char **av = NULL )
s2 = "!@#";
rc += TestMethod( po, "s1.Append( '!@#' )", s1.Append( s2 ), "ABCDEFGZ999!@#", 14 );
+ xbString sAppend1;
+ sAppend1.Append( "abc123", 6 );
+ rc += TestMethod( po, "Append", sAppend1, "abc123", 6 );
+
+ xbString sAppend2;
+ sAppend2.Append( "abc123", 8 );
+ rc += TestMethod( po, "Append", sAppend2, "abc123", 6 );
+
+ xbString sAppend3;
+ sAppend3.Append( "abc123", 3 );
+ rc += TestMethod( po, "Append", sAppend3, "abc", 3 );
+
+
rc += TestMethod( po, "s1.Assign( 'ABCDE', 3, 2 )", s1.Assign( "ABCDE", 3, 2 ), "CD", 2 );
rc += TestMethod( po, "s1.Assign( 'ABCDE', 2, 7 )", s1.Assign( "ABCDE", 2, 7 ), "BCDE", 4 );
rc += TestMethod( po, "s1.Assign( 'ABCDE', 1, 4 )", s1.Assign( "ABCDE", 1, 4 ), "ABCD", 4 );
@@ -222,10 +235,24 @@ int main( int argCnt, char **av = NULL )
s1.CvtHexString( s2 );
rc += TestMethod( po, "CvtHexString() ", s2, "abcde", 5 );
- s1 = "123";
- s2 = "ABC";
- rc += TestMethod( po, "HasAlphaChars()", s1.HasAlphaChars(), 0 );
- rc += TestMethod( po, "HasAlphaChars()", s2.HasAlphaChars(), 1 );
+ s1.ExtractElement( "aaaa|bbbb|cccc|dddd", '|', 2, 0 );
+ rc += TestMethod( po, "ExtractElement() ", s1, "bbbb", 4 );
+
+ s1.ExtractElement( "aaaa|b'bb|c'ccc|dddd", '|', 3, 1 );
+ rc += TestMethod( po, "ExtractElement() ", s1, "dddd", 4 );
+
+ s1 = "aaaa|bbbb|cccc|dddd";
+ s2.ExtractElement( s1, '|', 2, 0 );
+ rc += TestMethod( po, "ExtractElement() ", s2, "bbbb", 4 );
+
+ s1 = "abcabcabx";
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( 'b' ), 8 );
+ s1 = "abcabcabx";
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( 'x' ), 9 );
+ s1 = "abcabcabx";
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( '$' ), 0 );
+ rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( "ab" ), 7 );
+
s1 = "\\ABC\\XYZ";
rc += TestMethod( po, "GetPathSeparator()", s1.GetPathSeparator(), '\\' );
@@ -233,14 +260,36 @@ int main( int argCnt, char **av = NULL )
s1 = "/ABC/XYZ";
rc += TestMethod( po, "GetPathSeparator()", s1.GetPathSeparator(), '/' );
+
+ s1 = "123";
+ s2 = "ABC";
+ rc += TestMethod( po, "HasAlphaChars()", s1.HasAlphaChars(), 0 );
+ rc += TestMethod( po, "HasAlphaChars()", s2.HasAlphaChars(), 1 );
+
+
s2 = "";
rc += TestMethod( po, "IsEmpty()", s2.IsEmpty(), 1 );
+
+ s1.SetNum( (long) 123456 );
+
+ s1 = "abcZZZ123";
+ s1.Left( 4 );
+ rc += TestMethod( po, "Left(4) ", s1, "abcZ", 4 );
+
+ s1.Left( 1 );
+ rc += TestMethod( po, "Left(1) ", s1, "a", 1 );
+
+ s1.Left( 0 );
+ rc += TestMethod( po, "Left(0) ", s1, "", 0 );
+
// trim tests
s1 = " ABC ";
rc += TestMethod( po, "Ltrim()", s1.Ltrim(), "ABC ", 6 );
+
s1 = " ABC ";
rc += TestMethod( po, "Rtrim()", s1.Rtrim(), " ABC", 6 );
+
s1 = " ABC ";
rc += TestMethod( po, "Trim() ", s1.Trim(), "ABC", 3 );
@@ -253,6 +302,20 @@ int main( int argCnt, char **av = NULL )
s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
rc += TestMethod( po, "Mid(4,5) ", s1.Mid(4,5), "DEFGH", 5 );
+ s1 = "123";
+ s1.PadLeft( '0', 9 );
+ rc += TestMethod( po, "PadLeft() ", s1, "000000123", 9 );
+
+ s1 = "abc";
+ s1.PadRight( 'Z', 9 );
+ rc += TestMethod( po, "PadRight() ", s1, "abcZZZZZZ", 9 );
+
+ s1.PadRight( 'Z', 4 );
+ rc += TestMethod( po, "PadRight() ", s1, "abcZZZZZZ", 9 );
+
+
+
+ s1 = "DEFGHI";
rc += TestMethod( po, "Pos('G') ", (xbInt32) s1.Pos( 'G' ), 4 );
rc += TestMethod( po, "Pos(\"EFG\") ", (xbInt32) s1.Pos( "EFG" ), 2 );
@@ -269,48 +332,32 @@ int main( int argCnt, char **av = NULL )
s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
rc += TestMethod( po, "Remove(3,5) ", s1.Remove( 3, 5 ), "ABHIJKLMNOPQRSTUVWXYZ", 21 );
+ s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ rc += TestMethod( po, "Remove(22,5) ", s1.Remove( 22, 5 ), "ABCDEFGHIJKLMNOPQRSTU", 21 );
+ s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ rc += TestMethod( po, "Remove(24,5) ", s1.Remove( 24, 5 ), "ABCDEFGHIJKLMNOPQRSTUVW", 23 );
- s1 = "ABCABCABZ";
- s1.SwapChars( 'A', '9' );
- rc += TestMethod( po, "SwapChars() ", s1, "9BC9BC9BZ", 9 );
-
- s1.ToLowerCase();
- rc += TestMethod( po, "ToLowerCase() ", s1, "9bc9bc9bz", 9 );
-
- s1.ToUpperCase();
- rc += TestMethod( po, "ToUpperCase() ", s1, "9BC9BC9BZ", 9 );
-
- s1.ZapChar( '9' );
- rc += TestMethod( po, "ZapChar('9') ", s1, "BCBCBZ", 6 );
-
- s1.ZapLeadingChar( 'B' );
- rc += TestMethod( po, "ZapLeadingChar('B') ", s1, "CBCBZ", 5 );
-
- s1.ZapTrailingChar( 'Z' );
- rc += TestMethod( po, "ZapLeadingChar('B') ", s1, "CBCB", 4 );
-
- s1.ExtractElement( "aaaa|bbbb|cccc|dddd", '|', 2, 0 );
- rc += TestMethod( po, "ExtractElement() ", s1, "bbbb", 4 );
-
- s1.ExtractElement( "aaaa|b'bb|c'ccc|dddd", '|', 3, 1 );
- rc += TestMethod( po, "ExtractElement() ", s1, "dddd", 4 );
-
- s1 = "123";
- s1.PadLeft( '0', 9 );
- rc += TestMethod( po, "PadLeft() ", s1, "000000123", 9 );
-
- s1 = "abc";
- s1.PadRight( 'Z', 9 );
- rc += TestMethod( po, "PadRight() ", s1, "abcZZZZZZ", 9 );
+ s1.Set( "abcdef.dbf" );
+ s1.Replace( "def", "DEF" );
+ rc += TestMethod( po, "Replace", s1, "abcDEF.dbf", 10 );
+ s1.Replace( ".dbf", ".DBF" );
+ rc += TestMethod( po, "Replace", s1, "abcDEF.DBF", 10 );
+ s1.Set( "abcdef.dbf" );
+ s1.Replace( "def", "DEFG" );
+ rc += TestMethod( po, "Replace", s1, "abcDEFG.dbf", 11 );
+ s1.Set( "abcdefdef.dbf" );
+ s1.Replace( "def", "DEFG" );
+ rc += TestMethod( po, "Replace", s1, "abcDEFGDEFG.dbf", 15 );
- s1.Left( 4 );
- rc += TestMethod( po, "Left(4) ", s1, "abcZ", 4 );
- s1.Left( 1 );
- rc += TestMethod( po, "Left(1) ", s1, "a", 1 );
+ s1.SetNum( (long) 123456 );
+ rc += TestMethod( po, "SetNum() ", s1, "123456", 6 );
- s1.Left( 0 );
- rc += TestMethod( po, "Left(0) ", s1, "", 0 );
+ xbFloat f = (xbFloat) 12.35;
+ // %f format varies depending on compiler
+ s1.Sprintf( "%6.2f", f );
+ s1.Ltrim();
+ rc += TestMethod( po, "s1.Sprintf()/s.Trim()", s1, "12.35", 5 );
char buf[5];
buf[0] = 'W';
@@ -319,18 +366,20 @@ int main( int argCnt, char **av = NULL )
buf[3] = 'Z';
buf[4] = 0x00;
xbInt32 l = 1234567;
- xbFloat f = (xbFloat) 12.35;
s2 = "test string";
rc += TestMethod( po, "s1.Sprintf()", s1.Sprintf( "%s %d %s %ld", buf, 12, s2.Str(), l ), "WXYZ 12 test string 1234567", 27 );
- // %f format varies depending on compiler
- s1.Sprintf( "%6.2f", f );
- s1.Ltrim();
- rc += TestMethod( po, "s1.Sprintf()/s.Trim()", s1, "12.35", 5 );
- s1.SetNum( (long) 123456 );
- rc += TestMethod( po, "SetNum() ", s1, "123456", 6 );
+ s1 = "ABCABCABZ";
+ s1.SwapChars( 'A', '9' );
+ rc += TestMethod( po, "SwapChars() ", s1, "9BC9BC9BZ", 9 );
+
+ s1.ToLowerCase();
+ rc += TestMethod( po, "ToLowerCase() ", s1, "9bc9bc9bz", 9 );
+
+ s1.ToUpperCase();
+ rc += TestMethod( po, "ToUpperCase() ", s1, "9BC9BC9BZ", 9 );
s1 = "T";
rc += TestMethod( po, "ValidLogicalValue", s1.ValidLogicalValue(), 1 );
@@ -344,13 +393,19 @@ int main( int argCnt, char **av = NULL )
s1 = "ABC-123456.89";
rc += TestMethod( po, "ValidNumericValue", s1.ValidNumericValue(), 0 );
- s1 = "abcabcabx";
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( 'b' ), 8 );
- s1 = "abcabcabx";
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( 'x' ), 9 );
- s1 = "abcabcabx";
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( '$' ), 0 );
- rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( "ab" ), 7 );
+
+ s1 = "BC9BC99BZ";
+ s1.ZapChar( '9' );
+ rc += TestMethod( po, "ZapChar('9') ", s1, "BCBCBZ", 6 );
+
+ s1.ZapLeadingChar( 'B' );
+ rc += TestMethod( po, "ZapLeadingChar('B') ", s1, "CBCBZ", 5 );
+
+ s1.ZapTrailingChar( 'Z' );
+ rc += TestMethod( po, "ZapTrailingChar('Z') ", s1, "CBCB", 4 );
+ s1.ZapTrailingChar( 'Z' );
+ rc += TestMethod( po, "ZapTrailingChar('Z') ", s1, "CBCB", 4 );
+
s1 = ")";
rc += TestMethod( po, "GetLastPos", (xbInt16) s1.GetLastPos( ')' ), 1 );
@@ -385,17 +440,12 @@ 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() );
-
+*/
if( po > 0 || rc < 0 )
fprintf( stdout, "Total Errors = %d\n", rc * -1 );
diff --git a/src/tests/xb_test_tblmgr.cpp b/src/tests/xb_test_tblmgr.cpp
index d048594..4e177d0 100755
--- a/src/tests/xb_test_tblmgr.cpp
+++ b/src/tests/xb_test_tblmgr.cpp
@@ -96,39 +96,6 @@ int main( int argCnt, char **av )
}
-std::cout << "cp0\n";
- x.SetDataDirectory( "/ABCDEFG/" );
-
- #ifdef WIN32
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
- #else
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
- #endif
-std::cout << "cp1\n";
- x.SetDataDirectory( "/ABCDEFG" );
- #ifdef WIN32
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
- #else
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
- #endif
-
-
- x.SetDataDirectory( "\\ABCDEFG\\");
- #ifdef WIN32
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
- #else
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
- #endif
-
- x.SetDataDirectory( "\\ABCDEFG" );
- #ifdef WIN32
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
- #else
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
- #endif
-
- x.SetDataDirectory( "ABCDEFG" );
- iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "ABCDEFG", 7 );
iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), 0 );
iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), XB_NOT_FOUND );
diff --git a/src/tests/xb_test_tdx.cpp b/src/tests/xb_test_tdx.cpp
new file mode 100755
index 0000000..5d79f04
--- /dev/null
+++ b/src/tests/xb_test_tdx.cpp
@@ -0,0 +1,162 @@
+/* xb_test_tdx.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the class xbIxNdx
+
+// usage: xb_test_ndx QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+int main( int argCnt, char **av )
+{
+ int iRc = 0;
+ int iRc2;
+ int iPo = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ xbString sMsg;
+ char c;
+ xbString s;
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ iPo = 0;
+ else if( av[1][0] == 'V' )
+ iPo = 2;
+ }
+
+
+ xbSchema MyV4Record[] =
+ {
+ { "CITY", XB_CHAR_FLD, 100, 0 },
+ { "STATE", XB_CHAR_FLD, 2, 0 },
+ { "ZIP", XB_NUMERIC_FLD, 9, 0 },
+ { "DATE1", XB_DATE_FLD, 8, 0 },
+ { "",0,0,0 }
+ };
+
+
+
+ xbXBase x;
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( iPo ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+ x.SetTempDirectory( PROJECT_TEMP_DIR );
+ x.SetMultiUser( xbFalse );
+ InitTime();
+
+ if( iPo > 0 )
+ std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+
+
+ xbFile f( &x );
+ xbIx *pIx;
+ void *pTag;
+ xbDate dt = "19890209";
+ xbString sKey;
+
+ xbDbf *V4DbfX1 = new xbDbf4( &x );
+
+
+ iRc2 = V4DbfX1->CreateTable( "TTDXDB01.DBF", "TestMdxX2", MyV4Record, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable(1)", iRc2, 0 );
+
+ iRc2 = V4DbfX1->CreateTag( "TDX", "CITY_TAGA", "CITY", "", 0, 0, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(1)", iRc2, 0 );
+
+ std::cout << "Cur Tag Name = " << V4DbfX1->GetCurTagName().Str() << "\n";
+
+ xbString sFqFileName = pIx->GetFqFileName();
+ iRc2 = V4DbfX1->DeleteTag( "TDX", V4DbfX1->GetCurTagName() );
+
+ iRc += TestMethod( iPo, "DeleteTag(3)", iRc2, 0 );
+
+ // only one tag, file should not exist anymore
+ iRc2 = pIx->FileExists(sFqFileName);
+ iRc += TestMethod( iPo, "FileExists()", iRc2, 0 );
+
+ iRc2 = V4DbfX1->CreateTag( "TDX", "ZIP_TAG", "ZIP", "", xbTrue, 0, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(2)", iRc2, 0 );
+
+ xbInt32 uZip = 10000;
+ for( xbUInt16 i = 0; i < 5; i++ ){
+ for( xbUInt16 j = 0; j < 4; j++ ){
+
+ c = j + 65;
+ s = c;
+ s.PadRight( c, (xbUInt32) i + 1 );
+ //std::cout << "*********** adding s=[" << s.Str() << "] length = " << s.Len() << "\n";
+ iRc2 = V4DbfX1->BlankRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "BlankRecord()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutField( "CITY", s );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutLongField( "ZIP", uZip++ );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->PutDateField( "DATE1", dt );
+ dt++;
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->AppendRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "AppendRecord()", iRc2, XB_NO_ERROR );
+
+ iRc2 = V4DbfX1->Commit();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "Commit()", iRc2, XB_NO_ERROR );
+ }
+ }
+
+
+ iRc += TestMethod( iPo, "CheckTagIntegrity(1)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
+
+ x.CloseAllTables();
+
+// delete V4DbfX1;
+// delete V4DbfX2;
+
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+#ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+#endif
+
+ return iRc;
+}
diff --git a/src/tests/xb_test_xbase.cpp b/src/tests/xb_test_xbase.cpp
index 4751c25..a0affd6 100755
--- a/src/tests/xb_test_xbase.cpp
+++ b/src/tests/xb_test_xbase.cpp
@@ -90,6 +90,119 @@ int main( int argCnt, char **av )
std::cout << "DisplayError Test ==> ";
x.DisplayError( 0 );
}
+
+ #ifdef WIN32
+ char cSep = '\\';
+ iRc += TestMethod( iPo, "GetPathSeparator()", x.GetPathSeparator(), cSep );
+ #else
+ char cSep = '/';
+ iRc += TestMethod( iPo, "GetPathSeparator()", x.GetPathSeparator(), cSep );
+ #endif
+
+
+
+ xbString sDir = "\\dir\\path";
+ xbString sFile = "myfile";
+ xbString sExt = "DBF";
+ xbString sFqn;
+ iRc += TestMethod( iPo, "CreateFQN()", x.CreateFqn( sDir, sFile, sExt, sFqn ), XB_NO_ERROR );
+ //std::cout << "FQN = [" << sFqn.Str() << "]\n";
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "CreateFQN()", sFqn.Str(), "\\dir\\path\\myfile.DBF", 20 );
+ #else
+ iRc += TestMethod( iPo, "CreateFQN()", sFqn.Str(), "/dir/path/myfile.DBF", 20 );
+ #endif
+
+ sDir = "/dir/path";
+ iRc += TestMethod( iPo, "CreateFQN()", x.CreateFqn( sDir, sFile, sExt, sFqn ), XB_NO_ERROR );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "CreateFQN()", sFqn.Str(), "\\dir\\path\\myfile.DBF", 20 );
+ #else
+ iRc += TestMethod( iPo, "CreateFQN()", sFqn.Str(), "/dir/path/myfile.DBF", 20 );
+ #endif
+
+
+ x.SetDataDirectory( "/ABCDEFG/" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetDataDirectory( "/ABCDEFG" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
+ #endif
+
+ x.SetDataDirectory( "\\ABCDEFG\\");
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetDataDirectory( "\\ABCDEFG" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
+ #endif
+
+#ifdef XB_LOGGING_SUPPORT
+
+ x.SetLogDirectory( "ABCDEFG" );
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "ABCDEFG", 7 );
+ x.SetLogDirectory( "/ABCDEFG/" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetLogDirectory( "/ABCDEFG" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "\\ABCDEFG", 8 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "/ABCDEFG", 8 );
+ #endif
+
+ x.SetLogDirectory( "\\ABCDEFG\\");
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetLogDirectory()", x.GetLogDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetLogFileName( "LogFileNameTest" );
+ iRc += TestMethod( iPo, "Set/GetLogFileName()", x.GetLogFileName(), "LogFileNameTest", 15 );
+#endif
+
+ x.SetTempDirectory( "/ABCDEFG/" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+ x.SetTempDirectory( "/ABCDEFG" );
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "\\ABCDEFG", 8 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "/ABCDEFG", 8 );
+ #endif
+
+ x.SetTempDirectory( "\\ABCDEFG\\");
+ #ifdef WIN32
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "\\ABCDEFG\\", 9 );
+ #else
+ iRc += TestMethod( iPo, "Set/GetTempDirectory()", x.GetTempDirectory(), "/ABCDEFG/", 9 );
+ #endif
+
+
+// std::cout << "path separator = [" << x.GetPathSeparator() << "]\n";
+
if( iPo > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
diff --git a/src/utils/xb_cfg_check.cpp b/src/utils/xb_cfg_check.cpp
index 5489c51..c979bac 100755
--- a/src/utils/xb_cfg_check.cpp
+++ b/src/utils/xb_cfg_check.cpp
@@ -152,6 +152,13 @@ int main()
fprintf( stdout, "XB_MDX_SUPPORT = [OFF]\n" );
#endif
+ #ifdef XB_TDX_SUPPORT
+ fprintf( stdout, "XB_TDX_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_TDX_SUPPORT = [OFF]\n" );
+ #endif
+
+
#ifdef XB_SQL_SUPPORT
fprintf( stdout, "XB_SQL_SUPPORT = [ON]\n" );
#else
@@ -183,6 +190,7 @@ int main()
fprintf( stdout, "PROJECT_BINARY_DIR = [%s]\n", PROJECT_BINARY_DIR );
fprintf( stdout, "PROJECT_DATA_DIR = [%s]\n", PROJECT_DATA_DIR );
fprintf( stdout, "PROJECT_LOG_DIR = [%s]\n", PROJECT_LOG_DIR );
+ fprintf( stdout, "PROJECT_TEMP_DIR = [%s]\n", PROJECT_TEMP_DIR );
fprintf( stdout, "PROJECT_DFLT_LOGFILE = [%s]\n", PROJECT_DFLT_LOGFILE );
fprintf( stdout, "PROJECT_SOURCE_DIR = [%s]\n", PROJECT_SOURCE_DIR );
fprintf( stdout, "CMAKE_RUNTIME_OUTPUT_DIRECTORY = [%s]\n\n", CMAKE_RUNTIME_OUTPUT_DIRECTORY );
@@ -191,34 +199,33 @@ int main()
fprintf( stdout, "BUILD_SHARED_LIBS = [%s]\n", BUILD_SHARED_LIBS );
fprintf( stdout, "EXTRA_LIBS = [%s]\n\n", EXTRA_LIBS );
- fprintf( stdout, "Field sizes:\n" );
- fprintf( stdout, "SIZEOF_VOID_P = [%s]\n", CMAKE_SIZEOF_VOID_P );
- fprintf( stdout, "sizeof(char *) = [%zd]\n", sizeof( char *));
- fprintf( stdout, "sizeof(int) = [%zd]\n", sizeof( int ));
- fprintf( stdout, "sizeof(long) = [%zd]\n", sizeof( long ));
- fprintf( stdout, "sizeof(char) = [%zd]\n", sizeof( char ));
+
+ fprintf( stdout, "sizeof(char *) = [%d]\n", (xbInt32) sizeof( char *));
+ fprintf( stdout, "sizeof(int) = [%d]\n", (xbInt32) sizeof( int ));
+ fprintf( stdout, "sizeof(long) = [%d]\n", (xbInt32) sizeof( long ));
+ fprintf( stdout, "sizeof(char) = [%d]\n", (xbInt32) sizeof( char ));
#ifdef HAVE_WCHAR_H
- fprintf( stdout, "sizeof(wchar_t) = [%zd]\n", sizeof( wchar_t ));
+ fprintf( stdout, "sizeof(wchar_t) = [%d]\n", (xbInt32) sizeof( wchar_t ));
#endif
#ifdef HAVE_WINDOWS_H
- fprintf( stdout, "sizeof(DWORD) = [%zd]\n", sizeof( DWORD ));
- #endif
-
- fprintf( stdout, "sizeof(double) = [%zd]\n", sizeof( double ));
- fprintf( stdout, "sizeof(float) = [%zd]\n", sizeof( float ));
- fprintf( stdout, "sizeof(size_t) = [%zd]\n", sizeof( size_t ));
- fprintf( stdout, "sizeof(off_t) = [%zd]\n\n", sizeof( off_t ));
-
- fprintf( stdout, "sizeof(xbBool) = [%zd]\n", sizeof( xbBool ));
- fprintf( stdout, "sizeof(xbInt16) = [%zd]\n", sizeof( xbInt16 ));
- fprintf( stdout, "sizeof(xbUInt16) = [%zd]\n", sizeof( xbUInt16 ));
- fprintf( stdout, "sizeof(xbInt32) = [%zd]\n", sizeof( xbInt32 ));
- fprintf( stdout, "sizeof(xbUInt32) = [%zd]\n", sizeof( xbUInt32 ));
- fprintf( stdout, "sizeof(xbInt64) = [%zd]\n", sizeof( xbInt64 ));
- fprintf( stdout, "sizeof(xbUInt64) = [%zd]\n", sizeof( xbUInt64 ));
- fprintf( stdout, "sizeof(xbFloat) = [%zu]\n", sizeof( xbFloat ));
- fprintf( stdout, "sizeof(xbDouble) = [%zu]\n", sizeof( xbDouble ));
+ fprintf( stdout, "sizeof(DWORD) = [%d]\n", (xbInt32) sizeof( DWORD ));
+ #endif
+
+ fprintf( stdout, "sizeof(double) = [%d]\n", (xbInt32) sizeof( double ));
+ fprintf( stdout, "sizeof(float) = [%d]\n", (xbInt32) sizeof( float ));
+ fprintf( stdout, "sizeof(size_t) = [%d]\n", (xbInt32) sizeof( size_t ));
+ fprintf( stdout, "sizeof(off_t) = [%d]\n\n", (xbInt32) sizeof( off_t ));
+
+ fprintf( stdout, "sizeof(xbBool) = [%d]\n", (xbInt32) sizeof( xbBool ));
+ fprintf( stdout, "sizeof(xbInt16) = [%d]\n", (xbInt32) sizeof( xbInt16 ));
+ fprintf( stdout, "sizeof(xbUInt16) = [%d]\n", (xbInt32) sizeof( xbUInt16 ));
+ fprintf( stdout, "sizeof(xbInt32) = [%d]\n", (xbInt32) sizeof( xbInt32 ));
+ fprintf( stdout, "sizeof(xbUInt32) = [%d]\n", (xbInt32) sizeof( xbUInt32 ));
+ fprintf( stdout, "sizeof(xbInt64) = [%d]\n", (xbInt32) sizeof( xbInt64 ));
+ fprintf( stdout, "sizeof(xbUInt64) = [%d]\n", (xbInt32) sizeof( xbUInt64 ));
+ fprintf( stdout, "sizeof(xbFloat) = [%d]\n", (xbInt32) sizeof( xbFloat ));
+ fprintf( stdout, "sizeof(xbDouble) = [%d]\n", (xbInt32) sizeof( xbDouble ));
fprintf( stdout, "\nHeader files:\n" );
diff --git a/src/utils/xb_dbfutil.cpp b/src/utils/xb_dbfutil.cpp
index e50495e..76988c0 100755
--- a/src/utils/xb_dbfutil.cpp
+++ b/src/utils/xb_dbfutil.cpp
@@ -90,6 +90,7 @@ class xbUtil{
void UpdateTableAutoCommit();
void DisplayTableInfo();
void RenameTable();
+ void DeleteTable();
// 4 - RecordMenu options
void GetRecord();
@@ -776,7 +777,7 @@ void xbUtil::LockRecord(){
std::cin.getline( cBuf, 15 );
//iRc = dActiveTable->LockRecord( XB_LOCK, atol( cBuf ));
iRc = dActiveTable->LockRecord( XB_LOCK, strtoul( cBuf, NULL, 0 ));
-
+
x->DisplayError( iRc );
}
@@ -1453,6 +1454,24 @@ void xbUtil::DisplayTableInfo(){
}
/*************************************************************************************/
+void xbUtil::DeleteTable(){
+
+ if( !dActiveTable )
+ dActiveTable = GetTablePtr( " - select table" );
+
+ if( !dActiveTable ){
+ std::cout << "No table selected" << std::endl;
+ return;
+ }
+
+ dActiveTable->DeleteTable();
+ dActiveTable = NULL;
+ std::cout << "Table deleted.\n";
+
+}
+
+
+/*************************************************************************************/
void xbUtil::RenameTable(){
if( !dActiveTable )
@@ -1510,26 +1529,29 @@ void xbUtil::DisplayActiveTable() const{
if( dActiveTable ){
std::cout << "Active Table = [" << dActiveTable->GetTblAlias().Str() << "] ";
xbUInt32 ulRecCnt = 0;
- dActiveTable->ReadHeader( 0, 1 );
- dActiveTable->GetRecordCnt( ulRecCnt );
- std::cout << "Total Records = [" << ulRecCnt << "] ";
- std::cout << "Current Record = [" << dActiveTable->GetCurRecNo() << "] ";
-
- if( dActiveTable->GetAutoCommit())
- std::cout << " Auto Commit = [Enabled]";
- else
- std::cout << " Auto Commit = [Disabled]";
+ xbInt16 iRc;
+ if(( iRc = dActiveTable->GetRecordCnt( ulRecCnt )) == XB_NO_ERROR ){
+ std::cout << "Total Records = [" << ulRecCnt << "] ";
+ std::cout << "Current Record = [" << dActiveTable->GetCurRecNo() << "] ";
- std::cout << std::endl;
- #ifdef XB_INDEX_SUPPORT
- xbIx *pIx = dActiveTable->GetCurIx();
- if( pIx ){
- void *vpTag = dActiveTable->GetCurTag();
- std::cout << "Active Tag = [" << pIx->GetTagName( vpTag ).Str() << "] Type = [" << dActiveTable->GetCurIxType().Str() <<
+ if( dActiveTable->GetAutoCommit())
+ std::cout << " Auto Commit = [Enabled]";
+ else
+ std::cout << " Auto Commit = [Disabled]";
+
+ std::cout << std::endl;
+ #ifdef XB_INDEX_SUPPORT
+ xbIx *pIx = dActiveTable->GetCurIx();
+ if( pIx ){
+ void *vpTag = dActiveTable->GetCurTag();
+ std::cout << "Active Tag = [" << pIx->GetTagName( vpTag ).Str() << "] Type = [" << dActiveTable->GetCurIxType().Str() <<
"] \tFile Name = [" << pIx->GetFileName().Str() << "] Key = [" << pIx->GetKeyExpression( vpTag ).Str() << "]" << std::endl;
+ }
+ #endif // XB_INDEX_SUPPORT
+ std::cout << std::endl;
+ } else {
+ x->DisplayError( iRc );
}
- #endif // XB_INDEX_SUPPORT
- std::cout << std::endl;
}
}
/*************************************************************************************/
@@ -1716,7 +1738,7 @@ void xbUtil::DisplayTableStats(){
iOptionNo = 1;
}
if( iOptionNo < 5 ) {
- d->ReadHeader( xbTrue, 0 );
+ // d->ReadHeader( xbTrue, 0 ); moved to DumpHeader routine
d->DumpHeader( iOptionNo );
} else {
// DBMS settings
@@ -2192,6 +2214,8 @@ void xbUtil::ProcessOption( const xbString &sOption ){
DisplayTableInfo();
else if( sOption == "=3.15" )
RenameTable();
+ else if( sOption == "=3.16" )
+ DeleteTable();
else if( sOption == "=4" )
RecordMenu();
else if( sOption == "=4.1" )
@@ -2824,7 +2848,7 @@ void xbUtil::FileMenu()
std::cout << "13 - Update Table Auto Commit Setting" << std::endl;
std::cout << "14 - Display Table Info" << std::endl;
std::cout << "15 - Rename Table" << std::endl;
-
+ std::cout << "16 - Delete Table" << std::endl;
std::cout << "99 - Exit Menu" << std::endl;
option = GetOption();
@@ -2833,7 +2857,7 @@ void xbUtil::FileMenu()
case 0: break;
case 1: ListFilesInDataDirectory(); break;
case 2: UpdateDataDirectory(); break;
- case 3: x->DisplayTableList(); break;
+ case 3: x->DisplayTableList(); break;
case 4: Open(); break;
case 5: Close(); break;
case 6: CloseAllTables(); break;
@@ -2845,13 +2869,13 @@ void xbUtil::FileMenu()
case 13: UpdateTableAutoCommit(); break;
case 14: DisplayTableInfo(); break;
case 15: RenameTable(); break;
+ case 16: DeleteTable(); break;
case 99: break;
default: std::cout << "Invalid Option" << std::endl;
}
}
}
-
/************************************************************************/
#ifdef XB_NDXINF_SUPPORT
void xbUtil::InfFileMenu()
@@ -3391,7 +3415,7 @@ void xbUtil::FindKey(){
default:
std::cout << "Unknown key type [" << cKeyType << "]" << std::endl;
return;
- break;
+ // break;
}
char cBuf[128];
@@ -3457,8 +3481,9 @@ void xbUtil::Reindex(){
std::cout << "Tag not selected" << std::endl;
return;
}
- void *vpCurTag = dActiveTable->GetCurTag();
- xbInt16 iRc = pIx->Reindex( &vpCurTag );
+ //void *vpCurTag = dActiveTable->GetCurTag();
+ //xbInt16 iRc = pIx->Reindex( &vpCurTag );
+ xbInt16 iRc = dActiveTable->Reindex( 0 );
x->DisplayError( iRc );
}
diff --git a/src/utils/xb_execsql.cpp b/src/utils/xb_execsql.cpp
index daa6b6e..3441e91 100755
--- a/src/utils/xb_execsql.cpp
+++ b/src/utils/xb_execsql.cpp
@@ -15,12 +15,21 @@ Email Contact:
*/
#include <xbase.h>
-
using namespace xb;
-xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd );
-xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd )
-{
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_execsql [-h] [-?] [--help] [-v] [--version] -i filename.SQL -q --quiet" << std::endl << std::endl;
+ std::cout << "This program processes sql commands from input file 'filename.SQL'" << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+
+xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd, xbBool bQuiet );
+xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd, xbBool bQuiet ){
sCmd = "";
xbString sLine;
xbInt16 iRc = XB_NO_ERROR;
@@ -31,6 +40,12 @@ xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd )
bDone = xbTrue;
} else {
+ if( !bQuiet ){
+ std::cout << sLine;
+ if( sLine.Pos( 0x0a ) == 0 )
+ std::cout << std::endl;
+ }
+
// don't need CR/LF chars
sLine.ZapChar( 0x0a );
sLine.ZapChar( 0x0d );
@@ -50,23 +65,43 @@ xbInt16 GetNextSqlCmd( xbFile &f, xbString &sCmd )
return iRc;
}
-int main(int ac,char** av)
+
+int main(int argc, char* argv[])
{
+ xbXBase x;
+ xbSql sql( &x );
+ xbFile f( sql.GetXbasePtr() );
+ xbInt16 iRc = XB_NO_ERROR;
+ xbString sFileName = "";
+ xbString sSqlLine = "";
+ xbString sParm = "";
+ xbBool bQuiet = xbFalse;
+
+ x.EnableMsgLogging();
- if (ac <= 1) {
- std::cout << "Usage: xb_execsql filename..." << std::endl;
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
return 1;
}
- xbXBase x;
- x.EnableMsgLogging();
- xbSql sql( &x );
- xbFile f( sql.GetXbasePtr() );
- xbInt16 iRc = XB_NO_ERROR;
- xbString sFileName;
- xbString sSqlLine;
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-q", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--quiet", sParm )){
+ bQuiet = xbTrue;
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sFileName ) || sFileName == "" ){
+ PrintHelp();
+ return 1;
+ }
- sFileName = av[1];
if(( iRc = f.xbFopen( "r", sFileName, XB_SINGLE_USER )) != XB_NO_ERROR ){
xbString sMsg;
@@ -77,12 +112,12 @@ int main(int ac,char** av)
}
while( iRc == XB_NO_ERROR ){
- iRc = GetNextSqlCmd( f, sSqlLine );
+ iRc = GetNextSqlCmd( f, sSqlLine, bQuiet );
if( iRc == XB_NO_ERROR ){
sSqlLine.Trim();
- std::cout << "Processing line [" << sSqlLine.Str() << "]\n";
+ // std::cout << "Processing line [" << sSqlLine.Str() << "]\n";
iRc = sql.ExecuteNonQuery( sSqlLine );
if( iRc != XB_NO_ERROR )
x.DisplayError( iRc );
diff --git a/src/utils/xb_import.cpp b/src/utils/xb_import.cpp
new file mode 100755
index 0000000..272a0d0
--- /dev/null
+++ b/src/utils/xb_import.cpp
@@ -0,0 +1,242 @@
+/* xb_import.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2023 Gary A Kunkel
+
+The xb64 software library is covered under
+the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ xb64-devel@lists.sourceforge.net
+ xb64-users@lists.sourceforge.net
+
+*/
+
+#include <xbase.h>
+using namespace xb;
+
+
+struct sFldMap{
+ xbUInt32 iRecPos;
+ xbInt16 iFldNo;
+ char cFldType;
+ sFldMap *next;
+};
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_execsql [-h] [-?] [--help] [-v] [--version] -i infilename.txt -d delimeter -t table.DBF -q --quiet" << std::endl << std::endl;
+ std::cout << "This program imports data from a text file into a specified DBF file/table." << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+
+
+int main(int argc, char* argv[])
+{
+ xbXBase x;
+ xbSql sql( &x );
+ xbFile f( sql.GetXbasePtr() );
+ xbInt16 iRc = XB_NO_ERROR;
+ xbString sFileName = "";
+ xbString sTableName = "";
+ xbString sSqlLine = "";
+ xbString sParm = "";
+ xbString sMsg;
+ xbString sLine;
+ xbString sFld;
+ xbBool bQuiet = xbFalse;
+ char cDelimiter = ',';
+ char cType = ' ';
+ sFldMap *fmFldList = 0;
+ sFldMap *fmTemp = 0;
+ xbInt16 iFldNo = 0;
+ xbUInt32 ulRecCtr = 0;
+ xbBool bRecUpdated;
+ x.EnableMsgLogging();
+
+
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-q", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--quiet", sParm )){
+ bQuiet = xbTrue;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-d", sParm )){
+ if( sParm.Len() > 0 ){
+ cDelimiter = sParm[1];
+ }
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sFileName ) || sFileName == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-t", sTableName ) || sTableName == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ xbDbf *MyFile = NULL;
+ if(( iRc = x.OpenHighestVersion( sTableName.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open table/file RC = " << iRc << " file = " << sTableName.Str() << std::endl;
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+ if(( iRc = f.xbFopen( "r", sFileName, XB_SINGLE_USER )) != XB_NO_ERROR ){
+ sMsg.Sprintf( "Error opening [%s]\n", sFileName.Str() );
+ std::cout << sMsg.Str();
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+
+ if(( iRc = f.xbFgets( 1024, sLine )) != XB_NO_ERROR ){
+ sMsg.Sprintf( "Error reading [%s]\n", sFileName.Str() );
+ std::cout << sMsg.Str();
+ x.DisplayError( iRc );
+ return 1;
+ }
+
+
+ // determine how many fields in a record
+ xbUInt32 lFldCnt = sLine.CountChar( cDelimiter, 1 );
+ // std::cout << "in rec = [" << sLine.Str() << "]\n";
+ // std::cout << "fld cnt = [" << lFldCnt << "]\n";
+
+ // do the mapping between field names in source data and field numbers in target table
+ for( xbUInt32 l = 0; l < (lFldCnt + 1); l++ ){
+
+ // get the field
+ sFld.ExtractElement( sLine.Str(), cDelimiter, l+1, 1 );
+ sFld.ZapTrailingChar( 0x0a ); // eliminate CRLF
+ sFld.ZapTrailingChar( 0x0d ); // eliminate CRLF
+
+
+ // do the lookup
+ // std::cout << "processing field [" << l << "] [" << sFld.Str() << "]\n";
+ // if found, create an entry in the field list structure
+ // else if not quiet, display a message
+
+ //iRc = MyFile->GetFieldNo( sFld, &iFldNo );
+
+ if(( iRc = MyFile->GetFieldNo( sFld, iFldNo )) == XB_NO_ERROR ){
+ MyFile->GetFieldType( iFldNo, cType );
+ fmTemp = (sFldMap *) calloc( 1, sizeof( sFldMap ));
+ if( !fmTemp ){
+ std::cout << "Memory allocation error\n";
+ exit(1);
+ } else {
+ fmTemp->iRecPos = l;
+ fmTemp->iFldNo = iFldNo;
+ fmTemp->cFldType = cType;
+ fmTemp->next = fmFldList;
+ fmFldList = fmTemp;
+
+ }
+ } else {
+ if( !bQuiet ){
+ std::cout << "Field [" << sFld.Str() << "] not found in target table" << std::endl;
+ }
+ }
+ }
+
+
+ while( f.xbFgets( 1024, sLine ) == XB_NO_ERROR ){
+ bRecUpdated = xbFalse;
+ // std::cout << sLine.Str() << "\n";
+
+ if(( iRc = MyFile->BlankRecord()) != XB_NO_ERROR ){
+ sMsg.Sprintf( "MyFile->BlankRecord() error [%d]\n", iRc );
+ std::cout << sMsg.Str();
+ x.DisplayError( iRc );
+ } else {
+
+ fmTemp = fmFldList;
+ while( fmTemp ){
+
+ // std::cout << "*** RecPos = " << fmTemp->iRecPos << " FldNo = " << fmTemp->iFldNo << " Type = " << fmTemp->cFldType << "\n";
+
+ sFld.ExtractElement( sLine.Str(), cDelimiter, fmTemp->iRecPos+1, 1 );
+ sFld.ZapTrailingChar( 0x0a ); // eliminate CRLF
+ sFld.ZapTrailingChar( 0x0d ); // eliminate CRLF
+
+ // remove any matching leading and trailing quotes
+ if( sFld[1] == '\'' && sFld[sFld.Len()] == '\'' ){
+ sFld.ZapTrailingChar( '\'' );
+ sFld.ZapLeadingChar ( '\'' );
+ //std::cout << "DataNq = " << sFld.Str() << "\n";
+ } else if( sFld[1] == '"' && sFld[sFld.Len()] == '"' ){
+ sFld.ZapTrailingChar( '"' );
+ sFld.ZapLeadingChar ( '"' );
+ }
+
+ // std::cout << "Data = " << sFld.Str() << "\n";
+ if( sFld.Len() > 0 ){
+ bRecUpdated = xbTrue;
+ if( fmTemp->cFldType == 'C' || fmTemp->cFldType == 'L' || fmTemp->cFldType == 'D' || fmTemp->cFldType == 'N' || fmTemp->cFldType == 'F' ){
+ iRc = MyFile->PutField( fmTemp->iFldNo, sFld );
+ } else if( fmTemp->cFldType == 'M' ){
+ iRc = MyFile->UpdateMemoField( fmTemp->iFldNo, sFld );
+ } else {
+ std::cout << "Field type [" << fmTemp->cFldType << "] not built yet" << std::endl;
+ }
+
+ if( iRc != XB_NO_ERROR && !bQuiet ){
+ std::cout << "Error [" << iRc << "] on field [" << fmTemp->iFldNo << "] on record [" << ulRecCtr << "]" << std::endl;
+ }
+ }
+ fmTemp = fmTemp->next;
+ }
+
+ if( bRecUpdated ){
+ iRc = MyFile->AppendRecord();
+ if( iRc != XB_NO_ERROR ){
+ if( !bQuiet ){
+ std::cout << "Error [" << iRc << "] on appending record [" << ulRecCtr << "]" << std::endl;
+ }
+ MyFile->Abort();
+ } else {
+ iRc = MyFile->Commit();
+ if( iRc != XB_NO_ERROR ){
+ if( !bQuiet ){
+ std::cout << "Error [" << iRc << "] on appending record [" << ulRecCtr << "]" << std::endl;
+ }
+ MyFile->Abort();
+ }
+ }
+ }
+
+ }
+
+ ulRecCtr++;
+
+ }
+
+
+
+
+
+ f.xbFclose();
+ return 0;
+}
+