From dd70ff8bf32c2d7ed365004b1770058265db1978 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?=
Date: Sat, 11 Mar 2023 18:15:37 +0100
Subject: New upstream version 4.1.0
---
NEWS | 20 +-
README | 2 +-
build/borland5.5/CMakeLists.txt | 98 ++-
build/cmake/CMakeLists.txt | 735 --------------------
build/cmake/copymake | 6 -
build/debian/CMakeLists.txt | 761 +++++++++++++++++++++
build/debian/README.debian | 23 +
build/linux32/CMakeLists.txt | 98 ++-
build/linux64/CMakeLists.txt | 98 ++-
build/mac64/CMakeLists.txt | 98 ++-
build/win32vs/CMakeLists.txt | 98 ++-
build/win64vs/CMakeLists.txt | 98 ++-
docs/doxygen/html/classxb_1_1xbDate.html | 140 ++--
docs/doxygen/html/classxb_1_1xbDbf.html | 339 ++++++---
docs/doxygen/html/classxb_1_1xbFile.html | 232 ++++---
docs/doxygen/html/classxb_1_1xbSsv.html | 140 ++--
docs/doxygen/html/classxb_1_1xbString.html | 49 +-
docs/doxygen/html/classxb_1_1xbTblMgr.html | 160 +++--
docs/doxygen/html/classxb_1_1xbXBase.html | 256 ++++---
.../html/dir_25b94c3afce00ed38231227d8141f932.html | 8 +-
.../html/dir_313caf1132e152dd9b58bea13a4052ca.html | 8 +-
.../html/dir_68267d1309a1af8e8297ef4c3efbcdba.html | 2 +-
.../html/dir_aebb8dcc11953d78e620bbef0b9e2183.html | 4 +-
.../html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html | 4 +-
.../html/dir_d93a1d4020dea85bb71b237545b5e722.html | 4 +-
.../html/dir_e931c1a3f0014e624d0645a271726ad2.html | 6 +-
docs/doxygen/html/files.html | 175 ++---
docs/doxygen/html/functions.html | 2 +-
docs/doxygen/html/functions_func.html | 2 +-
docs/doxygen/html/functions_func_g.html | 15 +-
docs/doxygen/html/functions_func_p.html | 2 +-
docs/doxygen/html/functions_func_s.html | 4 +-
docs/doxygen/html/functions_g.html | 15 +-
docs/doxygen/html/functions_p.html | 5 +-
docs/doxygen/html/functions_s.html | 4 +-
docs/doxygen/html/functions_vars.html | 1 +
docs/doxygen/html/globals.html | 14 +-
docs/doxygen/html/globals_defs.html | 3 +
docs/doxygen/html/globals_func.html | 9 +-
docs/doxygen/html/globals_vars.html | 2 +
docs/doxygen/html/menudata.js | 2 +
docs/doxygen/html/search/all_0.js | 2 +-
docs/doxygen/html/search/all_10.js | 12 +-
docs/doxygen/html/search/all_15.js | 430 ++++++------
docs/doxygen/html/search/all_6.js | 119 ++--
docs/doxygen/html/search/all_b.js | 6 +-
docs/doxygen/html/search/all_e.js | 28 +-
docs/doxygen/html/search/defines_3.js | 163 ++---
docs/doxygen/html/search/files_1.js | 165 ++---
docs/doxygen/html/search/functions_0.js | 2 +-
docs/doxygen/html/search/functions_10.js | 12 +-
docs/doxygen/html/search/functions_6.js | 119 ++--
docs/doxygen/html/search/functions_b.js | 2 +-
docs/doxygen/html/search/functions_e.js | 23 +-
docs/doxygen/html/search/searchdata.js | 2 +-
docs/doxygen/html/search/variables_3.js | 6 +-
docs/doxygen/html/search/variables_4.js | 7 +-
docs/doxygen/html/search/variables_5.js | 5 +-
docs/doxygen/html/search/variables_6.js | 4 +-
docs/doxygen/html/search/variables_7.js | 5 +-
docs/doxygen/html/search/variables_8.js | 9 +-
docs/doxygen/html/search/variables_9.html | 37 +
docs/doxygen/html/search/variables_9.js | 8 +
docs/doxygen/html/structxb_1_1xbSchema.html | 2 +-
docs/doxygen/html/structxb_1_1xbTblList.html | 18 +-
docs/doxygen/html/tstfuncs_8cpp.html | 2 +-
docs/doxygen/html/xb__cfg__check_8cpp.html | 2 +-
docs/doxygen/html/xb__copydbf_8cpp.html | 54 +-
docs/doxygen/html/xb__dbfutil_8cpp.html | 56 +-
docs/doxygen/html/xb__deletall_8cpp.html | 54 +-
docs/doxygen/html/xb__dumpdbt_8cpp.html | 54 +-
docs/doxygen/html/xb__dumphdr_8cpp.html | 2 +-
docs/doxygen/html/xb__dumpix_8cpp.html | 2 +-
docs/doxygen/html/xb__dumprecs_8cpp.html | 54 +-
docs/doxygen/html/xb__ex__date_8cpp.html | 2 +-
docs/doxygen/html/xb__ex__expression_8cpp.html | 168 +++++
docs/doxygen/html/xb__ex__sql_8cpp.html | 2 +-
docs/doxygen/html/xb__ex__ssv_8cpp.html | 117 ++++
docs/doxygen/html/xb__ex__string_8cpp.html | 2 +-
.../doxygen/html/xb__ex__v3__create__dbf_8cpp.html | 2 +-
docs/doxygen/html/xb__ex__v3__upd__dbf_8cpp.html | 2 +-
.../doxygen/html/xb__ex__v4__create__dbf_8cpp.html | 2 +-
docs/doxygen/html/xb__ex__v4__upd__dbf_8cpp.html | 2 +-
docs/doxygen/html/xb__execsql_8cpp.html | 2 +-
docs/doxygen/html/xb__pack_8cpp.html | 54 +-
docs/doxygen/html/xb__tblinfo_8cpp.html | 54 +-
docs/doxygen/html/xb__test__bcd_8cpp.html | 2 +-
docs/doxygen/html/xb__test__blockread_8cpp.html | 147 ++++
.../html/xb__test__blockread__save_8cpp.html | 147 ++++
docs/doxygen/html/xb__test__date_8cpp.html | 2 +-
.../html/xb__test__dbf__v3__memos_8cpp.html | 2 +-
.../html/xb__test__dbf__v3__nomemos_8cpp.html | 2 +-
.../html/xb__test__dbf__v4__memos_8cpp.html | 2 +-
.../html/xb__test__dbf__v4__nomemos_8cpp.html | 2 +-
docs/doxygen/html/xb__test__expnode_8cpp.html | 2 +-
docs/doxygen/html/xb__test__expression_8cpp.html | 2 +-
docs/doxygen/html/xb__test__file_8cpp.html | 2 +-
docs/doxygen/html/xb__test__filter_8cpp.html | 2 +-
docs/doxygen/html/xb__test__funcs_8cpp.html | 2 +-
docs/doxygen/html/xb__test__linklist_8cpp.html | 2 +-
docs/doxygen/html/xb__test__lock2_8cpp.html | 2 +-
docs/doxygen/html/xb__test__lock_8cpp.html | 2 +-
docs/doxygen/html/xb__test__log_8cpp.html | 2 +-
docs/doxygen/html/xb__test__mdx_8cpp.html | 2 +-
docs/doxygen/html/xb__test__ndx_8cpp.html | 2 +-
docs/doxygen/html/xb__test__sql_8cpp.html | 2 +-
docs/doxygen/html/xb__test__string_8cpp.html | 2 +-
docs/doxygen/html/xb__test__tblmgr_8cpp.html | 2 +-
docs/doxygen/html/xb__test__uda_8cpp.html | 2 +-
docs/doxygen/html/xb__test__xbase_8cpp.html | 2 +-
docs/doxygen/html/xb__undelall_8cpp.html | 54 +-
docs/doxygen/html/xb__zap_8cpp.html | 2 +-
docs/doxygen/html/xbalttbl_8cpp.html | 2 +-
docs/doxygen/html/xbase_8h.html | 3 +-
docs/doxygen/html/xbase_8h_source.html | 98 +--
docs/doxygen/html/xbbcd_8cpp.html | 2 +-
docs/doxygen/html/xbbcd_8h.html | 2 +-
docs/doxygen/html/xbbcd_8h_source.html | 2 +-
docs/doxygen/html/xbblkread_8h.html | 89 +++
docs/doxygen/html/xbblkread_8h_source.html | 145 ++++
docs/doxygen/html/xbblockread_8cpp.html | 80 +++
docs/doxygen/html/xbcrix_8cpp.html | 2 +-
docs/doxygen/html/xbcrtbl_8cpp.html | 2 +-
docs/doxygen/html/xbcrtbl_8save_8cpp.html | 80 +++
docs/doxygen/html/xbdate_8cpp.html | 2 +-
docs/doxygen/html/xbdate_8h.html | 2 +-
docs/doxygen/html/xbdate_8h_source.html | 59 +-
docs/doxygen/html/xbdbf3_8cpp.html | 2 +-
docs/doxygen/html/xbdbf4_8cpp.html | 2 +-
docs/doxygen/html/xbdbf_8cpp.html | 2 +-
docs/doxygen/html/xbdbf_8h.html | 2 +-
docs/doxygen/html/xbdbf_8h_source.html | 724 ++++++++++----------
docs/doxygen/html/xbdelete_8cpp.html | 2 +-
docs/doxygen/html/xbdrpix_8cpp.html | 2 +-
docs/doxygen/html/xbdrptbl_8cpp.html | 2 +-
docs/doxygen/html/xbexp_8cpp.html | 2 +-
docs/doxygen/html/xbexp_8h.html | 2 +-
docs/doxygen/html/xbexp_8h_source.html | 2 +-
docs/doxygen/html/xbexpnode_8cpp.html | 2 +-
docs/doxygen/html/xbexpnode_8h.html | 2 +-
docs/doxygen/html/xbexpnode_8h_source.html | 2 +-
docs/doxygen/html/xbfields_8cpp.html | 2 +-
docs/doxygen/html/xbfile_8cpp.html | 2 +-
docs/doxygen/html/xbfile_8h.html | 2 +-
docs/doxygen/html/xbfile_8h_source.html | 244 +++----
docs/doxygen/html/xbfilter_8cpp.html | 2 +-
docs/doxygen/html/xbfilter_8h.html | 2 +-
docs/doxygen/html/xbfilter_8h_source.html | 29 +-
docs/doxygen/html/xbfuncs_8cpp.html | 2 +-
docs/doxygen/html/xbindex_8h.html | 2 +-
docs/doxygen/html/xbindex_8h_source.html | 2 +-
docs/doxygen/html/xbinsert_8cpp.html | 2 +-
docs/doxygen/html/xbixbase_8cpp.html | 2 +-
docs/doxygen/html/xbixmdx_8cpp.html | 2 +-
docs/doxygen/html/xbixndx_8cpp.html | 2 +-
docs/doxygen/html/xblnklst_8h.html | 2 +-
docs/doxygen/html/xblnklst_8h_source.html | 4 +-
docs/doxygen/html/xblnklstord_8h.html | 2 +-
docs/doxygen/html/xblnklstord_8h_source.html | 4 +-
docs/doxygen/html/xblnknod_8h.html | 2 +-
docs/doxygen/html/xblnknod_8h_source.html | 2 +-
docs/doxygen/html/xblog_8cpp.html | 2 +-
docs/doxygen/html/xblog_8h.html | 2 +-
docs/doxygen/html/xblog_8h_source.html | 2 +-
docs/doxygen/html/xbmemo3_8cpp.html | 2 +-
docs/doxygen/html/xbmemo4_8cpp.html | 2 +-
docs/doxygen/html/xbmemo_8cpp.html | 2 +-
docs/doxygen/html/xbmemo_8h.html | 2 +-
docs/doxygen/html/xbmemo_8h_source.html | 2 +-
docs/doxygen/html/xbretcod_8h.html | 50 +-
docs/doxygen/html/xbretcod_8h_source.html | 123 ++--
docs/doxygen/html/xbselect_8cpp.html | 80 +++
docs/doxygen/html/xbset_8cpp.html | 2 +-
docs/doxygen/html/xbsql_8cpp.html | 2 +-
docs/doxygen/html/xbsql_8h.html | 2 +-
docs/doxygen/html/xbsql_8h_source.html | 170 +++--
docs/doxygen/html/xbssv_8cpp.html | 2 +-
docs/doxygen/html/xbssv_8h.html | 2 +-
docs/doxygen/html/xbssv_8h_source.html | 189 ++---
docs/doxygen/html/xbstmt_8cpp.html | 80 +++
docs/doxygen/html/xbstring_8cpp.html | 2 +-
docs/doxygen/html/xbstring_8h.html | 2 +-
docs/doxygen/html/xbstring_8h_source.html | 98 +--
docs/doxygen/html/xbtag_8cpp.html | 2 +-
docs/doxygen/html/xbtag_8h.html | 2 +-
docs/doxygen/html/xbtag_8h_source.html | 2 +-
docs/doxygen/html/xbtblmgr_8cpp.html | 2 +-
docs/doxygen/html/xbtblmgr_8h.html | 2 +-
docs/doxygen/html/xbtblmgr_8h_source.html | 72 +-
docs/doxygen/html/xbtypes_8h.html | 2 +-
docs/doxygen/html/xbtypes_8h_source.html | 2 +-
docs/doxygen/html/xbuda_8cpp.html | 2 +-
docs/doxygen/html/xbuda_8h.html | 2 +-
docs/doxygen/html/xbuda_8h_source.html | 8 +-
docs/doxygen/html/xbxbase_8cpp.html | 2 +-
docs/doxygen/html/xbxbase_8h.html | 2 +-
docs/doxygen/html/xbxbase_8h_source.html | 154 +++--
docs/doxygen/latex/classxb_1_1xbDate.pdf | Bin 4739 -> 4739 bytes
docs/doxygen/latex/classxb_1_1xbDate.tex | 68 +-
docs/doxygen/latex/classxb_1_1xbDbf.pdf | Bin 4914 -> 4914 bytes
docs/doxygen/latex/classxb_1_1xbDbf.tex | 139 +++-
docs/doxygen/latex/classxb_1_1xbFile.pdf | Bin 4915 -> 4915 bytes
docs/doxygen/latex/classxb_1_1xbFile.tex | 85 ++-
docs/doxygen/latex/classxb_1_1xbSsv.pdf | Bin 6100 -> 6100 bytes
docs/doxygen/latex/classxb_1_1xbSsv.tex | 68 +-
docs/doxygen/latex/classxb_1_1xbString.tex | 30 +-
docs/doxygen/latex/classxb_1_1xbTblMgr.pdf | Bin 5490 -> 5490 bytes
docs/doxygen/latex/classxb_1_1xbTblMgr.tex | 80 ++-
docs/doxygen/latex/classxb_1_1xbXBase.pdf | Bin 5492 -> 5492 bytes
docs/doxygen/latex/classxb_1_1xbXBase.tex | 114 ++-
.../latex/dir_25b94c3afce00ed38231227d8141f932.tex | 10 +-
.../latex/dir_313caf1132e152dd9b58bea13a4052ca.tex | 10 +-
.../latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex | 4 +-
.../latex/dir_aebb8dcc11953d78e620bbef0b9e2183.tex | 6 +-
.../latex/dir_b0856f6b0d80ccb263b2f415c91f9e17.tex | 6 +-
.../latex/dir_d93a1d4020dea85bb71b237545b5e722.tex | 6 +-
.../latex/dir_e931c1a3f0014e624d0645a271726ad2.tex | 8 +-
docs/doxygen/latex/files.tex | 203 +++---
docs/doxygen/latex/refman.tex | 12 +-
docs/doxygen/latex/structxb_1_1xbSchema.tex | 2 +-
docs/doxygen/latex/structxb_1_1xbTblList.tex | 10 +-
docs/doxygen/latex/tstfuncs_8cpp.tex | 4 +-
docs/doxygen/latex/xb__cfg__check_8cpp.tex | 4 +-
docs/doxygen/latex/xb__copydbf_8cpp.tex | 26 +-
docs/doxygen/latex/xb__dbfutil_8cpp.tex | 26 +-
docs/doxygen/latex/xb__deletall_8cpp.tex | 26 +-
docs/doxygen/latex/xb__dumpdbt_8cpp.tex | 26 +-
docs/doxygen/latex/xb__dumphdr_8cpp.tex | 4 +-
docs/doxygen/latex/xb__dumpix_8cpp.tex | 4 +-
docs/doxygen/latex/xb__dumprecs_8cpp.tex | 26 +-
docs/doxygen/latex/xb__ex__date_8cpp.tex | 4 +-
docs/doxygen/latex/xb__ex__expression_8cpp.tex | 51 ++
docs/doxygen/latex/xb__ex__sql_8cpp.tex | 4 +-
docs/doxygen/latex/xb__ex__ssv_8cpp.tex | 17 +
docs/doxygen/latex/xb__ex__string_8cpp.tex | 4 +-
.../doxygen/latex/xb__ex__v3__create__dbf_8cpp.tex | 4 +-
docs/doxygen/latex/xb__ex__v3__upd__dbf_8cpp.tex | 4 +-
.../doxygen/latex/xb__ex__v4__create__dbf_8cpp.tex | 4 +-
docs/doxygen/latex/xb__ex__v4__upd__dbf_8cpp.tex | 4 +-
docs/doxygen/latex/xb__execsql_8cpp.tex | 4 +-
docs/doxygen/latex/xb__pack_8cpp.tex | 26 +-
docs/doxygen/latex/xb__tblinfo_8cpp.tex | 26 +-
docs/doxygen/latex/xb__test__bcd_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__blockread_8cpp.tex | 42 ++
.../latex/xb__test__blockread__save_8cpp.tex | 42 ++
docs/doxygen/latex/xb__test__date_8cpp.tex | 4 +-
.../latex/xb__test__dbf__v3__memos_8cpp.tex | 4 +-
.../latex/xb__test__dbf__v3__nomemos_8cpp.tex | 4 +-
.../latex/xb__test__dbf__v4__memos_8cpp.tex | 4 +-
.../latex/xb__test__dbf__v4__nomemos_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__expnode_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__expression_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__file_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__filter_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__funcs_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__linklist_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__lock2_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__lock_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__log_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__mdx_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__ndx_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__sql_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__string_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__tblmgr_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__uda_8cpp.tex | 4 +-
docs/doxygen/latex/xb__test__xbase_8cpp.tex | 4 +-
docs/doxygen/latex/xb__undelall_8cpp.tex | 26 +-
docs/doxygen/latex/xb__zap_8cpp.tex | 4 +-
docs/doxygen/latex/xbalttbl_8cpp.tex | 4 +-
docs/doxygen/latex/xbase_8h.tex | 5 +-
docs/doxygen/latex/xbase_8h_source.tex | 97 +--
docs/doxygen/latex/xbbcd_8cpp.tex | 4 +-
docs/doxygen/latex/xbbcd_8h.tex | 4 +-
docs/doxygen/latex/xbbcd_8h_source.tex | 2 +-
docs/doxygen/latex/xbblkread_8h.tex | 7 +
docs/doxygen/latex/xbblkread_8h_source.tex | 69 ++
docs/doxygen/latex/xbblockread_8cpp.tex | 3 +
docs/doxygen/latex/xbcrix_8cpp.tex | 4 +-
docs/doxygen/latex/xbcrtbl_8cpp.tex | 4 +-
docs/doxygen/latex/xbcrtbl_8save_8cpp.tex | 3 +
docs/doxygen/latex/xbdate_8cpp.tex | 4 +-
docs/doxygen/latex/xbdate_8h.tex | 4 +-
docs/doxygen/latex/xbdate_8h_source.tex | 59 +-
docs/doxygen/latex/xbdbf3_8cpp.tex | 4 +-
docs/doxygen/latex/xbdbf4_8cpp.tex | 4 +-
docs/doxygen/latex/xbdbf_8cpp.tex | 4 +-
docs/doxygen/latex/xbdbf_8h.tex | 4 +-
docs/doxygen/latex/xbdbf_8h_source.tex | 721 +++++++++----------
docs/doxygen/latex/xbdelete_8cpp.tex | 4 +-
docs/doxygen/latex/xbdrpix_8cpp.tex | 4 +-
docs/doxygen/latex/xbdrptbl_8cpp.tex | 4 +-
docs/doxygen/latex/xbexp_8cpp.tex | 4 +-
docs/doxygen/latex/xbexp_8h.tex | 4 +-
docs/doxygen/latex/xbexp_8h_source.tex | 2 +-
docs/doxygen/latex/xbexpnode_8cpp.tex | 4 +-
docs/doxygen/latex/xbexpnode_8h.tex | 4 +-
docs/doxygen/latex/xbexpnode_8h_source.tex | 2 +-
docs/doxygen/latex/xbfields_8cpp.tex | 4 +-
docs/doxygen/latex/xbfile_8cpp.tex | 4 +-
docs/doxygen/latex/xbfile_8h.tex | 4 +-
docs/doxygen/latex/xbfile_8h_source.tex | 242 +++----
docs/doxygen/latex/xbfilter_8cpp.tex | 4 +-
docs/doxygen/latex/xbfilter_8h.tex | 4 +-
docs/doxygen/latex/xbfilter_8h_source.tex | 28 +-
docs/doxygen/latex/xbfuncs_8cpp.tex | 4 +-
docs/doxygen/latex/xbindex_8h.tex | 4 +-
docs/doxygen/latex/xbindex_8h_source.tex | 2 +-
docs/doxygen/latex/xbinsert_8cpp.tex | 4 +-
docs/doxygen/latex/xbixbase_8cpp.tex | 4 +-
docs/doxygen/latex/xbixmdx_8cpp.tex | 4 +-
docs/doxygen/latex/xbixndx_8cpp.tex | 4 +-
docs/doxygen/latex/xblnklst_8h.tex | 4 +-
docs/doxygen/latex/xblnklst_8h_source.tex | 2 +-
docs/doxygen/latex/xblnklstord_8h.tex | 4 +-
docs/doxygen/latex/xblnklstord_8h_source.tex | 2 +-
docs/doxygen/latex/xblnknod_8h.tex | 4 +-
docs/doxygen/latex/xblnknod_8h_source.tex | 2 +-
docs/doxygen/latex/xblog_8cpp.tex | 4 +-
docs/doxygen/latex/xblog_8h.tex | 4 +-
docs/doxygen/latex/xblog_8h_source.tex | 2 +-
docs/doxygen/latex/xbmemo3_8cpp.tex | 4 +-
docs/doxygen/latex/xbmemo4_8cpp.tex | 4 +-
docs/doxygen/latex/xbmemo_8cpp.tex | 4 +-
docs/doxygen/latex/xbmemo_8h.tex | 4 +-
docs/doxygen/latex/xbmemo_8h_source.tex | 2 +-
docs/doxygen/latex/xbretcod_8h.tex | 28 +-
docs/doxygen/latex/xbretcod_8h_source.tex | 123 ++--
docs/doxygen/latex/xbselect_8cpp.tex | 3 +
docs/doxygen/latex/xbset_8cpp.tex | 4 +-
docs/doxygen/latex/xbsql_8cpp.tex | 4 +-
docs/doxygen/latex/xbsql_8h.tex | 4 +-
docs/doxygen/latex/xbsql_8h_source.tex | 169 +++--
docs/doxygen/latex/xbssv_8cpp.tex | 4 +-
docs/doxygen/latex/xbssv_8h.tex | 4 +-
docs/doxygen/latex/xbssv_8h_source.tex | 185 ++---
docs/doxygen/latex/xbstmt_8cpp.tex | 3 +
docs/doxygen/latex/xbstring_8cpp.tex | 4 +-
docs/doxygen/latex/xbstring_8h.tex | 4 +-
docs/doxygen/latex/xbstring_8h_source.tex | 98 +--
docs/doxygen/latex/xbtag_8cpp.tex | 4 +-
docs/doxygen/latex/xbtag_8h.tex | 4 +-
docs/doxygen/latex/xbtag_8h_source.tex | 2 +-
docs/doxygen/latex/xbtblmgr_8cpp.tex | 4 +-
docs/doxygen/latex/xbtblmgr_8h.tex | 4 +-
docs/doxygen/latex/xbtblmgr_8h_source.tex | 63 +-
docs/doxygen/latex/xbtypes_8h.tex | 4 +-
docs/doxygen/latex/xbtypes_8h_source.tex | 2 +-
docs/doxygen/latex/xbuda_8cpp.tex | 4 +-
docs/doxygen/latex/xbuda_8h.tex | 4 +-
docs/doxygen/latex/xbuda_8h_source.tex | 8 +-
docs/doxygen/latex/xbxbase_8cpp.tex | 4 +-
docs/doxygen/latex/xbxbase_8h.tex | 4 +-
docs/doxygen/latex/xbxbase_8h_source.tex | 152 ++--
docs/html/index.html | 8 +-
docs/html/xbac.html | 13 +-
docs/html/xbae.html | 6 +-
docs/html/xbc15.html | 127 ++--
docs/html/xbc16.html | 52 ++
docs/html/xbc17.html | 219 ++++++
docs/html/xbc18.html | 252 +++++++
docs/man/xb_cfg_chk.1.gz | Bin 0 -> 546 bytes
docs/man/xb_copydbf.1.gz | Bin 0 -> 705 bytes
docs/man/xb_dbfutil.1.gz | Bin 0 -> 633 bytes
docs/man/xb_deletall.1.gz | Bin 0 -> 656 bytes
docs/man/xb_dumpdbt.1.gz | Bin 0 -> 672 bytes
docs/man/xb_dumprecs.1.gz | Bin 0 -> 691 bytes
docs/man/xb_pack.1.gz | Bin 0 -> 697 bytes
docs/man/xb_tblinfo.1.gz | Bin 0 -> 675 bytes
docs/man/xb_undelall.1.gz | Bin 0 -> 690 bytes
sql/jointest.sql | 43 ++
src/core/xbbcd.cpp | 5 +-
src/core/xbblockread.cpp | 271 ++++++++
src/core/xbdbf.cpp | 154 ++++-
src/core/xbdbf3.cpp | 8 +-
src/core/xbdbf4.cpp | 19 +-
src/core/xbexp.cpp | 31 +-
src/core/xbfile.cpp | 286 ++++++--
src/core/xbfilter.cpp | 50 +-
src/core/xbixmdx.cpp | 50 +-
src/core/xbixndx.cpp | 3 +-
src/core/xblog.cpp | 4 +-
src/core/xbssv.cpp | 111 +--
src/core/xbstring.cpp | 71 +-
src/core/xbtblmgr.cpp | 85 ++-
src/core/xbxbase.cpp | 54 +-
src/examples/xb_ex_expression.cpp | 4 +-
src/examples/xb_ex_ssv.cpp | 134 ++++
src/examples/xb_ex_v4_upd_dbf.cpp | 6 +-
src/include/xbase.h | 7 +-
src/include/xbblkread.h | 70 ++
src/include/xbconfig.h.in | 2 +
src/include/xbdate.h | 1 -
src/include/xbdbf.h | 37 +-
src/include/xbfile.h | 4 +
src/include/xbfilter.h | 6 +-
src/include/xbretcod.h | 5 +-
src/include/xbsql.h | 78 ++-
src/include/xbssv.h | 31 +-
src/include/xbstring.h | 2 +
src/include/xbtblmgr.h | 9 +-
src/include/xbuda.h | 6 +-
src/include/xbxbase.h | 10 +-
src/sql/xbalttbl.cpp | 7 +-
src/sql/xbcrix.cpp | 16 +-
src/sql/xbcrtbl.cpp | 49 +-
src/sql/xbcrtbl.save.cpp | 256 +++++++
src/sql/xbdelete.cpp | 2 +-
src/sql/xbdrptbl.cpp | 9 +-
src/sql/xbselect.cpp | 17 +-
src/sql/xbset.cpp | 5 +-
src/sql/xbsql.cpp | 3 -
src/sql/xbstmt.cpp | 679 ++++++++++++++++++
src/tests/xb_test_bcd.cpp | 5 +-
src/tests/xb_test_blockread.cpp | 168 +++++
src/tests/xb_test_date.cpp | 7 +-
src/tests/xb_test_dbf_v3_memos.cpp | 4 +-
src/tests/xb_test_dbf_v3_nomemos.cpp | 10 +-
src/tests/xb_test_dbf_v4_memos.cpp | 10 +-
src/tests/xb_test_dbf_v4_nomemos.cpp | 29 +-
src/tests/xb_test_expnode.cpp | 4 +-
src/tests/xb_test_expression.cpp | 7 +-
src/tests/xb_test_file.cpp | 3 +-
src/tests/xb_test_filter.cpp | 8 +-
src/tests/xb_test_funcs.cpp | 3 +-
src/tests/xb_test_linklist.cpp | 8 +-
src/tests/xb_test_lock.cpp | 4 +-
src/tests/xb_test_lock2.cpp | 5 +-
src/tests/xb_test_log.cpp | 15 +-
src/tests/xb_test_mdx.cpp | 70 +-
src/tests/xb_test_ndx.cpp | 15 +-
src/tests/xb_test_sql.cpp | 151 ++--
src/tests/xb_test_string.cpp | 11 +-
src/tests/xb_test_tblmgr.cpp | 81 +--
src/tests/xb_test_uda.cpp | 9 +-
src/tests/xb_test_xbase.cpp | 44 +-
src/utils/xb_cfg_check.cpp | 84 ++-
src/utils/xb_copydbf.cpp | 78 ++-
src/utils/xb_dbfutil.cpp | 453 ++++++------
src/utils/xb_deletall.cpp | 54 +-
src/utils/xb_dumpdbt.cpp | 54 +-
src/utils/xb_dumphdr.cpp | 45 --
src/utils/xb_dumpix.cpp | 56 --
src/utils/xb_dumprecs.cpp | 60 +-
src/utils/xb_execsql.cpp | 2 +-
src/utils/xb_pack.cpp | 54 +-
src/utils/xb_tblinfo.cpp | 105 +--
src/utils/xb_undelall.cpp | 53 +-
src/utils/xb_zap.cpp | 52 --
448 files changed, 11945 insertions(+), 5638 deletions(-)
delete mode 100755 build/cmake/CMakeLists.txt
delete mode 100755 build/cmake/copymake
create mode 100755 build/debian/CMakeLists.txt
create mode 100644 build/debian/README.debian
create mode 100644 docs/doxygen/html/search/variables_9.html
create mode 100644 docs/doxygen/html/search/variables_9.js
create mode 100644 docs/doxygen/html/xb__ex__expression_8cpp.html
create mode 100644 docs/doxygen/html/xb__ex__ssv_8cpp.html
create mode 100644 docs/doxygen/html/xb__test__blockread_8cpp.html
create mode 100644 docs/doxygen/html/xb__test__blockread__save_8cpp.html
create mode 100644 docs/doxygen/html/xbblkread_8h.html
create mode 100644 docs/doxygen/html/xbblkread_8h_source.html
create mode 100644 docs/doxygen/html/xbblockread_8cpp.html
create mode 100644 docs/doxygen/html/xbcrtbl_8save_8cpp.html
create mode 100644 docs/doxygen/html/xbselect_8cpp.html
create mode 100644 docs/doxygen/html/xbstmt_8cpp.html
create mode 100644 docs/doxygen/latex/xb__ex__expression_8cpp.tex
create mode 100644 docs/doxygen/latex/xb__ex__ssv_8cpp.tex
create mode 100644 docs/doxygen/latex/xb__test__blockread_8cpp.tex
create mode 100644 docs/doxygen/latex/xb__test__blockread__save_8cpp.tex
create mode 100644 docs/doxygen/latex/xbblkread_8h.tex
create mode 100644 docs/doxygen/latex/xbblkread_8h_source.tex
create mode 100644 docs/doxygen/latex/xbblockread_8cpp.tex
create mode 100644 docs/doxygen/latex/xbcrtbl_8save_8cpp.tex
create mode 100644 docs/doxygen/latex/xbselect_8cpp.tex
create mode 100644 docs/doxygen/latex/xbstmt_8cpp.tex
create mode 100755 docs/html/xbc16.html
create mode 100755 docs/html/xbc17.html
create mode 100755 docs/html/xbc18.html
create mode 100644 docs/man/xb_cfg_chk.1.gz
create mode 100644 docs/man/xb_copydbf.1.gz
create mode 100644 docs/man/xb_dbfutil.1.gz
create mode 100644 docs/man/xb_deletall.1.gz
create mode 100644 docs/man/xb_dumpdbt.1.gz
create mode 100644 docs/man/xb_dumprecs.1.gz
create mode 100644 docs/man/xb_pack.1.gz
create mode 100644 docs/man/xb_tblinfo.1.gz
create mode 100644 docs/man/xb_undelall.1.gz
create mode 100755 sql/jointest.sql
create mode 100755 src/core/xbblockread.cpp
create mode 100755 src/examples/xb_ex_ssv.cpp
create mode 100755 src/include/xbblkread.h
create mode 100755 src/sql/xbcrtbl.save.cpp
create mode 100755 src/sql/xbstmt.cpp
create mode 100755 src/tests/xb_test_blockread.cpp
delete mode 100755 src/utils/xb_dumphdr.cpp
delete mode 100755 src/utils/xb_dumpix.cpp
delete mode 100755 src/utils/xb_zap.cpp
diff --git a/NEWS b/NEWS
index 60fdc49..1dd9edd 100755
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,25 @@
-Xbase64 (Dec 26, 2022)
+Xbase64 (Feb 1, 2023)
------------------------
+4.1.0 - 03/02/23
+
+1) Created block read functionality, class xbBlockRead
+2) SQL Updates - Started development of structures needed to support basic
+ SQL SELECT statement - SELECT f FROM t WHERE x=z ORDER BY o
+ Caveat: **** SQL support is still in development phase ******
+3) Updates to class xbTblMgr functionality
+4) New method xbString::Pos( char c, xbUInt32 ulStartPos )
+5) Updated xb_cfg_check program
+6) Added method xbDbf::GetHeaderLen()
+7) Documentation updates
+8) Updates to SQL Create Table logic
+9) Updates to MDX create tag key length calculation
+10) Updated default log file folder to $HOME/xbase64/logs
+11) Updated default data file folder to $HOME/xbase64/data
+12) Created initial round of man pages for utility programs
+13) Created Debian specific build folder
+
4.0.3 - 12/26/22
diff --git a/README b/README
index bea1789..2005427 100755
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
- Xbase64 Version 4.0.3
+ Xbase64 Version 4.1.1
12/26/22
diff --git a/build/borland5.5/CMakeLists.txt b/build/borland5.5/CMakeLists.txt
index 516b9c9..f514c5c 100755
--- a/build/borland5.5/CMakeLists.txt
+++ b/build/borland5.5/CMakeLists.txt
@@ -2,12 +2,13 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 3 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 0 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -152,42 +153,43 @@ IF( NOT ${iSize} EQUAL 8 )
ENDIF( NOT ${iSize} EQUAL 8 )
#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries?" 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)
-option( XB_MEMO_SUPPORT "Compile memo field support into library?" ON)
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+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_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
option( XB_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_MEMO_SUPPORT " ${XB_MEMO_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_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_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_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -218,6 +220,7 @@ 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)
@@ -250,6 +253,8 @@ 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
@@ -261,8 +266,6 @@ 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 )
@@ -300,7 +303,6 @@ 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" )
@@ -353,6 +355,10 @@ IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
# Build configuration header file
@@ -445,6 +451,7 @@ IF( XB_SQL_SUPPORT )
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 )
@@ -453,6 +460,9 @@ 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 )
@@ -593,6 +603,12 @@ 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 )
@@ -633,6 +649,8 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -654,13 +672,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
- add_executable( xb_dumphdr ${PROJECT_SOURCE_DIR}/utils/xb_dumphdr.cpp )
- target_link_libraries( xb_dumphdr ${EXTRA_LIBS})
-
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -675,20 +689,14 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
target_link_libraries( xb_undelall ${EXTRA_LIBS})
- add_executable( xb_zap ${PROJECT_SOURCE_DIR}/utils/xb_zap.cpp )
- target_link_libraries( xb_zap ${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_dumphdr DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
- install (TARGETS xb_zap DESTINATION bin)
IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
ENDIF( XB_SQL_SUPPORT )
@@ -721,10 +729,28 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+
DESTINATION include/${CMAKE_PROJECT_NAME})
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
+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})
diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt
deleted file mode 100755
index 516b9c9..0000000
--- a/build/cmake/CMakeLists.txt
+++ /dev/null
@@ -1,735 +0,0 @@
-cmake_minimum_required(VERSION 3.0)
-
-project (xbase64)
-set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 3 )
-
-MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
-MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
-MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
-
-#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_DEBUG_SUPPORT "Compile debug logic into library?" ON)
-option( XB_UTILS_SUPPORT "Compile utility programs?" ON)
-option( XB_EXAMPLES_SUPPORT "Compile example programs?" ON)
-option( XB_MEMO_SUPPORT "Compile memo field support into library?" ON)
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" 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_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
-option( XB_LOCKING_SUPPORT "Compile Multi User Locking support 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_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
-option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
-option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
-
-
-Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
-Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_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_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
-Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
-Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
-Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
-Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
-Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
-Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
-Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
-
-IF( XB_DEBUG_SUPPORT )
- 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 (stdarg.h HAVE_STDARG_H)
-CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
-CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
-CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
-CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
-CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
-CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
-CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
-
-#Check for the existence of various function calls
-INCLUDE( CheckFunctionExists )
-CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
-CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
-CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
-CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
-CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
-CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
-CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
-CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
-CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
-CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
-CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
-CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
-CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
-CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
-CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
-CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
-
-CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
-CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
-
-
-IF( WIN32 )
-
-# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
-# Can't detect inline functions in headers
-# Can't detect due to mismatch of calling conventions
-# Can't detect mangled names
-
-INCLUDE( CheckSymbolExists )
-CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
-CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
-
-
-
-ENDIF ( WIN32 )
-
-# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-# # ----fix me----
-# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
-# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
-# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
-
-IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
- # ----fix me----
- # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
- Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
-ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
-
-IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
- Set( XB_INDEX_SUPPORT "1" )
-ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
-
-
-# Set directories
-# PROJECT_PARENT_DIR is two nodes higher
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
-get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
-
-# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
-# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
-
-
-set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
-set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
-set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
-set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
-set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
-set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
-
-
-
-
-# Undo bad decisions
-IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
- MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
- MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
- set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
-ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
-
-IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for indices. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
- MESSAGE( "--- Function support required for expressions. Setting to ON" )
- set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
- MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
- set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
-ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
- MESSAGE( "--- Memo support required for SQL. Setting to ON" )
- set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
-
-IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
- MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
- set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
-ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
-
-IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
- MESSAGE( "--- Expression required for filters. Setting to ON" )
- set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
-ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
-
-
-
-# Build configuration header file
-configure_file (
- "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
- "${PROJECT_BINARY_DIR}/include/xbconfig.h"
-)
-
-# Microsoft Windows settings
-IF( WIN32 )
-# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
- add_definitions( /EHsc )
-ENDIF( WIN32 )
-
-
-# set up include directories
-include_directories( "${PROJECT_BINARY_DIR}/include" )
-include_directories( "${PROJECT_SOURCE_DIR}/include" )
-
-#build the library
-IF ( BUILD_SHARED_LIBS )
- set( LIB_TYPE SHARED )
-ELSE( BUILD_SHARED_LIBS )
- set( LIB_TYPE STATIC )
-ENDIF( BUILD_SHARED_LIBS )
-MESSAGE( "--- Lib type " ${LIB_TYPE} )
-
-
-
-set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
- ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
- ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
- ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
- ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
- ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
- ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
-
-IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
-ENDIF( XB_MEMO_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
- IF( XB_MEMO_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
- ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_EXPRESSION_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
-ENDIF( XB_INDEX_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
-ENDIF( XB_NDX_SUPPORT )
-
-
-IF( XB_MDX_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
-ENDIF( XB_SQL_SUPPORT )
-
-
-IF( XB_FILTER_SUPPORT )
- set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
-ENDIF( XB_FILTER_SUPPORT )
-
-
-
-include( GenerateExportHeader )
-#add_library( xbase ${LIB_TYPE} ${SOURCES} )
-add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
-#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
-
-
-IF( WIN32 )
-MESSAGE( "--- Generating Windows Library Headers" )
-
-#GENERATE_EXPORT_HEADER( xbase
-# BASE_NAME xbase
-
-GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
- BASE_NAME ${XB_LIBNAME}
- EXPORT_MACRO_NAME xbase_EXPORT
- EXPORT_FILE_NAME xbase_Export.h
- STATIC_DEFINE xbase_BUILT_AS_STATIC
-)
-ENDIF( WIN32 )
-
-
-#build test programs
-enable_testing()
-
-add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
-target_link_libraries( xb_test_string ${EXTRA_LIBS})
-add_test( NAME xbString COMMAND xb_test_string QUIET )
-
-add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
-target_link_libraries( xb_test_date ${EXTRA_LIBS})
-add_test( NAME xbDate COMMAND xb_test_date QUIET )
-
-add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
-target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
-add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
-
-add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
-target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
-add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
-
-add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
-target_link_libraries( xb_test_file ${EXTRA_LIBS})
-add_test( NAME xbFile COMMAND xb_test_file QUIET )
-
-add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
-target_link_libraries( xb_test_log ${EXTRA_LIBS})
-add_test( NAME xbLog COMMAND xb_test_log QUIET )
-
-IF( XB_LINKLIST_SUPPORT )
-add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
-target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
-add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
-ENDIF( XB_LINKLIST_SUPPORT )
-
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
-target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF3_SUPPORT )
-
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
-target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
-
-IF( XB_MEMO_SUPPORT )
-add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
-target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
-add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
-
-ENDIF( XB_MEMO_SUPPORT )
-ENDIF( XB_DBF4_SUPPORT )
-
-IF( XB_FUNCTION_SUPPORT )
-add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
-target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
-add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
-ENDIF( XB_FUNCTION_SUPPORT )
-
-IF( XB_NDX_SUPPORT )
-IF( XB_DBF3_SUPPORT )
-add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
-target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
-add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
-ENDIF( XB_DBF3_SUPPORT )
-ENDIF( XB_NDX_SUPPORT )
-
-IF( XB_MDX_SUPPORT )
-IF( XB_DBF4_SUPPORT )
-add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
-target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
-add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
-ENDIF( XB_DBF4_SUPPORT )
-ENDIF( XB_MDX_SUPPORT )
-
-IF( XB_INDEX_SUPPORT )
-add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
-target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
-add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
-ENDIF( XB_INDEX_SUPPORT )
-
-
-IF( XB_EXPRESSION_SUPPORT )
-
-add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
-target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
-add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
-
-
-add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
-target_link_libraries( xb_test_expression ${EXTRA_LIBS})
-add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
-
-add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
-target_link_libraries( xb_test_uda ${EXTRA_LIBS})
-add_test( NAME xbUda COMMAND xb_test_uda QUIET )
-
-ENDIF( XB_EXPRESSION_SUPPORT )
-
-IF( XB_SQL_SUPPORT )
-add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
-target_link_libraries( xb_test_sql ${EXTRA_LIBS})
-add_test( NAME xbSql COMMAND xb_test_sql QUIET )
-ENDIF( XB_SQL_SUPPORT )
-
-IF( XB_FILTER_SUPPORT )
-add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
-target_link_libraries( xb_test_filter ${EXTRA_LIBS})
-add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
-ENDIF( XB_FILTER_SUPPORT )
-
-
-IF( XB_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})
-
-
-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_dumphdr ${PROJECT_SOURCE_DIR}/utils/xb_dumphdr.cpp )
- target_link_libraries( xb_dumphdr ${EXTRA_LIBS})
-
- add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
- target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
-
- add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
- target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
-
- IF( XB_SQL_SUPPORT )
- add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
- target_link_libraries( xb_execsql ${EXTRA_LIBS})
- ENDIF( XB_SQL_SUPPORT )
-
- add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
- target_link_libraries( xb_pack ${EXTRA_LIBS})
-
- add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
- target_link_libraries( xb_undelall ${EXTRA_LIBS})
-
- add_executable( xb_zap ${PROJECT_SOURCE_DIR}/utils/xb_zap.cpp )
- target_link_libraries( xb_zap ${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_dumphdr DESTINATION bin)
- install (TARGETS xb_dumprecs DESTINATION bin)
- install (TARGETS xb_pack DESTINATION bin)
- install (TARGETS xb_undelall DESTINATION bin)
- install (TARGETS xb_zap DESTINATION bin)
- IF( XB_SQL_SUPPORT )
- install (TARGETS xb_execsql DESTINATION bin)
- ENDIF( XB_SQL_SUPPORT )
-
-
-
-ENDIF( XB_UTILS_SUPPORT )
-
-install (FILES include/xbconfig.h
- ${PROJECT_SOURCE_DIR}/include/xbase.h
- ${PROJECT_SOURCE_DIR}/include/xbbcd.h
- ${PROJECT_SOURCE_DIR}/include/xbdate.h
- ${PROJECT_SOURCE_DIR}/include/xbdbf.h
- ${PROJECT_SOURCE_DIR}/include/xbexp.h
- ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
- ${PROJECT_SOURCE_DIR}/include/xbfile.h
- ${PROJECT_SOURCE_DIR}/include/xbindex.h
- ${PROJECT_SOURCE_DIR}/include/xblnklst.h
- ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
- ${PROJECT_SOURCE_DIR}/include/xblnknod.h
- ${PROJECT_SOURCE_DIR}/include/xblog.h
- ${PROJECT_SOURCE_DIR}/include/xbmemo.h
- ${PROJECT_SOURCE_DIR}/include/xbretcod.h
- ${PROJECT_SOURCE_DIR}/include/xbsql.h
- ${PROJECT_SOURCE_DIR}/include/xbssv.h
- ${PROJECT_SOURCE_DIR}/include/xbstring.h
- ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
- ${PROJECT_SOURCE_DIR}/include/xbtypes.h
- ${PROJECT_SOURCE_DIR}/include/xbxbase.h
- ${PROJECT_SOURCE_DIR}/include/xbuda.h
- ${PROJECT_SOURCE_DIR}/include/xbtag.h
- ${PROJECT_SOURCE_DIR}/include/xbfilter.h
- DESTINATION include/${CMAKE_PROJECT_NAME})
-
-
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
-
-IF( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
-ELSE( EXISTS /usr/local/lib64 )
-install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
-ENDIF( EXISTS /usr/local/lib64 )
-
-
diff --git a/build/cmake/copymake b/build/cmake/copymake
deleted file mode 100755
index e692f68..0000000
--- a/build/cmake/copymake
+++ /dev/null
@@ -1,6 +0,0 @@
-cp CMakeLists.txt ../linux32
-cp CMakeLists.txt ../linux64
-cp CMakeLists.txt ../mac64
-cp CMakeLists.txt ../borland5.5
-cp CMakeLists.txt ../win32vs
-cp CMakeLists.txt ../win64vs
diff --git a/build/debian/CMakeLists.txt b/build/debian/CMakeLists.txt
new file mode 100755
index 0000000..f514c5c
--- /dev/null
+++ b/build/debian/CMakeLists.txt
@@ -0,0 +1,761 @@
+cmake_minimum_required(VERSION 3.0)
+
+project (xbase64)
+set( xbase_VERSION_MAJOR 4 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 0 )
+
+MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
+MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
+MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
+
+#Set compiler options
+
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ MESSAGE( "Setting GNU compiler options" )
+ add_compile_options( -Wall -Wsign-conversion )
+# add_compile_options( -Wall -Wconversion -Wsign-conversion )
+ SET( VERBOSE 1 )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+
+IF( BORLAND )
+ MESSAGE ("BORLAND COMPILER" )
+ #set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w-8022" )
+ add_compile_options( -w-8022 )
+ENDIF( BORLAND )
+
+
+MESSAGE( "--- Checking integer sizes" )
+INCLUDE(CheckTypeSize)
+CHECK_TYPE_SIZE( "short int" SHORT_INT )
+CHECK_TYPE_SIZE( int INT )
+CHECK_TYPE_SIZE( __int32 __INT32 )
+CHECK_TYPE_SIZE( int32_t INT32_T )
+CHECK_TYPE_SIZE( long LONG_INT )
+CHECK_TYPE_SIZE( __int64 __INT64 )
+CHECK_TYPE_SIZE( int64_t INT64_T )
+CHECK_TYPE_SIZE( "long long" LONG_LONG )
+CHECK_TYPE_SIZE( u_int64_t U_INT64_T )
+CHECK_TYPE_SIZE( uint64_t UINT64_T )
+CHECK_TYPE_SIZE( "unsigned __int64" UNSIGNED__INT64 )
+CHECK_TYPE_SIZE( "unsigned long long" UNSIGNED_LONG_LONG )
+
+CHECK_TYPE_SIZE( "double" DOUBLE )
+MESSAGE( "--- Double size = " ${DOUBLE} )
+
+
+#determine how 16 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+ SET( xbInt16 "short int" )
+ SET( xbUInt16 "unsigned short int" )
+ SET( iSize ${SHORT_INT} )
+ MESSAGE( "--- xbInt16 = [short int]" )
+ MESSAGE( "--- xbUInt16 = [unsigned short int]" )
+
+ENDIF( HAVE_SHORT_INT AND ${SHORT_INT} EQUAL 2 )
+IF( NOT ${iSize} EQUAL 2 )
+ MESSAGE( "FATAL_ERROR Could not detect 16 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 2 )
+
+#determine how 32 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_INT AND ${INT} EQUAL 4 )
+ SET( xbInt32 int )
+ SET( xbUInt32 "unsigned int" )
+ SET( iSize ${INT} )
+ MESSAGE( "--- xbInt32 = [int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned int]" )
+ENDIF( HAVE_INT AND ${INT} EQUAL 4 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+ MESSAGE( __int untested if block - see CMakeLists.txt)
+ SET( xbInt32 __int32 )
+ SET( xbUInt32 "unsigned __int32" )
+ SET( iSize ${__INT} )
+ MESSAGE( "--- xbInt32 = [__int]" )
+ MESSAGE( "--- xbUInt32 = [unsigned __int]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE___INT32 )
+
+IF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+ SET( xbInt32 int32_t )
+ SET( xbUInt32 "u_int32_t" )
+ SET( iSize ${INT32_T} )
+ MESSAGE( "--- xbInt32 = [int32_t]" )
+ MESSAGE( "--- xbUInt32 = [u_int32_t]" )
+ENDIF(( NOT iSize EQUAL 4 ) AND HAVE_INT32_T )
+
+IF( NOT ${iSize} EQUAL 4 )
+ MESSAGE( "FATAL_ERROR Could not detect 32 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 4 )
+
+#determine how 64 bit integer defined on this platform
+SET( iSize 0 )
+IF( HAVE___INT64 )
+ SET( xbInt64 __int64 )
+ SET( iSize ${__INT64} )
+ MESSAGE( "--- xbInt64 = [__int64]" )
+ENDIF( HAVE___INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+ SET( xbInt64 int64_t )
+ SET( iSize ${INT64_T} )
+ MESSAGE( "--- xbInt64 = [int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+ SET( xbInt64 "long long" )
+ SET( iSize ${LONG_LONG} )
+ MESSAGE( "--- xbInt64 = [long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#determine how 64 bit unsigned integer defined on this platform
+SET( iSize 0 )
+IF( HAVE_UNSIGNED__INT64 )
+ SET( xbUInt64 "unsigned __int64" )
+ SET( iSize ${UNSIGNED__INT64} )
+ MESSAGE( "--- xbUInt64 = [unsigned __int64]" )
+ENDIF( HAVE_UNSIGNED__INT64 )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+ SET( xbUInt64 "uint64_t" )
+ SET( iSize ${UINT64_T} )
+ MESSAGE( "--- xbUInt64 = [uint64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UINT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+ SET( xbUInt64 u_int64_t )
+ SET( iSize ${U_INT64_T} )
+ MESSAGE( "--- xbUInt64 = [u_int64_t]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_U_INT64_T )
+
+IF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+ SET( xbUInt64 "unsigned long long" )
+ SET( iSize ${UNSIGNED_LONG_LONG} )
+ MESSAGE( "--- xbUInt64 = [unsigned long long]" )
+ENDIF(( NOT iSize EQUAL 8 ) AND HAVE_UNSIGNED_LONG_LONG )
+
+IF( NOT ${iSize} EQUAL 8 )
+ MESSAGE( "FATAL_ERROR Could not detect 64 bit unsigned integer type" )
+ MESSAGE( ${iSize} )
+ RETURN()
+ENDIF( NOT ${iSize} EQUAL 8 )
+
+#Library options
+option( BUILD_SHARED_LIBS "Build shared libraries" ON)
+option( XB_DBF3_SUPPORT "Compile DBase File Format Version 3 support" ON)
+option( XB_DBF4_SUPPORT "Compile DBase File Format Version 4 support" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
+option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
+option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
+option( XB_INF_SUPPORT "Compile NDX INF file support into library" ON)
+option( XB_FILTER_SUPPORT "Compile Filter support into library" ON)
+option( XB_BLOCKREAD_SUPPORT "Compile Block Read support into library" ON)
+option( XB_SQL_SUPPORT "Compile SQL support into library - alpha" ON)
+option( XB_DEBUG_SUPPORT "Compile debug logic into library" ON)
+option( XB_UTILS_SUPPORT "Compile utility programs" ON)
+option( XB_EXAMPLES_SUPPORT "Compile example programs" ON)
+
+Message( "--- BUILD_SHARED_LIBS " ${BUILD_SHARED_LIBS})
+Message( "--- XB_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
+Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
+Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
+Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
+Message( "--- XB_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
+Message( "--- XB_DEBUG_SUPPORT " ${XB_DEBUG_SUPPORT})
+Message( "--- XB_UTILS_SUPPORT " ${XB_UTILS_SUPPORT})
+Message( "--- XB_EXAMPLES_SUPPORT " ${XB_EXAMPLES_SUPPORT})
+Message( "--- XB_LOGGING_SUPPORT " ${XB_LOGGING_SUPPORT})
+Message( "--- XB_SQL_SUPPORT " ${XB_SQL_SUPPORT})
+Message( "--- XB_INF_SUPPORT " ${XB_INF_SUPPORT})
+
+IF( XB_DEBUG_SUPPORT )
+ Message( "--- Adding debug support" )
+ set( CMAKE_BUILD_TYPE Debug )
+IF( CMAKE_COMPILER_IS_GNUCXX )
+ add_compile_options( -Og )
+ENDIF( CMAKE_COMPILER_IS_GNUCXX )
+ENDIF( XB_DEBUG_SUPPORT )
+
+IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 64 bit compiler detected" )
+ set( XB_PLATFORM "x64" )
+ set( XB_PLATFORM_64 1 )
+ set( XB_LIBNAME "xbase64" )
+
+ELSE( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ MESSAGE( "--- 32 bit compiler detected" )
+ set( XB_PLATFORM "x86" )
+ set( XB_PLATFORM_32 1 )
+ set( XB_LIBNAME "xbase32" )
+
+ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+
+
+#Check for the existence of various header files
+INCLUDE (CheckIncludeFiles)
+CHECK_INCLUDE_FILES (ctype.h HAVE_CTYPE_H)
+CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
+CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
+CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H)
+CHECK_INCLUDE_FILES (stdargs.h HAVE_STDARGS_H)
+CHECK_INCLUDE_FILES (string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILES (sys/stat.h HAVE_STAT_H)
+CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H)
+CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H)
+
+#Check for the existence of various function calls
+INCLUDE( CheckFunctionExists )
+CHECK_FUNCTION_EXISTS(_close HAVE__CLOSE_F)
+CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL_F)
+CHECK_FUNCTION_EXISTS(_fdopen HAVE__FDOPEN_F)
+CHECK_FUNCTION_EXISTS(fopen_s HAVE_FOPEN_S_F)
+CHECK_FUNCTION_EXISTS(_fsopen HAVE__FSOPEN_F)
+CHECK_FUNCTION_EXISTS(_fileno HAVE__FILENO_F)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK_F)
+CHECK_FUNCTION_EXISTS(_fseeki64 HAVE__FSEEKI64_F)
+CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO_F)
+CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE_F)
+CHECK_FUNCTION_EXISTS(_localtime64_s HAVE__LOCALTIME64_S_F)
+CHECK_FUNCTION_EXISTS(LockFile HAVE_LOCKFILE_F)
+CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING_F)
+CHECK_FUNCTION_EXISTS(_locking HAVE__LOCKING_F)
+CHECK_FUNCTION_EXISTS(_open HAVE__OPEN_F)
+CHECK_FUNCTION_EXISTS(SetEndOfFile HAVE_SETENDOFFILE_F)
+
+CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF_F)
+CHECK_FUNCTION_EXISTS(_vsnprintf_s HAVE__VSNPRINTF_S_F)
+
+
+CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT_F)
+
+IF( WIN32 )
+
+# Use CHECK_SYMBOL_EXISTS for the Win32API instead of CHECK_FUNCTION_EXISTS
+# Can't detect inline functions in headers
+# Can't detect due to mismatch of calling conventions
+# Can't detect mangled names
+
+INCLUDE( CheckSymbolExists )
+CHECK_SYMBOL_EXISTS(CreateProcessW Windows.h HAVE_CREATEPROCESSW_F )
+CHECK_SYMBOL_EXISTS(vsprintf_s stdio.h HAVE_VSPRINTF_S_F )
+
+ENDIF ( WIN32 )
+
+# IF( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+# # ----fix me----
+# # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5 SetEndOfFile
+# Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_H" )
+# ENDIF ( NOT HAVE_SENTENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND BORLAND )
+
+IF( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+ # ----fix me----
+ # cmake CHECK_FUNCTION_EXISTS - could not find Borland 5.5, or Windows VS 32 bit SetEndOfFile
+ Set( HAVE_SETENDOFFILE_F "HAVE_SETENDOFFILE_F" )
+ENDIF ( NOT HAVE_SETENDOFFILE_F AND NOT HAVE_FTRUNCATE_F AND WIN32 )
+
+IF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+ Set( XB_INDEX_SUPPORT "1" )
+ENDIF( XB_NDX_SUPPORT OR XB_MDX_SUPPORT )
+
+
+# Set directories
+# PROJECT_PARENT_DIR is two nodes higher
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_BINARY_DIR} DIRECTORY )
+get_filename_component( PROJECT_PARENT_DIR ${PROJECT_PARENT_DIR} DIRECTORY )
+
+# MESSAGE( "PROJECT_PARENT_DIR = " ${PROJECT_PARENT_DIR} )
+# MESSAGE( "PROJECT_BINARY_DIR = " ${PROJECT_BINARY_DIR} )
+
+
+set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${XB_PLATFORM})
+set( LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${XB_PLATFORM})
+set( PROJECT_SOURCE_DIR ${PROJECT_PARENT_DIR}/src)
+set( PROJECT_DATA_DIR ${PROJECT_PARENT_DIR}/data/)
+set( PROJECT_LOG_DIR ${PROJECT_PARENT_DIR}/logs/)
+set( EXTRA_LIBS ${EXTRA_LIBS} ${XB_LIBNAME})
+
+
+
+# Undo bad decisions
+IF( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+ MESSAGE( "--- Can't build 64 bit environment with a 32 bit compiler" )
+ MESSAGE( "--- XB_LARGEFILE_SUPPORT set to OFF" )
+ set( XB_LARGEFILE_SUPPORT OFF CACHE BOOL "Use 64 bit large file support?" FORCE )
+ENDIF ( XB_PLATFORM_32 AND XB_LARGEFILE_SUPPORT )
+
+IF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- At lease one file format is required. Defaulting to Version 4" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( NOT XB_DBF3_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for DBF V4 Memo files. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_DBF4_SUPPORT AND XB_MEMO_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Link List support required for locking functions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_LOCKING_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for indices. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_INDEX_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+ MESSAGE( "--- Function support required for expressions. Setting to ON" )
+ set( XB_FUNCTION_SUPPORT ON CACHE BOOL "Compile XBase Function support into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+ MESSAGE( "--- Linklist support required for expressions. Setting to ON" )
+ set( XB_LINKLIST_SUPPORT ON CACHE BOOL "Compile Link List routines into library" FORCE )
+ENDIF( XB_EXPRESSION_SUPPORT AND NOT XB_LINKLIST_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+ MESSAGE( "--- Memo support required for SQL. Setting to ON" )
+ set( XB_MEMO_SUPPORT ON CACHE BOOL "Compile memo field support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_MEMO_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+ MESSAGE( "--- DBF4 support required for SQL. Setting to ON" )
+ set( XB_DBF4_SUPPORT ON CACHE BOOL "Compile DBase File Format Version 4 support" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_DBF4_SUPPORT )
+
+IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+ MESSAGE( "--- Expression required for filters. Setting to ON" )
+ set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
+ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+
+
+# Build configuration header file
+configure_file (
+ "${PROJECT_SOURCE_DIR}/include/xbconfig.h.in"
+ "${PROJECT_BINARY_DIR}/include/xbconfig.h"
+)
+
+# Microsoft Windows settings
+IF( WIN32 )
+# add_definitions( /D_CRT_SECURE_NO_WARNINGS)
+ add_definitions( /EHsc )
+ENDIF( WIN32 )
+
+
+# set up include directories
+include_directories( "${PROJECT_BINARY_DIR}/include" )
+include_directories( "${PROJECT_SOURCE_DIR}/include" )
+
+#build the library
+IF ( BUILD_SHARED_LIBS )
+ set( LIB_TYPE SHARED )
+ELSE( BUILD_SHARED_LIBS )
+ set( LIB_TYPE STATIC )
+ENDIF( BUILD_SHARED_LIBS )
+MESSAGE( "--- Lib type " ${LIB_TYPE} )
+
+
+
+set (SOURCES ${PROJECT_SOURCE_DIR}/core/xbstring.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbssv.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdate.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbtblmgr.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbxbase.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfile.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbdbf.cpp
+ ${PROJECT_SOURCE_DIR}/core/xbfields.cpp
+ ${PROJECT_SOURCE_DIR}/core/xblog.cpp)
+
+IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo.cpp )
+ENDIF( XB_MEMO_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf3.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo3.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbdbf4.cpp )
+ IF( XB_MEMO_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbmemo4.cpp )
+ ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfuncs.cpp )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_EXPRESSION_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexpnode.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbexp.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbuda.cpp )
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbbcd.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixbase.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbtag.cpp )
+ENDIF( XB_INDEX_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixndx.cpp )
+ENDIF( XB_NDX_SUPPORT )
+
+
+IF( XB_MDX_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbixmdx.cpp )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbalttbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbcrtbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdelete.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrpix.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbdrptbl.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbinsert.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbset.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbsql.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbstmt.cpp )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/sql/xbselect.cpp )
+ENDIF( XB_SQL_SUPPORT )
+
+
+IF( XB_FILTER_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbfilter.cpp )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+ set (SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/core/xbblockread.cpp )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+include( GenerateExportHeader )
+#add_library( xbase ${LIB_TYPE} ${SOURCES} )
+add_library( ${XB_LIBNAME} ${LIB_TYPE} ${SOURCES} )
+#add_library( ${CMAKE_PROJECT_NAME} ${LIB_TYPE} ${SOURCES} )
+
+
+IF( WIN32 )
+MESSAGE( "--- Generating Windows Library Headers" )
+
+#GENERATE_EXPORT_HEADER( xbase
+# BASE_NAME xbase
+
+GENERATE_EXPORT_HEADER( ${XB_LIBNAME}
+ BASE_NAME ${XB_LIBNAME}
+ EXPORT_MACRO_NAME xbase_EXPORT
+ EXPORT_FILE_NAME xbase_Export.h
+ STATIC_DEFINE xbase_BUILT_AS_STATIC
+)
+ENDIF( WIN32 )
+
+
+#build test programs
+enable_testing()
+
+add_executable( xb_test_string ${PROJECT_SOURCE_DIR}/tests/xb_test_string.cpp )
+target_link_libraries( xb_test_string ${EXTRA_LIBS})
+add_test( NAME xbString COMMAND xb_test_string QUIET )
+
+add_executable( xb_test_date ${PROJECT_SOURCE_DIR}/tests/xb_test_date.cpp )
+target_link_libraries( xb_test_date ${EXTRA_LIBS})
+add_test( NAME xbDate COMMAND xb_test_date QUIET )
+
+add_executable( xb_test_tblmgr ${PROJECT_SOURCE_DIR}/tests/xb_test_tblmgr.cpp )
+target_link_libraries( xb_test_tblmgr ${EXTRA_LIBS})
+add_test( NAME xbTblMgr COMMAND xb_test_tblmgr QUIET )
+
+add_executable( xb_test_xbase ${PROJECT_SOURCE_DIR}/tests/xb_test_xbase.cpp )
+target_link_libraries( xb_test_xbase ${EXTRA_LIBS})
+add_test( NAME xbXBase COMMAND xb_test_xbase QUIET )
+
+add_executable( xb_test_file ${PROJECT_SOURCE_DIR}/tests/xb_test_file.cpp )
+target_link_libraries( xb_test_file ${EXTRA_LIBS})
+add_test( NAME xbFile COMMAND xb_test_file QUIET )
+
+add_executable( xb_test_log ${PROJECT_SOURCE_DIR}/tests/xb_test_log.cpp )
+target_link_libraries( xb_test_log ${EXTRA_LIBS})
+add_test( NAME xbLog COMMAND xb_test_log QUIET )
+
+IF( XB_LINKLIST_SUPPORT )
+add_executable( xb_test_linklist ${PROJECT_SOURCE_DIR}/tests/xb_test_linklist.cpp )
+target_link_libraries( xb_test_linklist ${EXTRA_LIBS})
+add_test( NAME xbLinkList COMMAND xb_test_linklist QUIET )
+ENDIF( XB_LINKLIST_SUPPORT )
+
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_dbf_v3_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v3_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3NoMemos COMMAND xb_test_dbf_v3_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v3_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v3_memos.cpp )
+target_link_libraries( xb_test_dbf_v3_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV3Memos COMMAND xb_test_dbf_v3_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF3_SUPPORT )
+
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_dbf_v4_nomemos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_nomemos.cpp )
+target_link_libraries( xb_test_dbf_v4_nomemos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4NoMemos COMMAND xb_test_dbf_v4_nomemos QUIET )
+
+IF( XB_MEMO_SUPPORT )
+add_executable( xb_test_dbf_v4_memos ${PROJECT_SOURCE_DIR}/tests/xb_test_dbf_v4_memos.cpp )
+target_link_libraries( xb_test_dbf_v4_memos ${EXTRA_LIBS})
+add_test( NAME xbDbfV4Memos COMMAND xb_test_dbf_v4_memos QUIET )
+
+ENDIF( XB_MEMO_SUPPORT )
+ENDIF( XB_DBF4_SUPPORT )
+
+IF( XB_FUNCTION_SUPPORT )
+add_executable( xb_test_funcs ${PROJECT_SOURCE_DIR}/tests/xb_test_funcs.cpp )
+target_link_libraries( xb_test_funcs ${EXTRA_LIBS})
+add_test( NAME xbFunctions COMMAND xb_test_funcs QUIET )
+ENDIF( XB_FUNCTION_SUPPORT )
+
+IF( XB_NDX_SUPPORT )
+IF( XB_DBF3_SUPPORT )
+add_executable( xb_test_ndx ${PROJECT_SOURCE_DIR}/tests/xb_test_ndx.cpp )
+target_link_libraries( xb_test_ndx ${EXTRA_LIBS})
+add_test( NAME xbIxNdx COMMAND xb_test_ndx QUIET )
+ENDIF( XB_DBF3_SUPPORT )
+ENDIF( XB_NDX_SUPPORT )
+
+IF( XB_MDX_SUPPORT )
+IF( XB_DBF4_SUPPORT )
+add_executable( xb_test_mdx ${PROJECT_SOURCE_DIR}/tests/xb_test_mdx.cpp )
+target_link_libraries( xb_test_mdx ${EXTRA_LIBS})
+add_test( NAME xbIxMdx COMMAND xb_test_mdx QUIET )
+ENDIF( XB_DBF4_SUPPORT )
+ENDIF( XB_MDX_SUPPORT )
+
+IF( XB_INDEX_SUPPORT )
+add_executable( xb_test_bcd ${PROJECT_SOURCE_DIR}/tests/xb_test_bcd.cpp )
+target_link_libraries( xb_test_bcd ${EXTRA_LIBS})
+add_test( NAME xbBcd COMMAND xb_test_bcd QUIET )
+ENDIF( XB_INDEX_SUPPORT )
+
+
+IF( XB_EXPRESSION_SUPPORT )
+
+add_executable( xb_test_expnode ${PROJECT_SOURCE_DIR}/tests/xb_test_expnode.cpp )
+target_link_libraries( xb_test_expnode ${EXTRA_LIBS})
+add_test( NAME xbExpNode COMMAND xb_test_expnode QUIET )
+
+
+add_executable( xb_test_expression ${PROJECT_SOURCE_DIR}/tests/xb_test_expression.cpp )
+target_link_libraries( xb_test_expression ${EXTRA_LIBS})
+add_test( NAME xbExpressions COMMAND xb_test_expression QUIET )
+
+add_executable( xb_test_uda ${PROJECT_SOURCE_DIR}/tests/xb_test_uda.cpp )
+target_link_libraries( xb_test_uda ${EXTRA_LIBS})
+add_test( NAME xbUda COMMAND xb_test_uda QUIET )
+
+ENDIF( XB_EXPRESSION_SUPPORT )
+
+IF( XB_SQL_SUPPORT )
+add_executable( xb_test_sql ${PROJECT_SOURCE_DIR}/tests/xb_test_sql.cpp )
+target_link_libraries( xb_test_sql ${EXTRA_LIBS})
+add_test( NAME xbSql COMMAND xb_test_sql QUIET )
+ENDIF( XB_SQL_SUPPORT )
+
+IF( XB_FILTER_SUPPORT )
+add_executable( xb_test_filter ${PROJECT_SOURCE_DIR}/tests/xb_test_filter.cpp )
+target_link_libraries( xb_test_filter ${EXTRA_LIBS})
+add_test( NAME xbFilter COMMAND xb_test_filter QUIET )
+ENDIF( XB_FILTER_SUPPORT )
+
+IF( XB_BLOCKREAD_SUPPORT )
+add_executable( xb_test_blockread ${PROJECT_SOURCE_DIR}/tests/xb_test_blockread.cpp )
+target_link_libraries( xb_test_blockread ${EXTRA_LIBS})
+add_test( NAME xbBlockRead COMMAND xb_test_blockread QUIET )
+ENDIF( XB_BLOCKREAD_SUPPORT )
+
+
+IF( XB_LOCKING_SUPPORT )
+add_executable( xb_test_lock ${PROJECT_SOURCE_DIR}/tests/xb_test_lock.cpp )
+target_link_libraries( xb_test_lock ${EXTRA_LIBS})
+add_test( NAME xbLock COMMAND xb_test_lock QUIET )
+IF( HAVE_CREATEPROCESSW_F )
+add_executable( xb_test_lock2 ${PROJECT_SOURCE_DIR}/tests/xb_test_lock2.cpp )
+target_link_libraries( xb_test_lock2 ${EXTRA_LIBS})
+ENDIF( HAVE_CREATEPROCESSW_F )
+ENDIF( XB_LOCKING_SUPPORT )
+
+#build example programs
+IF( XB_EXAMPLES_SUPPORT )
+ add_executable( xb_ex_string ${PROJECT_SOURCE_DIR}/examples/xb_ex_string.cpp )
+ target_link_libraries( xb_ex_string ${EXTRA_LIBS})
+
+ add_executable( xb_ex_date ${PROJECT_SOURCE_DIR}/examples/xb_ex_date.cpp )
+ target_link_libraries( xb_ex_date ${EXTRA_LIBS})
+
+ IF( XB_DBF3_SUPPORT )
+ add_executable( xb_ex_v3_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_create_dbf.cpp )
+ target_link_libraries( xb_ex_v3_create_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_v3_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v3_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v3_upd_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF3_SUPPORT )
+
+ IF( XB_DBF4_SUPPORT )
+ add_executable( xb_ex_v4_create_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_create_dbf.cpp )
+ target_link_libraries( xb_ex_v4_create_dbf ${EXTRA_LIBS})
+ ENDIF( XB_DBF4_SUPPORT )
+
+ IF( XB_EXPRESSION_SUPPORT )
+ add_executable( xb_ex_expression ${PROJECT_SOURCE_DIR}/examples/xb_ex_expression.cpp )
+ target_link_libraries( xb_ex_expression ${EXTRA_LIBS})
+ ENDIF( XB_EXPRESSION_SUPPORT )
+
+ add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
+ target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
+
+ENDIF( XB_EXAMPLES_SUPPORT )
+
+#build utility programs
+IF( XB_UTILS_SUPPORT )
+
+ add_executable( xb_cfg_check ${PROJECT_SOURCE_DIR}/utils/xb_cfg_check.cpp )
+ target_link_libraries( xb_cfg_check ${EXTRA_LIBS})
+
+ add_executable( xb_copydbf ${PROJECT_SOURCE_DIR}/utils/xb_copydbf.cpp )
+ target_link_libraries( xb_copydbf ${EXTRA_LIBS})
+
+ add_executable( xb_dbfutil ${PROJECT_SOURCE_DIR}/utils/xb_dbfutil.cpp )
+ target_link_libraries( xb_dbfutil ${EXTRA_LIBS})
+
+ add_executable( xb_deletall ${PROJECT_SOURCE_DIR}/utils/xb_deletall.cpp )
+ target_link_libraries( xb_deletall ${EXTRA_LIBS})
+
+ add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
+ target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
+
+ add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
+ target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
+
+ add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
+ target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
+
+ IF( XB_SQL_SUPPORT )
+ add_executable( xb_execsql ${PROJECT_SOURCE_DIR}/utils/xb_execsql.cpp )
+ target_link_libraries( xb_execsql ${EXTRA_LIBS})
+ ENDIF( XB_SQL_SUPPORT )
+
+ add_executable( xb_pack ${PROJECT_SOURCE_DIR}/utils/xb_pack.cpp )
+ target_link_libraries( xb_pack ${EXTRA_LIBS})
+
+ add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
+ target_link_libraries( xb_undelall ${EXTRA_LIBS})
+
+ install (TARGETS xb_cfg_check DESTINATION bin)
+ install (TARGETS xb_copydbf DESTINATION bin)
+ install (TARGETS xb_dbfutil DESTINATION bin)
+ install (TARGETS xb_deletall DESTINATION bin)
+ install (TARGETS xb_dumpdbt DESTINATION bin)
+ install (TARGETS xb_dumprecs DESTINATION bin)
+ install (TARGETS xb_pack DESTINATION bin)
+ install (TARGETS xb_undelall DESTINATION bin)
+ IF( XB_SQL_SUPPORT )
+ install (TARGETS xb_execsql DESTINATION bin)
+ ENDIF( XB_SQL_SUPPORT )
+
+
+
+ENDIF( XB_UTILS_SUPPORT )
+
+install (FILES include/xbconfig.h
+ ${PROJECT_SOURCE_DIR}/include/xbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbbcd.h
+ ${PROJECT_SOURCE_DIR}/include/xbdate.h
+ ${PROJECT_SOURCE_DIR}/include/xbdbf.h
+ ${PROJECT_SOURCE_DIR}/include/xbexp.h
+ ${PROJECT_SOURCE_DIR}/include/xbexpnode.h
+ ${PROJECT_SOURCE_DIR}/include/xbfile.h
+ ${PROJECT_SOURCE_DIR}/include/xbindex.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklst.h
+ ${PROJECT_SOURCE_DIR}/include/xblnklstord.h
+ ${PROJECT_SOURCE_DIR}/include/xblnknod.h
+ ${PROJECT_SOURCE_DIR}/include/xblog.h
+ ${PROJECT_SOURCE_DIR}/include/xbmemo.h
+ ${PROJECT_SOURCE_DIR}/include/xbretcod.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+ ${PROJECT_SOURCE_DIR}/include/xbssv.h
+ ${PROJECT_SOURCE_DIR}/include/xbstring.h
+ ${PROJECT_SOURCE_DIR}/include/xbtblmgr.h
+ ${PROJECT_SOURCE_DIR}/include/xbtypes.h
+ ${PROJECT_SOURCE_DIR}/include/xbxbase.h
+ ${PROJECT_SOURCE_DIR}/include/xbuda.h
+ ${PROJECT_SOURCE_DIR}/include/xbtag.h
+ ${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+
+ DESTINATION include/${CMAKE_PROJECT_NAME})
+
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
+
+SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.1.0 SOVERSION 0 )
+
+IF( EXISTS /usr/local/lib64 )
+install (TARGETS ${XB_LIBNAME} DESTINATION lib64/${CMAKE_PROJECT_NAME})
+ELSE( EXISTS /usr/local/lib64 )
+install (TARGETS ${XB_LIBNAME} DESTINATION lib/${CMAKE_PROJECT_NAME})
+ENDIF( EXISTS /usr/local/lib64 )
+
+
diff --git a/build/debian/README.debian b/build/debian/README.debian
new file mode 100644
index 0000000..2c7e95b
--- /dev/null
+++ b/build/debian/README.debian
@@ -0,0 +1,23 @@
+
+Debian build stes for Xbase64 - 2/16/23
+
+1) Verify cmake is installed with command: cmake --version
+ If it is not installed, install the latest version through the Debian software store.
+
+2) Verify gcc is intalled with the command: gcc --version
+ If it is not installed, execute the following commands:
+
+ sudo apt update
+ sudo apt install build-essential
+ gcc --version
+
+3) Build xbase64 library
+
+ cd build/debian (go to the appropriate build directory)
+ cmake . (configure for your environment)
+ make (compile it)
+ sudo make install (install it)
+ xb_cfg_chk (test it)
+
+
+
diff --git a/build/linux32/CMakeLists.txt b/build/linux32/CMakeLists.txt
index 516b9c9..f514c5c 100755
--- a/build/linux32/CMakeLists.txt
+++ b/build/linux32/CMakeLists.txt
@@ -2,12 +2,13 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 3 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 0 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -152,42 +153,43 @@ IF( NOT ${iSize} EQUAL 8 )
ENDIF( NOT ${iSize} EQUAL 8 )
#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries?" 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)
-option( XB_MEMO_SUPPORT "Compile memo field support into library?" ON)
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+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_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
option( XB_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_MEMO_SUPPORT " ${XB_MEMO_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_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_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_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -218,6 +220,7 @@ 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)
@@ -250,6 +253,8 @@ 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
@@ -261,8 +266,6 @@ 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 )
@@ -300,7 +303,6 @@ 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" )
@@ -353,6 +355,10 @@ IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
# Build configuration header file
@@ -445,6 +451,7 @@ IF( XB_SQL_SUPPORT )
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 )
@@ -453,6 +460,9 @@ 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 )
@@ -593,6 +603,12 @@ 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 )
@@ -633,6 +649,8 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -654,13 +672,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
- add_executable( xb_dumphdr ${PROJECT_SOURCE_DIR}/utils/xb_dumphdr.cpp )
- target_link_libraries( xb_dumphdr ${EXTRA_LIBS})
-
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -675,20 +689,14 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
target_link_libraries( xb_undelall ${EXTRA_LIBS})
- add_executable( xb_zap ${PROJECT_SOURCE_DIR}/utils/xb_zap.cpp )
- target_link_libraries( xb_zap ${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_dumphdr DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
- install (TARGETS xb_zap DESTINATION bin)
IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
ENDIF( XB_SQL_SUPPORT )
@@ -721,10 +729,28 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+
DESTINATION include/${CMAKE_PROJECT_NAME})
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
+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})
diff --git a/build/linux64/CMakeLists.txt b/build/linux64/CMakeLists.txt
index 516b9c9..f514c5c 100755
--- a/build/linux64/CMakeLists.txt
+++ b/build/linux64/CMakeLists.txt
@@ -2,12 +2,13 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 3 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 0 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -152,42 +153,43 @@ IF( NOT ${iSize} EQUAL 8 )
ENDIF( NOT ${iSize} EQUAL 8 )
#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries?" 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)
-option( XB_MEMO_SUPPORT "Compile memo field support into library?" ON)
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+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_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
option( XB_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_MEMO_SUPPORT " ${XB_MEMO_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_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_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_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -218,6 +220,7 @@ 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)
@@ -250,6 +253,8 @@ 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
@@ -261,8 +266,6 @@ 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 )
@@ -300,7 +303,6 @@ 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" )
@@ -353,6 +355,10 @@ IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
# Build configuration header file
@@ -445,6 +451,7 @@ IF( XB_SQL_SUPPORT )
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 )
@@ -453,6 +460,9 @@ 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 )
@@ -593,6 +603,12 @@ 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 )
@@ -633,6 +649,8 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -654,13 +672,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
- add_executable( xb_dumphdr ${PROJECT_SOURCE_DIR}/utils/xb_dumphdr.cpp )
- target_link_libraries( xb_dumphdr ${EXTRA_LIBS})
-
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -675,20 +689,14 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
target_link_libraries( xb_undelall ${EXTRA_LIBS})
- add_executable( xb_zap ${PROJECT_SOURCE_DIR}/utils/xb_zap.cpp )
- target_link_libraries( xb_zap ${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_dumphdr DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
- install (TARGETS xb_zap DESTINATION bin)
IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
ENDIF( XB_SQL_SUPPORT )
@@ -721,10 +729,28 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+
DESTINATION include/${CMAKE_PROJECT_NAME})
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
+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})
diff --git a/build/mac64/CMakeLists.txt b/build/mac64/CMakeLists.txt
index 516b9c9..f514c5c 100755
--- a/build/mac64/CMakeLists.txt
+++ b/build/mac64/CMakeLists.txt
@@ -2,12 +2,13 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 3 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 0 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -152,42 +153,43 @@ IF( NOT ${iSize} EQUAL 8 )
ENDIF( NOT ${iSize} EQUAL 8 )
#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries?" 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)
-option( XB_MEMO_SUPPORT "Compile memo field support into library?" ON)
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+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_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
option( XB_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_MEMO_SUPPORT " ${XB_MEMO_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_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_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_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -218,6 +220,7 @@ 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)
@@ -250,6 +253,8 @@ 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
@@ -261,8 +266,6 @@ 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 )
@@ -300,7 +303,6 @@ 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" )
@@ -353,6 +355,10 @@ IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
# Build configuration header file
@@ -445,6 +451,7 @@ IF( XB_SQL_SUPPORT )
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 )
@@ -453,6 +460,9 @@ 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 )
@@ -593,6 +603,12 @@ 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 )
@@ -633,6 +649,8 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -654,13 +672,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
- add_executable( xb_dumphdr ${PROJECT_SOURCE_DIR}/utils/xb_dumphdr.cpp )
- target_link_libraries( xb_dumphdr ${EXTRA_LIBS})
-
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -675,20 +689,14 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
target_link_libraries( xb_undelall ${EXTRA_LIBS})
- add_executable( xb_zap ${PROJECT_SOURCE_DIR}/utils/xb_zap.cpp )
- target_link_libraries( xb_zap ${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_dumphdr DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
- install (TARGETS xb_zap DESTINATION bin)
IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
ENDIF( XB_SQL_SUPPORT )
@@ -721,10 +729,28 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+
DESTINATION include/${CMAKE_PROJECT_NAME})
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
+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})
diff --git a/build/win32vs/CMakeLists.txt b/build/win32vs/CMakeLists.txt
index 516b9c9..f514c5c 100755
--- a/build/win32vs/CMakeLists.txt
+++ b/build/win32vs/CMakeLists.txt
@@ -2,12 +2,13 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 3 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 0 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -152,42 +153,43 @@ IF( NOT ${iSize} EQUAL 8 )
ENDIF( NOT ${iSize} EQUAL 8 )
#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries?" 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)
-option( XB_MEMO_SUPPORT "Compile memo field support into library?" ON)
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+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_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
option( XB_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_MEMO_SUPPORT " ${XB_MEMO_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_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_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_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -218,6 +220,7 @@ 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)
@@ -250,6 +253,8 @@ 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
@@ -261,8 +266,6 @@ 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 )
@@ -300,7 +303,6 @@ 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" )
@@ -353,6 +355,10 @@ IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
# Build configuration header file
@@ -445,6 +451,7 @@ IF( XB_SQL_SUPPORT )
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 )
@@ -453,6 +460,9 @@ 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 )
@@ -593,6 +603,12 @@ 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 )
@@ -633,6 +649,8 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -654,13 +672,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
- add_executable( xb_dumphdr ${PROJECT_SOURCE_DIR}/utils/xb_dumphdr.cpp )
- target_link_libraries( xb_dumphdr ${EXTRA_LIBS})
-
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -675,20 +689,14 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
target_link_libraries( xb_undelall ${EXTRA_LIBS})
- add_executable( xb_zap ${PROJECT_SOURCE_DIR}/utils/xb_zap.cpp )
- target_link_libraries( xb_zap ${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_dumphdr DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
- install (TARGETS xb_zap DESTINATION bin)
IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
ENDIF( XB_SQL_SUPPORT )
@@ -721,10 +729,28 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+
DESTINATION include/${CMAKE_PROJECT_NAME})
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
+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})
diff --git a/build/win64vs/CMakeLists.txt b/build/win64vs/CMakeLists.txt
index 516b9c9..f514c5c 100755
--- a/build/win64vs/CMakeLists.txt
+++ b/build/win64vs/CMakeLists.txt
@@ -2,12 +2,13 @@ cmake_minimum_required(VERSION 3.0)
project (xbase64)
set( xbase_VERSION_MAJOR 4 )
-set( xbase_VERSION_MINOR 0 )
-set( xbase_VERSION_PATCH 3 )
+set( xbase_VERSION_MINOR 1 )
+set( xbase_VERSION_PATCH 0 )
MESSAGE( "--- Xbase build for: " ${CMAKE_SYSTEM_NAME} )
MESSAGE( "--- Compiler: " ${CMAKE_CXX_COMPILER_ID} )
MESSAGE( "--- Project Name: " ${CMAKE_PROJECT_NAME} )
+MESSAGE( "--- Install Prefix: " ${CMAKE_INSTALL_PREFIX} )
#Set compiler options
@@ -152,42 +153,43 @@ IF( NOT ${iSize} EQUAL 8 )
ENDIF( NOT ${iSize} EQUAL 8 )
#Library options
-option( BUILD_SHARED_LIBS "Build shared libraries?" 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)
-option( XB_MEMO_SUPPORT "Compile memo field support into library?" ON)
-option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+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_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
+option( XB_MEMO_SUPPORT "Compile memo field support into library" ON)
+option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
+option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
option( XB_LOCKING_SUPPORT "Compile Multi User Locking support into library" ON)
+
+option( XB_LOGGING_SUPPORT "Compile message logging support into library" ON)
+option( XB_LINKLIST_SUPPORT "Compile Link List routines into library" ON)
option( XB_FUNCTION_SUPPORT "Compile XBase Function support into library" ON)
option( XB_EXPRESSION_SUPPORT "Compile Expression support into library" ON)
-option( XB_NDX_SUPPORT "Compile NDX Index support into library" ON)
-option( XB_MDX_SUPPORT "Compile MDX Index support into library" ON)
-option( XB_SQL_SUPPORT "Compile SQL support into library" ON)
option( XB_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_MEMO_SUPPORT " ${XB_MEMO_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_DBF3_SUPPORT " ${XB_DBF3_SUPPORT})
Message( "--- XB_DBF4_SUPPORT " ${XB_DBF4_SUPPORT})
-Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
+Message( "--- XB_MEMO_SUPPORT " ${XB_MEMO_SUPPORT})
+Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
+Message( "--- XB_MDX_SUPPORT " ${XB_MDX_SUPPORT})
Message( "--- XB_LOCKING_SUPPORT " ${XB_LOCKING_SUPPORT})
+Message( "--- XB_LINKLIST_SUPPORT " ${XB_LINKLIST_SUPPORT})
Message( "--- XB_FUNCTION_SUPPORT " ${XB_FUNCTION_SUPPORT})
Message( "--- XB_EXPRESSION_SUPPORT " ${XB_EXPRESSION_SUPPORT})
-Message( "--- XB_NDX_SUPPORT " ${XB_NDX_SUPPORT})
-Message( "--- XB_MDX_SUPPORT " ${XB_MDX_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_FILTER_SUPPORT " ${XB_FILTER_SUPPORT})
IF( XB_DEBUG_SUPPORT )
Message( "--- Adding debug support" )
@@ -218,6 +220,7 @@ 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)
@@ -250,6 +253,8 @@ 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
@@ -261,8 +266,6 @@ 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 )
@@ -300,7 +303,6 @@ 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" )
@@ -353,6 +355,10 @@ IF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
set( XB_EXPRESSION_SUPPORT ON CACHE BOOL "Compile Expression support into library" FORCE )
ENDIF( XB_FILTER_SUPPORT AND NOT XB_EXPRESSION_SUPPORT )
+IF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
+ MESSAGE( "--- BLOCKREAD support required for SQL. Setting to ON" )
+ set( XB_BLOCKREAD_SUPPORT ON CACHE BOOL "Compile Block Read support into library" FORCE )
+ENDIF( XB_SQL_SUPPORT AND NOT XB_BLOCKREAD_SUPPORT )
# Build configuration header file
@@ -445,6 +451,7 @@ IF( XB_SQL_SUPPORT )
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 )
@@ -453,6 +460,9 @@ 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 )
@@ -593,6 +603,12 @@ 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 )
@@ -633,6 +649,8 @@ IF( XB_EXAMPLES_SUPPORT )
add_executable( xb_ex_v4_upd_dbf ${PROJECT_SOURCE_DIR}/examples/xb_ex_v4_upd_dbf.cpp )
target_link_libraries( xb_ex_v4_upd_dbf ${EXTRA_LIBS})
+ add_executable( xb_ex_ssv ${PROJECT_SOURCE_DIR}/examples/xb_ex_ssv.cpp )
+ target_link_libraries( xb_ex_ssv ${EXTRA_LIBS})
ENDIF( XB_EXAMPLES_SUPPORT )
@@ -654,13 +672,9 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_dumpdbt ${PROJECT_SOURCE_DIR}/utils/xb_dumpdbt.cpp )
target_link_libraries( xb_dumpdbt ${EXTRA_LIBS})
- add_executable( xb_dumphdr ${PROJECT_SOURCE_DIR}/utils/xb_dumphdr.cpp )
- target_link_libraries( xb_dumphdr ${EXTRA_LIBS})
-
add_executable( xb_dumprecs ${PROJECT_SOURCE_DIR}/utils/xb_dumprecs.cpp )
target_link_libraries( xb_dumprecs ${EXTRA_LIBS})
-
add_executable( xb_tblinfo ${PROJECT_SOURCE_DIR}/utils/xb_tblinfo.cpp )
target_link_libraries( xb_tblinfo ${EXTRA_LIBS})
@@ -675,20 +689,14 @@ IF( XB_UTILS_SUPPORT )
add_executable( xb_undelall ${PROJECT_SOURCE_DIR}/utils/xb_undelall.cpp )
target_link_libraries( xb_undelall ${EXTRA_LIBS})
- add_executable( xb_zap ${PROJECT_SOURCE_DIR}/utils/xb_zap.cpp )
- target_link_libraries( xb_zap ${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_dumphdr DESTINATION bin)
install (TARGETS xb_dumprecs DESTINATION bin)
install (TARGETS xb_pack DESTINATION bin)
install (TARGETS xb_undelall DESTINATION bin)
- install (TARGETS xb_zap DESTINATION bin)
IF( XB_SQL_SUPPORT )
install (TARGETS xb_execsql DESTINATION bin)
ENDIF( XB_SQL_SUPPORT )
@@ -721,10 +729,28 @@ install (FILES include/xbconfig.h
${PROJECT_SOURCE_DIR}/include/xbuda.h
${PROJECT_SOURCE_DIR}/include/xbtag.h
${PROJECT_SOURCE_DIR}/include/xbfilter.h
+ ${PROJECT_SOURCE_DIR}/include/xbblkread.h
+ ${PROJECT_SOURCE_DIR}/include/xbsql.h
+
DESTINATION include/${CMAKE_PROJECT_NAME})
+IF( NOT WIN32 )
+install (FILES ${PROJECT_PARENT_DIR}/docs/man/xb_cfg_chk.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_copydbf.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dbfutil.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_deletall.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumpdbt.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_dumprecs.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_pack.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_tblinfo.1.gz
+ ${PROJECT_PARENT_DIR}/docs/man/xb_undelall.1.gz
+
+ DESTINATION man/man1)
+
+ENDIF( NOT WIN32 )
+
-SET_TARGET_PROPERTIES( ${XB_LIBNAME} PROPERTIES VERSION 4.0.3 SOVERSION 0 )
+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})
diff --git a/docs/doxygen/html/classxb_1_1xbDate.html b/docs/doxygen/html/classxb_1_1xbDate.html
index 80dcc57..67f85fc 100644
--- a/docs/doxygen/html/classxb_1_1xbDate.html
+++ b/docs/doxygen/html/classxb_1_1xbDate.html
@@ -235,12 +235,15 @@ Public Member Functions
void SetDefaultAutoCommit (xbBool bDefaultAutoCommit)
Set the default auto commit. More...
-xbString & GetDefaultLogDirectory () const
-
-xbString & GetDefaultLogFileName () const
-
-void SetDefaultLogDirectory (const xbString &sDefaultLogDirectory)
-
+void GetHomeDir (xbString &sHomeDirOut)
+ Get home directory. More...
+
+xbString & GetLogDirectory () const
+
+xbString & GetLogFileName () const
+
+void SetLogDirectory (const xbString &sLogDirectory)
+
xbBool GetMultiUser () const
Get the multi user setting. More...
@@ -863,8 +866,8 @@ XB_NO_ERROR
-
-◆ GetDefaultLogDirectory()
+
+◆ GetEndianType()
@@ -873,7 +876,7 @@ XB_NO_ERROR
- xbString & xb::xbSsv::GetDefaultLogDirectory
+ xbInt16 xb::xbSsv::GetEndianType
(
)
const
@@ -886,10 +889,15 @@ XB_NO_ERROR
+
Get the Endian type.
+
Returns B - Big endian
+ L - Little endian
+
+
-
-◆ GetDefaultLogFileName()
+
+◆ GetErrorMessage()
@@ -898,9 +906,10 @@ XB_NO_ERROR
- xbString & xb::xbSsv::GetDefaultLogFileName
+ const char * xb::xbSsv::GetErrorMessage
(
- )
+ xbInt16
+ iErrorCode )
const
@@ -911,10 +920,19 @@ XB_NO_ERROR
+
Get an error message.
+
Parameters
+
+ iErrorCode ErrorCode is the error number of description to be returned.
+
+
+
+
Returns Returns a pointer to a string containing a text description for the error code.
+
-
-◆ GetEndianType()
+
+◆ GetHomeDir()
@@ -923,10 +941,11 @@ XB_NO_ERROR
- xbInt16 xb::xbSsv::GetEndianType
+ void xb::xbSsv::GetHomeDir
(
- )
- const
+ xbString &
+ sHomeDirOut )
+
@@ -936,15 +955,19 @@ XB_NO_ERROR
-
Get the Endian type.
-
Returns B - Big endian
- L - Little endian
-
+
Get home directory.
+
Parameters
+
+ sHomeDirOut - Output home directory for current user.
+
+
+
+
Returns void
-
-◆ GetErrorMessage()
+
+◆ GetLogDirectory()
@@ -953,10 +976,9 @@ XB_NO_ERROR
- const char * xb::xbSsv::GetErrorMessage
+ xbString & xb::xbSsv::GetLogDirectory
(
- xbInt16
- iErrorCode )
+ )
const
@@ -967,14 +989,30 @@ XB_NO_ERROR
-
Get an error message.
-
Parameters
-
- iErrorCode ErrorCode is the error number of description to be returned.
-
-
-
-
Returns Returns a pointer to a string containing a text description for the error code.
+
+
+
+◆ GetLogFileName()
+
+
+
+
+
+
+
+
+ xbString & xb::xbSsv::GetLogFileName
+ (
+ )
+ const
+
+
+
+
+inherited
+
+
+
@@ -1646,8 +1684,8 @@ XB_INVALID_DATE
-
-◆ SetDefaultLogDirectory()
+
+◆ SetEndianType()
@@ -1656,24 +1694,26 @@ XB_INVALID_DATE
- void xb::xbSsv::SetDefaultLogDirectory
+ void xb::xbSsv::SetEndianType
(
- const xbString &
- sDefaultLogDirectory )
+ )
-inherited
+
protected inherited
+
Set the endian type.
+
This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program.
+
-
-◆ SetEndianType()
+
+◆ SetLogDirectory()
@@ -1682,22 +1722,20 @@ XB_INVALID_DATE
- void xb::xbSsv::SetEndianType
+ void xb::xbSsv::SetLogDirectory
(
- )
+ const xbString &
+ sLogDirectory )
-protected inherited
+
inherited
-
Set the endian type.
-
This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program.
-
@@ -1864,8 +1902,8 @@ XB_INVALID_DATE
The documentation for this class was generated from the following files:
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbdate.h
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbdate.cpp
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdate.h
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdate.cpp
diff --git a/docs/doxygen/html/classxb_1_1xbDbf.html b/docs/doxygen/html/classxb_1_1xbDbf.html
index d532bc4..0546182 100644
--- a/docs/doxygen/html/classxb_1_1xbDbf.html
+++ b/docs/doxygen/html/classxb_1_1xbDbf.html
@@ -144,12 +144,18 @@ Public Member Functions
virtual xbInt16 GetAutoCommit (xbInt16 iOption) const
Get auto commit setting. More...
+
virtual xbBool GetBof ()
+
Get a pointer to the current index object. More...
+
virtual xbUInt32 GetCurRecNo () const
-
Get a pointer to the current index object. More...
+
Return the current record number. More...
virtual xbInt16 GetDbfStatus () const
Return the current dbf status. More...
+
virtual xbBool GetEof ()
+
Return true if dbf file empty or positioned to the last record. More...
+
virtual xbInt32 GetFieldCnt () const
Return the number of fields in the table. More...
@@ -159,6 +165,8 @@ Public Member Functions
virtual xbInt16 GetFirstRecord (xbInt16 iOption)
Get the first record. More...
+
virtual xbUInt16 GetHeaderLen () const
+
virtual xbInt16 GetLastRecord ()
Get the last record. More...
@@ -378,6 +386,9 @@ Public Member Functions
virtual xbInt16 PutDateField (const xbString &sFieldName, const xbDate &dt)
Put date field for field name. More...
+
xbInt16 SetHomeFolders ()
+
Create Home Folders. More...
+
xbInt16 CreateUniqueFileName (const xbString &sDirIn, const xbString &sExtIn, xbString &sFqnOut)
Create a unique file name. More...
@@ -621,12 +632,15 @@ Public Member Functions
void SetDefaultAutoCommit (xbBool bDefaultAutoCommit)
Set the default auto commit. More...
-
xbString & GetDefaultLogDirectory () const
-
-
xbString & GetDefaultLogFileName () const
-
-
void SetDefaultLogDirectory (const xbString &sDefaultLogDirectory)
-
+
void GetHomeDir (xbString &sHomeDirOut)
+
Get home directory. More...
+
+
xbString & GetLogDirectory () const
+
+
xbString & GetLogFileName () const
+
+
void SetLogDirectory (const xbString &sLogDirectory)
+
xbBool GetMultiUser () const
Get the multi user setting. More...
@@ -2315,6 +2329,36 @@ Static Protected Attributes
Get the block size.
Returns Block Size
+
+
+
+◆ GetBof()
+
+
+
+
+
+
+
+
+ xbBool xb::xbDbf::GetBof
+ (
+ )
+
+
+
+
+
+virtual
+
+
+
+
+
Get a pointer to the current index object.
+
Returns Pointer to current index.
+
Return true if dbf file empty or positioned to the first record
+
Returns Returns true if dbf file is empty or positioned on the first record.
+
@@ -2340,9 +2384,7 @@ Static Protected Attributes
-
Get a pointer to the current index object.
-
Returns Pointer to current index.
-
Return the current record number.
+
Return the current record number.
Returns Returns the current record number.
@@ -2566,56 +2608,6 @@ XB_INVALID_DATA
Get the default date format.
Returns xbString containing the default date format.
-
-
-
-◆ GetDefaultLogDirectory()
-
-
-
-
-
-
-
-
- xbString & xb::xbSsv::GetDefaultLogDirectory
- (
- )
- const
-
-
-
-
-inherited
-
-
-
-
-
-
-
-◆ GetDefaultLogFileName()
-
-
-
-
-
-
-
-
- xbString & xb::xbSsv::GetDefaultLogFileName
- (
- )
- const
-
-
-
-
-inherited
-
-
-
-
@@ -2838,6 +2830,34 @@ XB_INVALID_DATA
L - Little endian
+
+
+
+◆ GetEof()
+
+
+
+
+
+
+
+
+ xbBool xb::xbDbf::GetEof
+ (
+ )
+
+
+
+
+
+virtual
+
+
+
+
+
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.
+
@@ -4090,6 +4110,66 @@ XB_INVALID_DATA
Get the fully qualified file name.
Returns the fully qualfied name of the file
+
+
+
+◆ GetHeaderLen()
+
+
+
+
+
+
+
+
+ virtual xbUInt16 xb::xbDbf::GetHeaderLen
+ (
+ )
+ const
+
+
+
+
+virtual
+
+
+
+
+
+
+
+◆ GetHomeDir()
+
+
+
+
+
+
+
+
+ void xb::xbSsv::GetHomeDir
+ (
+ xbString &
+ sHomeDirOut )
+
+
+
+
+
+inherited
+
+
+
+
+
Get home directory.
+
Parameters
+
+ sHomeDirOut - Output home directory for current user.
+
+
+
+
Returns void
+
@@ -4156,6 +4236,56 @@ XB_INVALID_DATA
Returns Return Codes
+
+
+
+◆ GetLogDirectory()
+
+
+
+
+
+
+
+
+ xbString & xb::xbSsv::GetLogDirectory
+ (
+ )
+ const
+
+
+
+
+inherited
+
+
+
+
+
+
+
+◆ GetLogFileName()
+
+
+
+
+
+
+
+
+ xbString & xb::xbSsv::GetLogFileName
+ (
+ )
+ const
+
+
+
+
+inherited
+
+
+
+
@@ -6954,32 +7084,6 @@ xbFalse - Record not deleted.
-
-
-
-◆ SetDefaultLogDirectory()
-
-
-
-
-
-
-
-
- void xb::xbSsv::SetDefaultLogDirectory
- (
- const xbString &
- sDefaultLogDirectory )
-
-
-
-
-
-inherited
-
-
-
-
@@ -7114,6 +7218,61 @@ xbFalse - Record not deleted.
+
+
+
+◆ SetHomeFolders()
+
+
+
+
+
+
+
+
+ xbInt16 xb::xbFile::SetHomeFolders
+ (
+ )
+
+
+
+
+
+inherited
+
+
+
+
+
Create Home Folders.
+
Create xbase64 log and data folders in the home directory for current usre.
+
Returns Return Codes
+
+
+
+
+◆ SetLogDirectory()
+
+
+
+
+
+
+
+
+ void xb::xbSsv::SetLogDirectory
+ (
+ const xbString &
+ sLogDirectory )
+
+
+
+
+
+inherited
+
+
+
+
@@ -7961,7 +8120,7 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
p Pointer to data to write
size size of write
- nmemb Number of times to write it
+ nmemb Number of times to read it
@@ -8950,9 +9109,9 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
The documentation for this class was generated from the following files:
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbdbf.h
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbdbf.cpp
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbfields.cpp
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdbf.h
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdbf.cpp
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfields.cpp
diff --git a/docs/doxygen/html/classxb_1_1xbFile.html b/docs/doxygen/html/classxb_1_1xbFile.html
index b569a52..885e969 100644
--- a/docs/doxygen/html/classxb_1_1xbFile.html
+++ b/docs/doxygen/html/classxb_1_1xbFile.html
@@ -100,6 +100,9 @@ Public Member Functions
~xbFile ()
Class Destructor. More...
+xbInt16 SetHomeFolders ()
+ Create Home Folders. More...
+
xbInt16 CreateUniqueFileName (const xbString &sDirIn, const xbString &sExtIn, xbString &sFqnOut)
Create a unique file name. More...
@@ -343,12 +346,15 @@ Public Member Functions
void SetDefaultAutoCommit (xbBool bDefaultAutoCommit)
Set the default auto commit. More...
-xbString & GetDefaultLogDirectory () const
-
-xbString & GetDefaultLogFileName () const
-
-void SetDefaultLogDirectory (const xbString &sDefaultLogDirectory)
-
+void GetHomeDir (xbString &sHomeDirOut)
+ Get home directory. More...
+
+xbString & GetLogDirectory () const
+
+xbString & GetLogFileName () const
+
+void SetLogDirectory (const xbString &sLogDirectory)
+
xbBool GetMultiUser () const
Get the multi user setting. More...
@@ -1319,56 +1325,6 @@ Static Protected Attributes
Get the default date format.
Returns xbString containing the default date format.
-
-
-
-◆ GetDefaultLogDirectory()
-
-
-
-
-
-
-
-
- xbString & xb::xbSsv::GetDefaultLogDirectory
- (
- )
- const
-
-
-
-
-inherited
-
-
-
-
-
-
-
-◆ GetDefaultLogFileName()
-
-
-
-
-
-
-
-
- xbString & xb::xbSsv::GetDefaultLogFileName
- (
- )
- const
-
-
-
-
-inherited
-
-
-
-
@@ -1770,6 +1726,91 @@ Static Protected Attributes
Get the fully qualified file name.
Returns the fully qualfied name of the file
+
+
+
+◆ GetHomeDir()
+
+
+
+
+
+
+
+
+ void xb::xbSsv::GetHomeDir
+ (
+ xbString &
+ sHomeDirOut )
+
+
+
+
+
+inherited
+
+
+
+
+
Get home directory.
+
Parameters
+
+ sHomeDirOut - Output home directory for current user.
+
+
+
+
Returns void
+
+
+
+
+◆ GetLogDirectory()
+
+
+
+
+
+
+
+
+ xbString & xb::xbSsv::GetLogDirectory
+ (
+ )
+ const
+
+
+
+
+inherited
+
+
+
+
+
+
+
+◆ GetLogFileName()
+
+
+
+
+
+
+
+
+ xbString & xb::xbSsv::GetLogFileName
+ (
+ )
+ const
+
+
+
+
+inherited
+
+
+
+
@@ -2244,32 +2285,6 @@ Static Protected Attributes
-
-
-
-◆ SetDefaultLogDirectory()
-
-
-
-
-
-
-
-
- void xb::xbSsv::SetDefaultLogDirectory
- (
- const xbString &
- sDefaultLogDirectory )
-
-
-
-
-
-inherited
-
-
-
-
@@ -2380,6 +2395,53 @@ Static Protected Attributes
+
+
+
+◆ SetHomeFolders()
+
+
+
+
+
+ xbInt16 xb::xbFile::SetHomeFolders
+ (
+ )
+
+
+
+
+
+
Create Home Folders.
+
Create xbase64 log and data folders in the home directory for current usre.
+
Returns Return Codes
+
+
+
+
+◆ SetLogDirectory()
+
+
+
+
+
+
+
+
+ void xb::xbSsv::SetLogDirectory
+ (
+ const xbString &
+ sLogDirectory )
+
+
+
+
+
+inherited
+
+
+
+
@@ -2925,7 +2987,7 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
p Pointer to data to write
size size of write
- nmemb Number of times to write it
+ nmemb Number of times to read it
@@ -3358,8 +3420,8 @@ The mode can also include the letter "b" for binary ie; "r+b". The "b" is ignore
The documentation for this class was generated from the following files:
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbfile.h
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbfile.cpp
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbfile.h
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfile.cpp
diff --git a/docs/doxygen/html/classxb_1_1xbSsv.html b/docs/doxygen/html/classxb_1_1xbSsv.html
index 9180d1d..96a07d8 100644
--- a/docs/doxygen/html/classxb_1_1xbSsv.html
+++ b/docs/doxygen/html/classxb_1_1xbSsv.html
@@ -133,12 +133,15 @@ Public Member Functions
void SetDefaultAutoCommit (xbBool bDefaultAutoCommit)
Set the default auto commit. More...
-xbString & GetDefaultLogDirectory () const
-
-xbString & GetDefaultLogFileName () const
-
-void SetDefaultLogDirectory (const xbString &sDefaultLogDirectory)
-
+void GetHomeDir (xbString &sHomeDirOut)
+ Get home directory. More...
+
+xbString & GetLogDirectory () const
+
+xbString & GetLogFileName () const
+
+void SetLogDirectory (const xbString &sLogDirectory)
+
xbBool GetMultiUser () const
Get the multi user setting. More...
@@ -352,14 +355,14 @@ Static Protected Attributes
-
-◆ GetDefaultLogDirectory()
+
+◆ GetEndianType()
- xbString & xb::xbSsv::GetDefaultLogDirectory
+ xbInt16 xb::xbSsv::GetEndianType
(
)
const
@@ -367,71 +370,98 @@ Static Protected Attributes
+
Get the Endian type.
+
Returns B - Big endian
+ L - Little endian
+
+
-
-◆ GetDefaultLogFileName()
+
+◆ GetErrorMessage()
- xbString & xb::xbSsv::GetDefaultLogFileName
+ const char * xb::xbSsv::GetErrorMessage
(
- )
+ xbInt16
+ iErrorCode )
const
+
Get an error message.
+
Parameters
+
+ iErrorCode ErrorCode is the error number of description to be returned.
+
+
+
+
Returns Returns a pointer to a string containing a text description for the error code.
+
-
-◆ GetEndianType()
+
+◆ GetHomeDir()
- xbInt16 xb::xbSsv::GetEndianType
+ void xb::xbSsv::GetHomeDir
(
- )
- const
+ xbString &
+ sHomeDirOut )
+
-
Get the Endian type.
-
Returns B - Big endian
- L - Little endian
-
+
Get home directory.
+
Parameters
+
+ sHomeDirOut - Output home directory for current user.
+
+
+
+
Returns void
-
-◆ GetErrorMessage()
+
+◆ GetLogDirectory()
- const char * xb::xbSsv::GetErrorMessage
+ xbString & xb::xbSsv::GetLogDirectory
(
- xbInt16
- iErrorCode )
+ )
const
-
Get an error message.
-
Parameters
-
- iErrorCode ErrorCode is the error number of description to be returned.
-
-
-
-
Returns Returns a pointer to a string containing a text description for the error code.
+
+
+
+◆ GetLogFileName()
+
+
+
+
+
+ xbString & xb::xbSsv::GetLogFileName
+ (
+ )
+ const
+
+
+
@@ -536,24 +566,6 @@ Static Protected Attributes
-
-
-
-◆ SetDefaultLogDirectory()
-
-
-
-
-
- void xb::xbSsv::SetDefaultLogDirectory
- (
- const xbString &
- sDefaultLogDirectory )
-
-
-
-
-
@@ -582,6 +594,24 @@ Static Protected Attributes
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.
+
+
+
+◆ SetLogDirectory()
+
+
+
+
+
+ void xb::xbSsv::SetLogDirectory
+ (
+ const xbString &
+ sLogDirectory )
+
+
+
+
+
@@ -680,8 +710,8 @@ Static Protected Attributes
The documentation for this class was generated from the following files:
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbssv.h
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbssv.cpp
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbssv.h
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbssv.cpp
diff --git a/docs/doxygen/html/classxb_1_1xbString.html b/docs/doxygen/html/classxb_1_1xbString.html
index 7d509c9..1cf60fe 100644
--- a/docs/doxygen/html/classxb_1_1xbString.html
+++ b/docs/doxygen/html/classxb_1_1xbString.html
@@ -267,6 +267,9 @@ Public Member Functions
xbString & PadRight (char c, xbUInt32 ulLen)
Right pad string. More...
+xbUInt32 Pos (char c, xbUInt32 ulStartPos) const
+ Determine position of a given character. More...
+
xbUInt32 Pos (char c) const
Determine position of a given character. More...
@@ -2124,7 +2127,7 @@ Friends
-◆ Pos() [1/2]
+◆ Pos() [1/3]
@@ -2148,10 +2151,48 @@ Friends
Returns Position within string. Returns 0 if not found.
+
+
+
+◆ Pos() [2/3]
+
+
+
+
+
+ xbUInt32 xb::xbString::Pos
+ (
+ char
+ c ,
+
+
+
+
+ xbUInt32
+ ulStartPos
+
+
+
+ )
+ const
+
+
+
+
+
Determine position of a given character.
+
Parameters
+
+ c Seek character
+ ulStartPos starting position for search, first position is 1
+
+
+
+
Returns Position within string. Returns 0 if not found.
+
-◆ Pos() [2/2]
+◆ Pos() [3/3]
@@ -2835,8 +2876,8 @@ Friends
The documentation for this class was generated from the following files:
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbstring.h
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbstring.cpp
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbstring.h
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbstring.cpp
diff --git a/docs/doxygen/html/classxb_1_1xbTblMgr.html b/docs/doxygen/html/classxb_1_1xbTblMgr.html
index ccd4287..c94fe35 100644
--- a/docs/doxygen/html/classxb_1_1xbTblMgr.html
+++ b/docs/doxygen/html/classxb_1_1xbTblMgr.html
@@ -94,10 +94,10 @@ Public Member Functions
~xbTblMgr ()
-xbInt16 AddTblToTblList (xbDbf *d, const xbString &sTblName)
-
-xbInt16 AddTblToTblList (xbDbf *d, const xbString &sTblName, const xbString &sTblAlias)
-
+xbInt16 AddTblToTblList (xbDbf *d, const xbString &sFqTblName)
+
+xbInt16 AddTblToTblList (xbDbf *d, const xbString &sFqTblName, const xbString &sTblAlias)
+
xbInt16 DisplayTableList () const
xbDbf * GetDbfPtr (const xbString &sTblAlias) const
@@ -146,12 +146,15 @@ Public Member Functions
void SetDefaultAutoCommit (xbBool bDefaultAutoCommit)
Set the default auto commit. More...
-xbString & GetDefaultLogDirectory () const
-
-xbString & GetDefaultLogFileName () const
-
-void SetDefaultLogDirectory (const xbString &sDefaultLogDirectory)
-
+void GetHomeDir (xbString &sHomeDirOut)
+ Get home directory. More...
+
+xbString & GetLogDirectory () const
+
+xbString & GetLogFileName () const
+
+void SetLogDirectory (const xbString &sLogDirectory)
+
xbBool GetMultiUser () const
Get the multi user setting. More...
@@ -213,8 +216,8 @@ Static Protected Attributes
-
-◆ AddTblToTblList() [1/2]
+
+◆ AddTblToTblList() [1/2]
@@ -229,7 +232,7 @@ Static Protected Attributes
const xbString &
-
sTblName
+
sFqTblName
@@ -241,8 +244,8 @@ Static Protected Attributes
-
-◆ AddTblToTblList() [2/2]
+
+◆ AddTblToTblList() [2/2]
@@ -257,7 +260,7 @@ Static Protected Attributes
const xbString &
-
sTblName ,
+
sFqTblName ,
@@ -547,8 +550,8 @@ Static Protected Attributes
-
-◆ GetDefaultLogDirectory()
+
+◆ GetEndianType()
@@ -557,7 +560,7 @@ Static Protected Attributes
- xbString & xb::xbSsv::GetDefaultLogDirectory
+ xbInt16 xb::xbSsv::GetEndianType
(
)
const
@@ -570,10 +573,15 @@ Static Protected Attributes
+
Get the Endian type.
+
Returns B - Big endian
+ L - Little endian
+
+
-
-◆ GetDefaultLogFileName()
+
+◆ GetErrorMessage()
@@ -582,9 +590,10 @@ Static Protected Attributes
- xbString & xb::xbSsv::GetDefaultLogFileName
+ const char * xb::xbSsv::GetErrorMessage
(
- )
+ xbInt16
+ iErrorCode )
const
@@ -595,10 +604,19 @@ Static Protected Attributes
+
Get an error message.
+
Parameters
+
+ iErrorCode ErrorCode is the error number of description to be returned.
+
+
+
+
Returns Returns a pointer to a string containing a text description for the error code.
+
-
-◆ GetEndianType()
+
+◆ GetHomeDir()
@@ -607,10 +625,11 @@ Static Protected Attributes
- xbInt16 xb::xbSsv::GetEndianType
+ void xb::xbSsv::GetHomeDir
(
- )
- const
+ xbString &
+ sHomeDirOut )
+
@@ -620,15 +639,19 @@ Static Protected Attributes
-
Get the Endian type.
-
Returns B - Big endian
- L - Little endian
-
+
Get home directory.
+
Parameters
+
+ sHomeDirOut - Output home directory for current user.
+
+
+
+
Returns void
-
-◆ GetErrorMessage()
+
+◆ GetLogDirectory()
@@ -637,10 +660,9 @@ Static Protected Attributes
- const char * xb::xbSsv::GetErrorMessage
+ xbString & xb::xbSsv::GetLogDirectory
(
- xbInt16
- iErrorCode )
+ )
const
@@ -651,14 +673,30 @@ Static Protected Attributes
-
Get an error message.
-
Parameters
-
- iErrorCode ErrorCode is the error number of description to be returned.
-
-
-
-
Returns Returns a pointer to a string containing a text description for the error code.
+
+
+
+◆ GetLogFileName()
+
+
+
+
+
+
+
+
+ xbString & xb::xbSsv::GetLogFileName
+ (
+ )
+ const
+
+
+
+
+inherited
+
+
+
@@ -868,8 +906,8 @@ Static Protected Attributes
-
-◆ SetDefaultLogDirectory()
+
+◆ SetEndianType()
@@ -878,24 +916,26 @@ Static Protected Attributes
- void xb::xbSsv::SetDefaultLogDirectory
+ void xb::xbSsv::SetEndianType
(
- const xbString &
- sDefaultLogDirectory )
+ )
-inherited
+
protected inherited
+
Set the endian type.
+
This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program.
+
-
-◆ SetEndianType()
+
+◆ SetLogDirectory()
@@ -904,22 +944,20 @@ Static Protected Attributes
- void xb::xbSsv::SetEndianType
+ void xb::xbSsv::SetLogDirectory
(
- )
+ const xbString &
+ sLogDirectory )
-protected inherited
+
inherited
-
Set the endian type.
-
This routine determines the Endian-ness at run time instead of compile time as some processers (ie; Sparc,ARM) can be switched either way. This routine is called automatically by the library at startup and does not need to be called in an application program.
-
@@ -1026,8 +1064,8 @@ Static Protected Attributes
The documentation for this class was generated from the following files:
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbtblmgr.h
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbtblmgr.cpp
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbtblmgr.h
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbtblmgr.cpp
diff --git a/docs/doxygen/html/classxb_1_1xbXBase.html b/docs/doxygen/html/classxb_1_1xbXBase.html
index 7699920..5d4767f 100644
--- a/docs/doxygen/html/classxb_1_1xbXBase.html
+++ b/docs/doxygen/html/classxb_1_1xbXBase.html
@@ -141,10 +141,16 @@ Public Member Functions
void xbSleep (xbInt32 lMillisecs)
Cross platform sleep function. More...
-xbInt16 AddTblToTblList (xbDbf *d, const xbString &sTblName)
-
-xbInt16 AddTblToTblList (xbDbf *d, const xbString &sTblName, const xbString &sTblAlias)
-
+xbInt16 GetCmdLineOpt (xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &sParmOut)
+ Parse commmand line options for a given parm request. More...
+
+xbInt16 GetCmdLineOpt (xbInt32 lArgc, char **argv, xbString &sOptRqst, xbString &sParmOut)
+ Parse commmand line options for a given parm request. More...
+
+xbInt16 AddTblToTblList (xbDbf *d, const xbString &sFqTblName)
+
+xbInt16 AddTblToTblList (xbDbf *d, const xbString &sFqTblName, const xbString &sTblAlias)
+
xbInt16 DisplayTableList () const
xbDbf * GetDbfPtr (const xbString &sTblAlias) const
@@ -193,12 +199,9 @@ Public Member Functions
void SetDefaultAutoCommit (xbBool bDefaultAutoCommit)
Set the default auto commit. More...
-xbString & GetDefaultLogDirectory () const
-
-xbString & GetDefaultLogFileName () const
-
-void SetDefaultLogDirectory (const xbString &sDefaultLogDirectory)
-
+void GetHomeDir (xbString &sHomeDirOut)
+ Get home directory. More...
+
xbBool GetMultiUser () const
Get the multi user setting. More...
@@ -282,8 +285,8 @@ Friends
-
-◆ AddTblToTblList() [1/2]
+
+◆ AddTblToTblList() [1/2]
@@ -301,7 +304,7 @@ Friends
const xbString &
-
sTblName
+
sFqTblName
@@ -318,8 +321,8 @@ Friends
-
-◆ AddTblToTblList() [2/2]
+
+◆ AddTblToTblList() [2/2]
@@ -337,7 +340,7 @@ Friends
const xbString &
-
sTblName ,
+
sFqTblName ,
@@ -587,6 +590,112 @@ Friends
+
+
+
+◆ GetCmdLineOpt() [1/2]
+
+
+
+
+
+ xbInt16 xb::xbXBase::GetCmdLineOpt
+ (
+ xbInt32
+ lArgc ,
+
+
+
+
+ char **
+ sArgv ,
+
+
+
+
+ const char *
+ sOptRqst ,
+
+
+
+
+ xbString &
+ sParmOut
+
+
+
+ )
+
+
+
+
+
+
Parse commmand line options for a given parm request.
+
Parameters
+
+ lArgc Value passed from main( argc, argv[] )
+ sArgv Valued passed from main
+ sOptRqst Option to search for in the arguments list
+ sParmOut String token immediately to the right of the the option request, if found
+
+
+
+
Returns 0 - paramater request not found
+ 1 - Parameter found
+
+
+
+
+◆ GetCmdLineOpt() [2/2]
+
+
+
+
+
+ xbInt16 xb::xbXBase::GetCmdLineOpt
+ (
+ xbInt32
+ lArgc ,
+
+
+
+
+ char **
+ sArgv ,
+
+
+
+
+ xbString &
+ sOptRqst ,
+
+
+
+
+ xbString &
+ sParmOut
+
+
+
+ )
+
+
+
+
+
+
Parse commmand line options for a given parm request.
+
Parameters
+
+ lArgc Value passed from main( argc, argv[] )
+ sArgv Valued passed from main
+ sOptRqst Option to search for in the arguments list
+ sParmOut String token immediately to the right of the the option request, if found
+
+
+
+
Returns 0 - paramater request not found
+ 1 - Parameter found
+
@@ -725,56 +834,6 @@ Friends
Get the default date format.
Returns xbString containing the default date format.
-
-
-
-◆ GetDefaultLogDirectory()
-
-
-
-
-
-
-
-
- xbString & xb::xbSsv::GetDefaultLogDirectory
- (
- )
- const
-
-
-
-
-inherited
-
-
-
-
-
-
-
-◆ GetDefaultLogFileName()
-
-
-
-
-
-
-
-
- xbString & xb::xbSsv::GetDefaultLogFileName
- (
- )
- const
-
-
-
-
-inherited
-
-
-
-
@@ -888,6 +947,41 @@ Friends
+
+
+
+◆ GetHomeDir()
+
+
+
+
+
+
+
+
+ void xb::xbSsv::GetHomeDir
+ (
+ xbString &
+ sHomeDirOut )
+
+
+
+
+
+inherited
+
+
+
+
+
Get home directory.
+
Parameters
+
+ sHomeDirOut - Output home directory for current user.
+
+
+
+
Returns void
+
@@ -1366,32 +1460,6 @@ Friends
-
-
-
-◆ SetDefaultLogDirectory()
-
-
-
-
-
-
-
-
- void xb::xbSsv::SetDefaultLogDirectory
- (
- const xbString &
- sDefaultLogDirectory )
-
-
-
-
-
-inherited
-
-
-
-
@@ -1762,8 +1830,8 @@ Friends
The documentation for this class was generated from the following files:
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbxbase.h
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbxbase.cpp
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbxbase.h
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbxbase.cpp
diff --git a/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html b/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
index 6e22ff0..48adaeb 100644
--- a/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
+++ b/docs/doxygen/html/dir_25b94c3afce00ed38231227d8141f932.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql Directory Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql Directory Reference
@@ -79,6 +79,8 @@ Files
file xbcrtbl.cpp
+file xbcrtbl.save.cpp
+
file xbdelete.cpp
file xbdrpix.cpp
@@ -87,10 +89,14 @@ Files
file xbinsert.cpp
+file xbselect.cpp
+
file xbset.cpp
file xbsql.cpp
+file xbstmt.cpp
+
diff --git a/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html b/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
index fd2b2f8..0a07b74 100644
--- a/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
+++ b/docs/doxygen/html/dir_313caf1132e152dd9b58bea13a4052ca.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils Directory Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils Directory Reference
@@ -83,10 +83,6 @@ Files
file xb_dumpdbt.cpp
-file xb_dumphdr.cpp
-
-file xb_dumpix.cpp
-
file xb_dumprecs.cpp
file xb_execsql.cpp
@@ -97,8 +93,6 @@ Files
file xb_undelall.cpp
-file xb_zap.cpp
-
diff --git a/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
index 66057d7..82d0f44 100644
--- a/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
+++ b/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src Directory Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src Directory Reference
diff --git a/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html b/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
index bb40dd2..f8b8ebe 100644
--- a/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
+++ b/docs/doxygen/html/dir_aebb8dcc11953d78e620bbef0b9e2183.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core Directory Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core Directory Reference
@@ -75,6 +75,8 @@ $(function() {
Files
file xbbcd.cpp
+file xbblockread.cpp
+
file xbdate.cpp
file xbdbf.cpp
diff --git a/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html b/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
index 76eb467..7e0bf9d 100644
--- a/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
+++ b/docs/doxygen/html/dir_b0856f6b0d80ccb263b2f415c91f9e17.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include Directory Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include Directory Reference
@@ -77,6 +77,8 @@ Files
file xbbcd.h [code]
+file xbblkread.h [code]
+
file xbdate.h [code]
file xbdbf.h [code]
diff --git a/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html b/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
index 03dde8a..3345e9b 100644
--- a/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
+++ b/docs/doxygen/html/dir_d93a1d4020dea85bb71b237545b5e722.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests Directory Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests Directory Reference
@@ -77,6 +77,8 @@ Files
file xb_test_bcd.cpp
+file xb_test_blockread.cpp
+
file xb_test_date.cpp
file xb_test_dbf_v3_memos.cpp
diff --git a/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html b/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
index 5553e32..b4eef2e 100644
--- a/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
+++ b/docs/doxygen/html/dir_e931c1a3f0014e624d0645a271726ad2.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/examples Directory Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples Directory Reference
@@ -75,8 +75,12 @@ $(function() {
Files
file xb_ex_date.cpp
+file xb_ex_expression.cpp
+
file xb_ex_sql.cpp
+file xb_ex_ssv.cpp
+
file xb_ex_string.cpp
file xb_ex_v3_create_dbf.cpp
diff --git a/docs/doxygen/html/files.html b/docs/doxygen/html/files.html
index d85fb7b..cbd1de4 100644
--- a/docs/doxygen/html/files.html
+++ b/docs/doxygen/html/files.html
@@ -71,109 +71,114 @@ $(function() {
▼ src
► core
xbbcd.cpp
- xbdate.cpp
- xbdbf.cpp
- xbdbf3.cpp
- xbdbf4.cpp
- xbexp.cpp
- xbexpnode.cpp
- xbfields.cpp
- xbfile.cpp
- xbfilter.cpp
- xbfuncs.cpp
- xbixbase.cpp
- xbixmdx.cpp
- xbixndx.cpp
- xblog.cpp
- xbmemo.cpp
- xbmemo3.cpp
- xbmemo4.cpp
- xbssv.cpp
- xbstring.cpp
- xbtag.cpp
- xbtblmgr.cpp
- xbuda.cpp
- xbxbase.cpp
+ xbblockread.cpp
+ xbdate.cpp
+ xbdbf.cpp
+ xbdbf3.cpp
+ xbdbf4.cpp
+ xbexp.cpp
+ xbexpnode.cpp
+ xbfields.cpp
+ xbfile.cpp
+ xbfilter.cpp
+ xbfuncs.cpp
+ xbixbase.cpp
+ xbixmdx.cpp
+ xbixndx.cpp
+ xblog.cpp
+ xbmemo.cpp
+ xbmemo3.cpp
+ xbmemo4.cpp
+ xbssv.cpp
+ xbstring.cpp
+ xbtag.cpp
+ xbtblmgr.cpp
+ xbuda.cpp
+ xbxbase.cpp
► examples
xb_ex_date.cpp
- xb_ex_sql.cpp
- xb_ex_string.cpp
- xb_ex_v3_create_dbf.cpp
- xb_ex_v3_upd_dbf.cpp
- xb_ex_v4_create_dbf.cpp
- xb_ex_v4_upd_dbf.cpp
+ xb_ex_expression.cpp
+ xb_ex_sql.cpp
+ xb_ex_ssv.cpp
+ xb_ex_string.cpp
+ xb_ex_v3_create_dbf.cpp
+ xb_ex_v3_upd_dbf.cpp
+ xb_ex_v4_create_dbf.cpp
+ xb_ex_v4_upd_dbf.cpp
► include
xbase.h
xbbcd.h
- xbdate.h
- xbdbf.h
- xbexp.h
- xbexpnode.h
- xbfile.h
- xbfilter.h
- xbindex.h
- xblnklst.h
- xblnklstord.h
- xblnknod.h
- xblog.h
- xbmemo.h
- xbretcod.h
- xbsql.h
- xbssv.h
- xbstring.h
- xbtag.h
- xbtblmgr.h
- xbtypes.h
- xbuda.h
- xbxbase.h
+ xbblkread.h
+ xbdate.h
+ xbdbf.h
+ xbexp.h
+ xbexpnode.h
+ xbfile.h
+ xbfilter.h
+ xbindex.h
+ xblnklst.h
+ xblnklstord.h
+ xblnknod.h
+ xblog.h
+ xbmemo.h
+ xbretcod.h
+ xbsql.h
+ xbssv.h
+ xbstring.h
+ xbtag.h
+ xbtblmgr.h
+ xbtypes.h
+ xbuda.h
+ xbxbase.h
► sql
xbalttbl.cpp
xbcrix.cpp
xbcrtbl.cpp
- xbdelete.cpp
- xbdrpix.cpp
- xbdrptbl.cpp
- xbinsert.cpp
- xbset.cpp
- xbsql.cpp
+ xbcrtbl.save.cpp
+ xbdelete.cpp
+ xbdrpix.cpp
+ xbdrptbl.cpp
+ xbinsert.cpp
+ xbselect.cpp
+ xbset.cpp
+ xbsql.cpp
+ xbstmt.cpp
► tests
tstfuncs.cpp
xb_test_bcd.cpp
- xb_test_date.cpp
- xb_test_dbf_v3_memos.cpp
- xb_test_dbf_v3_nomemos.cpp
- xb_test_dbf_v4_memos.cpp
- xb_test_dbf_v4_nomemos.cpp
- xb_test_expnode.cpp
- xb_test_expression.cpp
- xb_test_file.cpp
- xb_test_filter.cpp
- xb_test_funcs.cpp
- xb_test_linklist.cpp
- xb_test_lock.cpp
- xb_test_lock2.cpp
- xb_test_log.cpp
- xb_test_mdx.cpp
- xb_test_ndx.cpp
- xb_test_sql.cpp
- xb_test_string.cpp
- xb_test_tblmgr.cpp
- xb_test_uda.cpp
- xb_test_xbase.cpp
+ xb_test_blockread.cpp
+ xb_test_date.cpp
+ xb_test_dbf_v3_memos.cpp
+ xb_test_dbf_v3_nomemos.cpp
+ xb_test_dbf_v4_memos.cpp
+ xb_test_dbf_v4_nomemos.cpp
+ xb_test_expnode.cpp
+ xb_test_expression.cpp
+ xb_test_file.cpp
+ xb_test_filter.cpp
+ xb_test_funcs.cpp
+ xb_test_linklist.cpp
+ xb_test_lock.cpp
+ xb_test_lock2.cpp
+ xb_test_log.cpp
+ xb_test_mdx.cpp
+ xb_test_ndx.cpp
+ xb_test_sql.cpp
+ xb_test_string.cpp
+ xb_test_tblmgr.cpp
+ xb_test_uda.cpp
+ xb_test_xbase.cpp
► utils
xb_cfg_check.cpp
xb_copydbf.cpp
xb_dbfutil.cpp
xb_deletall.cpp
xb_dumpdbt.cpp
- xb_dumphdr.cpp
- xb_dumpix.cpp
- xb_dumprecs.cpp
- xb_execsql.cpp
- xb_pack.cpp
- xb_tblinfo.cpp
- xb_undelall.cpp
- xb_zap.cpp
+ xb_dumprecs.cpp
+ xb_execsql.cpp
+ xb_pack.cpp
+ xb_tblinfo.cpp
+ xb_undelall.cpp
diff --git a/docs/doxygen/html/functions.html b/docs/doxygen/html/functions.html
index 4332e69..6e4da8b 100644
--- a/docs/doxygen/html/functions.html
+++ b/docs/doxygen/html/functions.html
@@ -68,7 +68,7 @@ $(function() {
- a -
Abort() : xb::xbDbf
AddBackSlash() : xb::xbString
-AddTblToTblList() : xb::xbTblMgr
+AddTblToTblList() : xb::xbTblMgr
Append() : xb::xbString
AppendRecord() : xb::xbDbf
Assign() : xb::xbString
diff --git a/docs/doxygen/html/functions_func.html b/docs/doxygen/html/functions_func.html
index e26f40d..47e8f65 100644
--- a/docs/doxygen/html/functions_func.html
+++ b/docs/doxygen/html/functions_func.html
@@ -68,7 +68,7 @@ $(function() {
- a -
Abort() : xb::xbDbf
AddBackSlash() : xb::xbString
-AddTblToTblList() : xb::xbTblMgr
+AddTblToTblList() : xb::xbTblMgr
Append() : xb::xbString
AppendRecord() : xb::xbDbf
Assign() : xb::xbString
diff --git a/docs/doxygen/html/functions_func_g.html b/docs/doxygen/html/functions_func_g.html
index 736af49..18ab1bc 100644
--- a/docs/doxygen/html/functions_func_g.html
+++ b/docs/doxygen/html/functions_func_g.html
@@ -68,7 +68,9 @@ $(function() {
- g -
GetAutoCommit() : xb::xbDbf
GetBlockSize() : xb::xbFile
+GetBof() : xb::xbDbf
GetCharacter() : xb::xbString
+GetCmdLineOpt() : xb::xbXBase
GetCurRecNo() : xb::xbDbf
GetDataDirectory() : xb::xbSsv
GetDateField() : xb::xbDbf
@@ -76,11 +78,10 @@ $(function() {
GetDbfStatus() : xb::xbDbf
GetDefaultAutoCommit() : xb::xbSsv
GetDefaultDateFormat() : xb::xbSsv
-GetDefaultLogDirectory() : xb::xbSsv
-GetDefaultLogFileName() : xb::xbSsv
GetDirectory() : xb::xbFile
GetDoubleField() : xb::xbDbf
GetEndianType() : xb::xbSsv
+GetEof() : xb::xbDbf
GetErrorMessage() : xb::xbSsv
GetField() : xb::xbDbf
GetFieldCnt() : xb::xbDbf
@@ -88,7 +89,7 @@ $(function() {
GetFieldLen() : xb::xbDbf
GetFieldName() : xb::xbDbf
GetFieldNo() : xb::xbDbf
-GetFieldType() : xb::xbDbf
+GetFieldType() : xb::xbDbf
GetFileDirPart() : xb::xbFile
GetFileExtPart() : xb::xbFile
GetFileMtime() : xb::xbFile
@@ -96,14 +97,16 @@ $(function() {
GetFileNamePart() : xb::xbFile
GetFileSize() : xb::xbFile
GetFileType() : xb::xbFile
-GetFirstRecord() : xb::xbDbf
+GetFirstRecord() : xb::xbDbf
GetFloatField() : xb::xbDbf
GetFqFileName() : xb::xbFile
GetFunctionInfo() : xb::xbXBase
+GetHeaderLen() : xb::xbDbf
+GetHomeDir() : xb::xbSsv
GetLastPos() : xb::xbString
GetLastRecord() : xb::xbDbf
-GetLogDirectory() : xb::xbXBase
-GetLogFileName() : xb::xbXBase
+GetLogDirectory() : xb::xbSsv , xb::xbXBase
+GetLogFileName() : xb::xbSsv , xb::xbXBase
GetLogFqFileName() : xb::xbXBase
GetLogicalField() : xb::xbDbf
GetLogStatus() : xb::xbXBase
diff --git a/docs/doxygen/html/functions_func_p.html b/docs/doxygen/html/functions_func_p.html
index 06b46c1..3985e96 100644
--- a/docs/doxygen/html/functions_func_p.html
+++ b/docs/doxygen/html/functions_func_p.html
@@ -69,7 +69,7 @@ $(function() {
Pack() : xb::xbDbf
PadLeft() : xb::xbString
PadRight() : xb::xbString
-Pos() : xb::xbString
+Pos() : xb::xbString
PutAt() : xb::xbString
PutDateField() : xb::xbDbf
PutDoubleField() : xb::xbDbf
diff --git a/docs/doxygen/html/functions_func_s.html b/docs/doxygen/html/functions_func_s.html
index 2068078..99e6b3c 100644
--- a/docs/doxygen/html/functions_func_s.html
+++ b/docs/doxygen/html/functions_func_s.html
@@ -72,12 +72,12 @@ $(function() {
SetDataDirectory() : xb::xbSsv
SetDefaultAutoCommit() : xb::xbSsv
SetDefaultDateFormat() : xb::xbSsv
-SetDefaultLogDirectory() : xb::xbSsv
SetDirectory() : xb::xbFile
SetEndianType() : xb::xbSsv
SetFileName() : xb::xbFile
SetFqFileName() : xb::xbFile
-SetLogDirectory() : xb::xbXBase
+SetHomeFolders() : xb::xbFile
+SetLogDirectory() : xb::xbSsv , xb::xbXBase
SetLogFileName() : xb::xbXBase
SetLogSize() : xb::xbXBase
SetMultiUser() : xb::xbSsv
diff --git a/docs/doxygen/html/functions_g.html b/docs/doxygen/html/functions_g.html
index 601e48d..d67e26c 100644
--- a/docs/doxygen/html/functions_g.html
+++ b/docs/doxygen/html/functions_g.html
@@ -68,7 +68,9 @@ $(function() {
- g -
GetAutoCommit() : xb::xbDbf
GetBlockSize() : xb::xbFile
+GetBof() : xb::xbDbf
GetCharacter() : xb::xbString
+GetCmdLineOpt() : xb::xbXBase
GetCurRecNo() : xb::xbDbf
GetDataDirectory() : xb::xbSsv
GetDateField() : xb::xbDbf
@@ -76,11 +78,10 @@ $(function() {
GetDbfStatus() : xb::xbDbf
GetDefaultAutoCommit() : xb::xbSsv
GetDefaultDateFormat() : xb::xbSsv
-GetDefaultLogDirectory() : xb::xbSsv
-GetDefaultLogFileName() : xb::xbSsv
GetDirectory() : xb::xbFile
GetDoubleField() : xb::xbDbf
GetEndianType() : xb::xbSsv
+GetEof() : xb::xbDbf
GetErrorMessage() : xb::xbSsv
GetField() : xb::xbDbf
GetFieldCnt() : xb::xbDbf
@@ -88,7 +89,7 @@ $(function() {
GetFieldLen() : xb::xbDbf
GetFieldName() : xb::xbDbf
GetFieldNo() : xb::xbDbf
-GetFieldType() : xb::xbDbf
+GetFieldType() : xb::xbDbf
GetFileDirPart() : xb::xbFile
GetFileExtPart() : xb::xbFile
GetFileMtime() : xb::xbFile
@@ -96,14 +97,16 @@ $(function() {
GetFileNamePart() : xb::xbFile
GetFileSize() : xb::xbFile
GetFileType() : xb::xbFile
-GetFirstRecord() : xb::xbDbf
+GetFirstRecord() : xb::xbDbf
GetFloatField() : xb::xbDbf
GetFqFileName() : xb::xbFile
GetFunctionInfo() : xb::xbXBase
+GetHeaderLen() : xb::xbDbf
+GetHomeDir() : xb::xbSsv
GetLastPos() : xb::xbString
GetLastRecord() : xb::xbDbf
-GetLogDirectory() : xb::xbXBase
-GetLogFileName() : xb::xbXBase
+GetLogDirectory() : xb::xbSsv , xb::xbXBase
+GetLogFileName() : xb::xbSsv , xb::xbXBase
GetLogFqFileName() : xb::xbXBase
GetLogicalField() : xb::xbDbf
GetLogStatus() : xb::xbXBase
diff --git a/docs/doxygen/html/functions_p.html b/docs/doxygen/html/functions_p.html
index b86c965..a2d9678 100644
--- a/docs/doxygen/html/functions_p.html
+++ b/docs/doxygen/html/functions_p.html
@@ -71,12 +71,13 @@ $(function() {
PadRight() : xb::xbString
pDbf : xb::xbTblList
pNext : xb::xbTblList
-Pos() : xb::xbString
+Pos() : xb::xbString
+psFqTblName : xb::xbTblList
psTblAlias : xb::xbTblList
psTblName : xb::xbTblList
PutAt() : xb::xbString
PutDateField() : xb::xbDbf
-PutDoubleField() : xb::xbDbf
+PutDoubleField() : xb::xbDbf
PutField() : xb::xbDbf
PutFloatField() : xb::xbDbf
PutLogicalField() : xb::xbDbf
diff --git a/docs/doxygen/html/functions_s.html b/docs/doxygen/html/functions_s.html
index 23c3f57..c0cb82b 100644
--- a/docs/doxygen/html/functions_s.html
+++ b/docs/doxygen/html/functions_s.html
@@ -74,12 +74,12 @@ $(function() {
SetDataDirectory() : xb::xbSsv
SetDefaultAutoCommit() : xb::xbSsv
SetDefaultDateFormat() : xb::xbSsv
-SetDefaultLogDirectory() : xb::xbSsv
SetDirectory() : xb::xbFile
SetEndianType() : xb::xbSsv
SetFileName() : xb::xbFile
SetFqFileName() : xb::xbFile
-SetLogDirectory() : xb::xbXBase
+SetHomeFolders() : xb::xbFile
+SetLogDirectory() : xb::xbSsv , xb::xbXBase
SetLogFileName() : xb::xbXBase
SetLogSize() : xb::xbXBase
SetMultiUser() : xb::xbSsv
diff --git a/docs/doxygen/html/functions_vars.html b/docs/doxygen/html/functions_vars.html
index 36172a1..557c2b3 100644
--- a/docs/doxygen/html/functions_vars.html
+++ b/docs/doxygen/html/functions_vars.html
@@ -98,6 +98,7 @@ $(function() {
- p -
diff --git a/docs/doxygen/html/globals.html b/docs/doxygen/html/globals.html
index bae955d..b12ae53 100644
--- a/docs/doxygen/html/globals.html
+++ b/docs/doxygen/html/globals.html
@@ -102,7 +102,16 @@ $(function() {
- m -
-main() : xb_deletall.cpp , xb_test_mdx.cpp , xb_test_ndx.cpp , xb_test_sql.cpp , xb_test_string.cpp , xb_test_tblmgr.cpp , xb_test_uda.cpp , xb_test_xbase.cpp , xb_cfg_check.cpp , xb_copydbf.cpp , xb_dbfutil.cpp , xb_test_log.cpp , xb_dumpdbt.cpp , xb_dumphdr.cpp , xb_dumpix.cpp , xb_dumprecs.cpp , xb_execsql.cpp , xb_pack.cpp , xb_tblinfo.cpp , xb_undelall.cpp , xb_zap.cpp , xb_test_dbf_v4_memos.cpp , xb_ex_sql.cpp , xb_ex_string.cpp , xb_ex_v3_create_dbf.cpp , xb_ex_v3_upd_dbf.cpp , xb_ex_v4_create_dbf.cpp , xb_ex_v4_upd_dbf.cpp , xb_test_bcd.cpp , xb_test_date.cpp , xb_test_dbf_v3_memos.cpp , xb_test_dbf_v3_nomemos.cpp , xb_ex_date.cpp , xb_test_dbf_v4_nomemos.cpp , xb_test_expnode.cpp , xb_test_expression.cpp , xb_test_file.cpp , xb_test_filter.cpp , xb_test_funcs.cpp , xb_test_linklist.cpp , xb_test_lock.cpp , xb_test_lock2.cpp
+main() : xb_cfg_check.cpp , xb_test_lock.cpp , xb_test_lock2.cpp , xb_test_log.cpp , xb_test_mdx.cpp , xb_test_ndx.cpp , xb_test_sql.cpp , xb_test_string.cpp , xb_test_tblmgr.cpp , xb_test_uda.cpp , xb_test_xbase.cpp , xb_ex_expression.cpp , xb_copydbf.cpp , xb_dbfutil.cpp , xb_deletall.cpp , xb_dumpdbt.cpp , xb_dumprecs.cpp , xb_execsql.cpp , xb_pack.cpp , xb_tblinfo.cpp , xb_undelall.cpp , xb_test_funcs.cpp , xb_ex_date.cpp , xb_ex_sql.cpp , xb_ex_ssv.cpp , xb_ex_string.cpp , xb_ex_v3_create_dbf.cpp , xb_ex_v3_upd_dbf.cpp , xb_ex_v4_create_dbf.cpp , xb_ex_v4_upd_dbf.cpp , xb_test_bcd.cpp , xb_test_blockread.cpp , xb_test_date.cpp , xb_test_dbf_v3_memos.cpp , xb_test_dbf_v3_nomemos.cpp , xb_test_dbf_v4_memos.cpp , xb_test_dbf_v4_nomemos.cpp , xb_test_expnode.cpp , xb_test_expression.cpp , xb_test_file.cpp , xb_test_filter.cpp , xb_test_linklist.cpp
+MyDbfRec : xb_test_blockread.cpp
+MyV4Record : xb_ex_expression.cpp
+
+
+
+ - p -
+PrintHelp() : xb_dbfutil.cpp , xb_deletall.cpp , xb_dumpdbt.cpp , xb_dumprecs.cpp , xb_pack.cpp , xb_tblinfo.cpp , xb_undelall.cpp , xb_copydbf.cpp
+PrintResult() : xb_ex_expression.cpp
+PrintVersion() : xb_copydbf.cpp , xb_dbfutil.cpp , xb_deletall.cpp , xb_dumpdbt.cpp , xb_dumprecs.cpp , xb_pack.cpp , xb_tblinfo.cpp , xb_undelall.cpp
@@ -123,6 +132,7 @@ $(function() {
XB_ACTIVE_RECS : xbdbf.h
XB_ALL_RECS : xbdbf.h
XB_ALREADY_OPEN : xbretcod.h
+XB_BLOCKREAD_NOT_ENABLED : xbretcod.h
XB_BOF : xbretcod.h
XB_CHAR_FLD : xbdbf.h
XB_CHAREOF : xbdbf.h
@@ -133,6 +143,7 @@ $(function() {
XB_DBF_FILE_NOT_OPEN : xbretcod.h
XB_DELETE_FAILED : xbretcod.h
XB_DELETED_RECS : xbdbf.h
+XB_DIRECTORY_ERROR : xbretcod.h
XB_DONTOVERLAY : xbdbf.h
XB_DUP_TABLE_OR_ALIAS : xbretcod.h
XB_EMPTY : xbretcod.h
@@ -175,6 +186,7 @@ $(function() {
XB_LOCK_FAILED : xbretcod.h
XB_LOGICAL_FLD : xbdbf.h
XB_MAX_ERROR_NO : xbretcod.h
+XB_MEMCPY_ERROR : xbretcod.h
XB_MEMO_FLD : xbdbf.h
XB_MULTI_USER : xbfile.h
XB_NO_ERROR : xbretcod.h
diff --git a/docs/doxygen/html/globals_defs.html b/docs/doxygen/html/globals_defs.html
index 9667a69..7857849 100644
--- a/docs/doxygen/html/globals_defs.html
+++ b/docs/doxygen/html/globals_defs.html
@@ -87,6 +87,7 @@ $(function() {
XB_ACTIVE_RECS : xbdbf.h
XB_ALL_RECS : xbdbf.h
XB_ALREADY_OPEN : xbretcod.h
+XB_BLOCKREAD_NOT_ENABLED : xbretcod.h
XB_BOF : xbretcod.h
XB_CHAR_FLD : xbdbf.h
XB_CHAREOF : xbdbf.h
@@ -97,6 +98,7 @@ $(function() {
XB_DBF_FILE_NOT_OPEN : xbretcod.h
XB_DELETE_FAILED : xbretcod.h
XB_DELETED_RECS : xbdbf.h
+XB_DIRECTORY_ERROR : xbretcod.h
XB_DONTOVERLAY : xbdbf.h
XB_DUP_TABLE_OR_ALIAS : xbretcod.h
XB_EMPTY : xbretcod.h
@@ -139,6 +141,7 @@ $(function() {
XB_LOCK_FAILED : xbretcod.h
XB_LOGICAL_FLD : xbdbf.h
XB_MAX_ERROR_NO : xbretcod.h
+XB_MEMCPY_ERROR : xbretcod.h
XB_MEMO_FLD : xbdbf.h
XB_MULTI_USER : xbfile.h
XB_NO_ERROR : xbretcod.h
diff --git a/docs/doxygen/html/globals_func.html b/docs/doxygen/html/globals_func.html
index c273ac7..601295d 100644
--- a/docs/doxygen/html/globals_func.html
+++ b/docs/doxygen/html/globals_func.html
@@ -89,7 +89,14 @@ $(function() {
- m -
-main() : xb_deletall.cpp , xb_test_mdx.cpp , xb_test_ndx.cpp , xb_test_sql.cpp , xb_test_string.cpp , xb_test_tblmgr.cpp , xb_test_uda.cpp , xb_test_xbase.cpp , xb_cfg_check.cpp , xb_copydbf.cpp , xb_dbfutil.cpp , xb_test_log.cpp , xb_dumpdbt.cpp , xb_dumphdr.cpp , xb_dumpix.cpp , xb_dumprecs.cpp , xb_execsql.cpp , xb_pack.cpp , xb_tblinfo.cpp , xb_undelall.cpp , xb_zap.cpp , xb_test_dbf_v4_memos.cpp , xb_ex_sql.cpp , xb_ex_string.cpp , xb_ex_v3_create_dbf.cpp , xb_ex_v3_upd_dbf.cpp , xb_ex_v4_create_dbf.cpp , xb_ex_v4_upd_dbf.cpp , xb_test_bcd.cpp , xb_test_date.cpp , xb_test_dbf_v3_memos.cpp , xb_test_dbf_v3_nomemos.cpp , xb_ex_date.cpp , xb_test_dbf_v4_nomemos.cpp , xb_test_expnode.cpp , xb_test_expression.cpp , xb_test_file.cpp , xb_test_filter.cpp , xb_test_funcs.cpp , xb_test_linklist.cpp , xb_test_lock.cpp , xb_test_lock2.cpp
+main() : xb_cfg_check.cpp , xb_test_lock.cpp , xb_test_lock2.cpp , xb_test_log.cpp , xb_test_mdx.cpp , xb_test_ndx.cpp , xb_test_sql.cpp , xb_test_string.cpp , xb_test_tblmgr.cpp , xb_test_uda.cpp , xb_test_xbase.cpp , xb_test_linklist.cpp , xb_copydbf.cpp , xb_dbfutil.cpp , xb_deletall.cpp , xb_dumpdbt.cpp , xb_dumprecs.cpp , xb_execsql.cpp , xb_pack.cpp , xb_tblinfo.cpp , xb_undelall.cpp , xb_test_date.cpp , xb_ex_expression.cpp , xb_ex_sql.cpp , xb_ex_ssv.cpp , xb_ex_string.cpp , xb_ex_v3_create_dbf.cpp , xb_ex_v3_upd_dbf.cpp , xb_ex_v4_create_dbf.cpp , xb_ex_v4_upd_dbf.cpp , xb_test_bcd.cpp , xb_test_blockread.cpp , xb_ex_date.cpp , xb_test_dbf_v3_memos.cpp , xb_test_dbf_v3_nomemos.cpp , xb_test_dbf_v4_memos.cpp , xb_test_dbf_v4_nomemos.cpp , xb_test_expnode.cpp , xb_test_expression.cpp , xb_test_file.cpp , xb_test_filter.cpp , xb_test_funcs.cpp
+
+
+
+ - p -
+PrintHelp() : xb_dbfutil.cpp , xb_deletall.cpp , xb_dumpdbt.cpp , xb_dumprecs.cpp , xb_pack.cpp , xb_tblinfo.cpp , xb_undelall.cpp , xb_copydbf.cpp
+PrintResult() : xb_ex_expression.cpp
+PrintVersion() : xb_copydbf.cpp , xb_dbfutil.cpp , xb_deletall.cpp , xb_dumpdbt.cpp , xb_dumprecs.cpp , xb_pack.cpp , xb_tblinfo.cpp , xb_undelall.cpp
diff --git a/docs/doxygen/html/globals_vars.html b/docs/doxygen/html/globals_vars.html
index 568ea5b..ae4118a 100644
--- a/docs/doxygen/html/globals_vars.html
+++ b/docs/doxygen/html/globals_vars.html
@@ -64,6 +64,8 @@ $(function() {
diff --git a/docs/doxygen/html/menudata.js b/docs/doxygen/html/menudata.js
index 7930315..2959441 100644
--- a/docs/doxygen/html/menudata.js
+++ b/docs/doxygen/html/menudata.js
@@ -109,6 +109,7 @@ var menudata={children:[
{text:"j",url:"globals.html#index_j"},
{text:"l",url:"globals.html#index_l"},
{text:"m",url:"globals.html#index_m"},
+{text:"p",url:"globals.html#index_p"},
{text:"t",url:"globals.html#index_t"},
{text:"v",url:"globals.html#index_v"},
{text:"x",url:"globals.html#index_x"}]},
@@ -118,6 +119,7 @@ var menudata={children:[
{text:"g",url:"globals_func.html#index_g"},
{text:"i",url:"globals_func.html#index_i"},
{text:"m",url:"globals_func.html#index_m"},
+{text:"p",url:"globals_func.html#index_p"},
{text:"t",url:"globals_func.html#index_t"}]},
{text:"Variables",url:"globals_vars.html"},
{text:"Macros",url:"globals_defs.html",children:[
diff --git a/docs/doxygen/html/search/all_0.js b/docs/doxygen/html/search/all_0.js
index 25f7a4e..1e4e72c 100644
--- a/docs/doxygen/html/search/all_0.js
+++ b/docs/doxygen/html/search/all_0.js
@@ -2,7 +2,7 @@ var searchData=
[
['abort_0',['Abort',['../classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f',1,'xb::xbDbf']]],
['addbackslash_1',['AddBackSlash',['../classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62',1,'xb::xbString']]],
- ['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#a721f69ccc7893842422a043468ffccea',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &sTblName)'],['../classxb_1_1xbTblMgr.html#a62f6841849dbe5c1768f7e90f1b7e766',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &sTblName, const xbString &sTblAlias)']]],
+ ['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &sFqTblName)'],['../classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &sFqTblName, const xbString &sTblAlias)']]],
['append_3',['Append',['../classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815',1,'xb::xbString::Append(const xbString &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 &s, xbUInt32 pos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c',1,'xb::xbString::Assign(const xbString &s, xbUInt32 lCopyLen)']]]
diff --git a/docs/doxygen/html/search/all_10.js b/docs/doxygen/html/search/all_10.js
index aefc8ee..8645b5c 100644
--- a/docs/doxygen/html/search/all_10.js
+++ b/docs/doxygen/html/search/all_10.js
@@ -8,12 +8,12 @@ var searchData=
['setdatadirectory_5',['SetDataDirectory',['../classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c',1,'xb::xbSsv']]],
['setdefaultautocommit_6',['SetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd',1,'xb::xbSsv']]],
['setdefaultdateformat_7',['SetDefaultDateFormat',['../classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c',1,'xb::xbSsv']]],
- ['setdefaultlogdirectory_8',['SetDefaultLogDirectory',['../classxb_1_1xbSsv.html#a84343b8645790791512d6bc22ee6c8eb',1,'xb::xbSsv']]],
- ['setdirectory_9',['SetDirectory',['../classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3',1,'xb::xbFile']]],
- ['setendiantype_10',['SetEndianType',['../classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108',1,'xb::xbSsv']]],
- ['setfilename_11',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
- ['setfqfilename_12',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
- ['setlogdirectory_13',['SetLogDirectory',['../classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292',1,'xb::xbXBase']]],
+ ['setdirectory_8',['SetDirectory',['../classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3',1,'xb::xbFile']]],
+ ['setendiantype_9',['SetEndianType',['../classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108',1,'xb::xbSsv']]],
+ ['setfilename_10',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
+ ['setfqfilename_11',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
+ ['sethomefolders_12',['SetHomeFolders',['../classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a',1,'xb::xbFile']]],
+ ['setlogdirectory_13',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv::SetLogDirectory()'],['../classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292',1,'xb::xbXBase::SetLogDirectory(const xbString &sLogFileDirectory)']]],
['setlogfilename_14',['SetLogFileName',['../classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c',1,'xb::xbXBase']]],
['setlogsize_15',['SetLogSize',['../classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42',1,'xb::xbXBase']]],
['setmultiuser_16',['SetMultiUser',['../classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c',1,'xb::xbSsv']]],
diff --git a/docs/doxygen/html/search/all_15.js b/docs/doxygen/html/search/all_15.js
index 08832b8..d8f30c5 100644
--- a/docs/doxygen/html/search/all_15.js
+++ b/docs/doxygen/html/search/all_15.js
@@ -4,220 +4,228 @@ var searchData=
['xb_5factive_5frecs_1',['XB_ACTIVE_RECS',['../xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592',1,'xbdbf.h']]],
['xb_5fall_5frecs_2',['XB_ALL_RECS',['../xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4',1,'xbdbf.h']]],
['xb_5falready_5fopen_3',['XB_ALREADY_OPEN',['../xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f',1,'xbretcod.h']]],
- ['xb_5fbof_4',['XB_BOF',['../xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f',1,'xbretcod.h']]],
- ['xb_5fcfg_5fcheck_2ecpp_5',['xb_cfg_check.cpp',['../xb__cfg__check_8cpp.html',1,'']]],
- ['xb_5fchar_5ffld_6',['XB_CHAR_FLD',['../xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa',1,'xbdbf.h']]],
- ['xb_5fchareof_7',['XB_CHAREOF',['../xbdbf_8h.html#ada1115f596131888c04df61546b198c4',1,'xbdbf.h']]],
- ['xb_5fcharhdr_8',['XB_CHARHDR',['../xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17',1,'xbdbf.h']]],
- ['xb_5fclose_5ferror_9',['XB_CLOSE_ERROR',['../xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235',1,'xbretcod.h']]],
- ['xb_5fclosed_10',['XB_CLOSED',['../xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f',1,'xbdbf.h']]],
- ['xb_5fcopydbf_2ecpp_11',['xb_copydbf.cpp',['../xb__copydbf_8cpp.html',1,'']]],
- ['xb_5fdate_5ffld_12',['XB_DATE_FLD',['../xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc',1,'xbdbf.h']]],
- ['xb_5fdbf_5ffile_5fnot_5fopen_13',['XB_DBF_FILE_NOT_OPEN',['../xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2',1,'xbretcod.h']]],
- ['xb_5fdbfutil_2ecpp_14',['xb_dbfutil.cpp',['../xb__dbfutil_8cpp.html',1,'']]],
- ['xb_5fdeletall_2ecpp_15',['xb_deletall.cpp',['../xb__deletall_8cpp.html',1,'']]],
- ['xb_5fdelete_5ffailed_16',['XB_DELETE_FAILED',['../xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2',1,'xbretcod.h']]],
- ['xb_5fdeleted_5frecs_17',['XB_DELETED_RECS',['../xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43',1,'xbdbf.h']]],
- ['xb_5fdontoverlay_18',['XB_DONTOVERLAY',['../xbdbf_8h.html#a7b797840abdb3291373d15978103a778',1,'xbdbf.h']]],
- ['xb_5fdumpdbt_2ecpp_19',['xb_dumpdbt.cpp',['../xb__dumpdbt_8cpp.html',1,'']]],
- ['xb_5fdumphdr_2ecpp_20',['xb_dumphdr.cpp',['../xb__dumphdr_8cpp.html',1,'']]],
- ['xb_5fdumpix_2ecpp_21',['xb_dumpix.cpp',['../xb__dumpix_8cpp.html',1,'']]],
+ ['xb_5fblockread_5fnot_5fenabled_4',['XB_BLOCKREAD_NOT_ENABLED',['../xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a',1,'xbretcod.h']]],
+ ['xb_5fbof_5',['XB_BOF',['../xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f',1,'xbretcod.h']]],
+ ['xb_5fcfg_5fcheck_2ecpp_6',['xb_cfg_check.cpp',['../xb__cfg__check_8cpp.html',1,'']]],
+ ['xb_5fchar_5ffld_7',['XB_CHAR_FLD',['../xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa',1,'xbdbf.h']]],
+ ['xb_5fchareof_8',['XB_CHAREOF',['../xbdbf_8h.html#ada1115f596131888c04df61546b198c4',1,'xbdbf.h']]],
+ ['xb_5fcharhdr_9',['XB_CHARHDR',['../xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17',1,'xbdbf.h']]],
+ ['xb_5fclose_5ferror_10',['XB_CLOSE_ERROR',['../xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235',1,'xbretcod.h']]],
+ ['xb_5fclosed_11',['XB_CLOSED',['../xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f',1,'xbdbf.h']]],
+ ['xb_5fcopydbf_2ecpp_12',['xb_copydbf.cpp',['../xb__copydbf_8cpp.html',1,'']]],
+ ['xb_5fdate_5ffld_13',['XB_DATE_FLD',['../xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc',1,'xbdbf.h']]],
+ ['xb_5fdbf_5ffile_5fnot_5fopen_14',['XB_DBF_FILE_NOT_OPEN',['../xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2',1,'xbretcod.h']]],
+ ['xb_5fdbfutil_2ecpp_15',['xb_dbfutil.cpp',['../xb__dbfutil_8cpp.html',1,'']]],
+ ['xb_5fdeletall_2ecpp_16',['xb_deletall.cpp',['../xb__deletall_8cpp.html',1,'']]],
+ ['xb_5fdelete_5ffailed_17',['XB_DELETE_FAILED',['../xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2',1,'xbretcod.h']]],
+ ['xb_5fdeleted_5frecs_18',['XB_DELETED_RECS',['../xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43',1,'xbdbf.h']]],
+ ['xb_5fdirectory_5ferror_19',['XB_DIRECTORY_ERROR',['../xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e',1,'xbretcod.h']]],
+ ['xb_5fdontoverlay_20',['XB_DONTOVERLAY',['../xbdbf_8h.html#a7b797840abdb3291373d15978103a778',1,'xbdbf.h']]],
+ ['xb_5fdumpdbt_2ecpp_21',['xb_dumpdbt.cpp',['../xb__dumpdbt_8cpp.html',1,'']]],
['xb_5fdumprecs_2ecpp_22',['xb_dumprecs.cpp',['../xb__dumprecs_8cpp.html',1,'']]],
['xb_5fdup_5ftable_5for_5falias_23',['XB_DUP_TABLE_OR_ALIAS',['../xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95',1,'xbretcod.h']]],
['xb_5fempty_24',['XB_EMPTY',['../xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29',1,'xbretcod.h']]],
['xb_5feof_25',['XB_EOF',['../xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7',1,'xbretcod.h']]],
['xb_5fex_5fdate_2ecpp_26',['xb_ex_date.cpp',['../xb__ex__date_8cpp.html',1,'']]],
- ['xb_5fex_5fsql_2ecpp_27',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
- ['xb_5fex_5fstring_2ecpp_28',['xb_ex_string.cpp',['../xb__ex__string_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fcreate_5fdbf_2ecpp_29',['xb_ex_v3_create_dbf.cpp',['../xb__ex__v3__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv3_5fupd_5fdbf_2ecpp_30',['xb_ex_v3_upd_dbf.cpp',['../xb__ex__v3__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fcreate_5fdbf_2ecpp_31',['xb_ex_v4_create_dbf.cpp',['../xb__ex__v4__create__dbf_8cpp.html',1,'']]],
- ['xb_5fex_5fv4_5fupd_5fdbf_2ecpp_32',['xb_ex_v4_upd_dbf.cpp',['../xb__ex__v4__upd__dbf_8cpp.html',1,'']]],
- ['xb_5fexecsql_2ecpp_33',['xb_execsql.cpp',['../xb__execsql_8cpp.html',1,'']]],
- ['xb_5ffile_5fexists_34',['XB_FILE_EXISTS',['../xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0',1,'xbretcod.h']]],
- ['xb_5ffile_5fnot_5ffound_35',['XB_FILE_NOT_FOUND',['../xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc',1,'xbretcod.h']]],
- ['xb_5ffile_5ftype_5fnot_5fsupported_36',['XB_FILE_TYPE_NOT_SUPPORTED',['../xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596',1,'xbretcod.h']]],
- ['xb_5ffloat_5ffld_37',['XB_FLOAT_FLD',['../xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd',1,'xbdbf.h']]],
- ['xb_5ffmt_5fmonth_38',['XB_FMT_MONTH',['../xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d',1,'xbdate.h']]],
- ['xb_5ffmt_5fweek_39',['XB_FMT_WEEK',['../xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178',1,'xbdate.h']]],
- ['xb_5ffmt_5fyear_40',['XB_FMT_YEAR',['../xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4',1,'xbdate.h']]],
- ['xb_5fincompatible_5foperands_41',['XB_INCOMPATIBLE_OPERANDS',['../xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74',1,'xbretcod.h']]],
- ['xb_5finconsistent_5fparm_5flens_42',['XB_INCONSISTENT_PARM_LENS',['../xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fno_43',['XB_INVALID_BLOCK_NO',['../xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fsize_44',['XB_INVALID_BLOCK_SIZE',['../xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdata_45',['XB_INVALID_DATA',['../xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdate_46',['XB_INVALID_DATE',['../xbretcod_8h.html#a702475500357a27b8a34463be3e11925',1,'xbretcod.h']]],
- ['xb_5finvalid_5fexpression_47',['XB_INVALID_EXPRESSION',['../xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_48',['XB_INVALID_FIELD',['../xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5flen_49',['XB_INVALID_FIELD_LEN',['../xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fname_50',['XB_INVALID_FIELD_NAME',['../xbretcod_8h.html#a59403978784130834cf39434cb73f96e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fno_51',['XB_INVALID_FIELD_NO',['../xbretcod_8h.html#a09d6c08a44316f551108a74003efd381',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5ftype_52',['XB_INVALID_FIELD_TYPE',['../xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffunction_53',['XB_INVALID_FUNCTION',['../xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742',1,'xbretcod.h']]],
- ['xb_5finvalid_5findex_54',['XB_INVALID_INDEX',['../xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4',1,'xbretcod.h']]],
- ['xb_5finvalid_5fkeyno_55',['XB_INVALID_KEYNO',['../xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8',1,'xbretcod.h']]],
- ['xb_5finvalid_5flock_5foption_56',['XB_INVALID_LOCK_OPTION',['../xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec',1,'xbretcod.h']]],
- ['xb_5finvalid_5fmemo_5ffield_57',['XB_INVALID_MEMO_FIELD',['../xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f',1,'xbretcod.h']]],
- ['xb_5finvalid_5fnodelink_58',['XB_INVALID_NODELINK',['../xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb',1,'xbretcod.h']]],
- ['xb_5finvalid_5fobject_59',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
- ['xb_5finvalid_5foption_60',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fpage_61',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
- ['xb_5finvalid_5fparm_62',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
- ['xb_5finvalid_5frecord_63',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftable_5fname_64',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftag_65',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
- ['xb_5fkey_5fnot_5funique_66',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
- ['xb_5flimit_5freached_67',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
- ['xb_5flock_68',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
- ['xb_5flock_5ffailed_69',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
- ['xb_5flogical_5ffld_70',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
- ['xb_5fmax_5ferror_5fno_71',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
- ['xb_5fmemo_5ffld_72',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
- ['xb_5fmulti_5fuser_73',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
- ['xb_5fno_5ferror_74',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
- ['xb_5fno_5fmemory_75',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
- ['xb_5fnot_5ffound_76',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
- ['xb_5fnot_5fopen_77',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
- ['xb_5fnumeric_5ffld_78',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
- ['xb_5fopen_79',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
- ['xb_5fopen_5ferror_80',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
- ['xb_5foverlay_81',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
- ['xb_5fpack_2ecpp_82',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
- ['xb_5fparse_5ferror_83',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
- ['xb_5fread_84',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
- ['xb_5fread_5ferror_85',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
- ['xb_5fread_5fwrite_86',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
- ['xb_5frename_5ferror_87',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
- ['xb_5fseek_5ferror_88',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
- ['xb_5fsingle_5fuser_89',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
- ['xb_5fsyntax_5ferror_90',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
- ['xb_5ftable_5fnot_5flocked_91',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
- ['xb_5ftblinfo_2ecpp_92',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
- ['xb_5ftest_5fbcd_2ecpp_93',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
- ['xb_5ftest_5fdate_2ecpp_94',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_95',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_96',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_97',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_98',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpnode_2ecpp_99',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpression_2ecpp_100',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
- ['xb_5ftest_5ffile_2ecpp_101',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
- ['xb_5ftest_5ffilter_2ecpp_102',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
- ['xb_5ftest_5ffuncs_2ecpp_103',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
- ['xb_5ftest_5flinklist_2ecpp_104',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
- ['xb_5ftest_5flock_2ecpp_105',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
- ['xb_5ftest_5flock2_2ecpp_106',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
- ['xb_5ftest_5flog_2ecpp_107',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
- ['xb_5ftest_5fmdx_2ecpp_108',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
- ['xb_5ftest_5fndx_2ecpp_109',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
- ['xb_5ftest_5fsql_2ecpp_110',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
- ['xb_5ftest_5fstring_2ecpp_111',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
- ['xb_5ftest_5ftblmgr_2ecpp_112',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
- ['xb_5ftest_5fuda_2ecpp_113',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
- ['xb_5ftest_5fxbase_2ecpp_114',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
- ['xb_5funbalanced_5fparens_115',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fquotes_116',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
- ['xb_5fundelall_2ecpp_117',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
- ['xb_5funlock_118',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
- ['xb_5fupdated_119',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
- ['xb_5fwrite_120',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
- ['xb_5fwrite_5ferror_121',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
- ['xb_5fzap_2ecpp_122',['xb_zap.cpp',['../xb__zap_8cpp.html',1,'']]],
- ['xbalttbl_2ecpp_123',['xbalttbl.cpp',['../xbalttbl_8cpp.html',1,'']]],
- ['xbase_124',['xbase',['../classxb_1_1xbFile.html#ae39a67ea391b46055d4ca299cb222004',1,'xb::xbFile']]],
- ['xbase_2eh_125',['xbase.h',['../xbase_8h.html',1,'']]],
- ['xbbcd_126',['xbBcd',['../classxb_1_1xbXBase.html#a86a53ce3efbf910996df0f853f1c0add',1,'xb::xbXBase']]],
- ['xbbcd_2ecpp_127',['xbbcd.cpp',['../xbbcd_8cpp.html',1,'']]],
- ['xbbcd_2eh_128',['xbbcd.h',['../xbbcd_8h.html',1,'']]],
- ['xbbool_129',['xbBool',['../namespacexb.html#ab1a750481dd487f0d384aa1d200dff0f',1,'xb']]],
- ['xbcrix_2ecpp_130',['xbcrix.cpp',['../xbcrix_8cpp.html',1,'']]],
- ['xbcrtbl_2ecpp_131',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
- ['xbdate_132',['xbDate',['../classxb_1_1xbDate.html',1,'xb::xbDate'],['../classxb_1_1xbDate.html#a7ab727a7ec184a086ad36ef83b948170',1,'xb::xbDate::xbDate(xbInt32 lJulDate)'],['../classxb_1_1xbDate.html#acf4546f5681735ede18210f60bab68d4',1,'xb::xbDate::xbDate(const xbString &Date8)'],['../classxb_1_1xbDate.html#ac8a4d9330221a3daee21b3c28c1d9719',1,'xb::xbDate::xbDate(const char *Date8)'],['../classxb_1_1xbDate.html#ab3150e7db0ab5db10a07d748b55465eb',1,'xb::xbDate::xbDate()']]],
- ['xbdate_2ecpp_133',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
- ['xbdate_2eh_134',['xbdate.h',['../xbdate_8h.html',1,'']]],
- ['xbdbf_135',['xbDbf',['../classxb_1_1xbDbf.html',1,'xb::xbDbf'],['../classxb_1_1xbDbf.html#a84a75f80bc0e9b8a22b728767949c204',1,'xb::xbDbf::xbDbf()'],['../namespacexb.html#ab2eae4b4732466698a7fdd89d77ba53b',1,'xb::xbDbf()']]],
- ['xbdbf_2ecpp_136',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
- ['xbdbf_2eh_137',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
- ['xbdbf3_2ecpp_138',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
- ['xbdbf4_2ecpp_139',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
- ['xbdelete_2ecpp_140',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
- ['xbdouble_141',['xbDouble',['../namespacexb.html#a25f47b226ce924a5c78f97989b0744a2',1,'xb']]],
- ['xbdrpix_2ecpp_142',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
- ['xbdrptbl_2ecpp_143',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
- ['xberrormessages_144',['xbErrorMessages',['../namespacexb.html#a04be228a037d220dd5564f5ef618adcc',1,'xb']]],
- ['xbexp_145',['xbExp',['../classxb_1_1xbXBase.html#a3c3e5617be811d732472fe2cc8fb18cc',1,'xb::xbXBase']]],
- ['xbexp_2ecpp_146',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
- ['xbexp_2eh_147',['xbexp.h',['../xbexp_8h.html',1,'']]],
- ['xbexpnode_2ecpp_148',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
- ['xbexpnode_2eh_149',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
- ['xbfalse_150',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
- ['xbfclose_151',['xbFclose',['../classxb_1_1xbFile.html#a18830b5755d74818f60d9c7ce38ddf2d',1,'xb::xbFile']]],
- ['xbfeof_152',['xbFeof',['../classxb_1_1xbFile.html#af5b6356832d2a67212070a1aa605f170',1,'xb::xbFile']]],
- ['xbfflush_153',['xbFflush',['../classxb_1_1xbFile.html#ad205184d43409f04216540ae22f15009',1,'xb::xbFile']]],
- ['xbfgetc_154',['xbFgetc',['../classxb_1_1xbFile.html#afb1c584d2895ffb7834df80aea7eb1e4',1,'xb::xbFile::xbFgetc(xbInt32 &c)'],['../classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6',1,'xb::xbFile::xbFgetc(char &c)']]],
- ['xbfgets_155',['xbFgets',['../classxb_1_1xbFile.html#ad245955ace26e5dde85fd4373b30d026',1,'xb::xbFile']]],
- ['xbfields_2ecpp_156',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
- ['xbfile_157',['xbFile',['../classxb_1_1xbFile.html',1,'xb::xbFile'],['../classxb_1_1xbFile.html#a869eedd74c6eddc308852eb546c87176',1,'xb::xbFile::xbFile()']]],
- ['xbfile_2ecpp_158',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
- ['xbfile_2eh_159',['xbfile.h',['../xbfile_8h.html',1,'']]],
- ['xbfileno_160',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
- ['xbfilter_2ecpp_161',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
- ['xbfilter_2eh_162',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
- ['xbfloat_163',['xbFloat',['../namespacexb.html#a83aa6a550398db55973aa9fb4257e66e',1,'xb']]],
- ['xbfopen_164',['xbFopen',['../classxb_1_1xbFile.html#a7cdfef5ede9ac98d44a28a6b7a70972c',1,'xb::xbFile::xbFopen(xbInt16 iOpenMode)'],['../classxb_1_1xbFile.html#a0548cedf0f26b7d8ac221f75b0cd048c',1,'xb::xbFile::xbFopen(const xbString &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 &sMode, const xbString &sFileName, xbInt16 iShareMode)']]],
- ['xbfputc_165',['xbFputc',['../classxb_1_1xbFile.html#a863f74cf17df8186d88586b4d2a6441a',1,'xb::xbFile::xbFputc(xbInt32 c, xbInt32 iNoTimes)'],['../classxb_1_1xbFile.html#af2e940c78956e5cb6824f9a1bc404896',1,'xb::xbFile::xbFputc(xbInt32 c)']]],
- ['xbfputs_166',['xbFputs',['../classxb_1_1xbFile.html#a698f3b40216778562e639e6ca1a47573',1,'xb::xbFile']]],
- ['xbfread_167',['xbFread',['../classxb_1_1xbFile.html#ab4f6afaa1f77539f27a4f05c26e54e2f',1,'xb::xbFile']]],
- ['xbfseek_168',['xbFseek',['../classxb_1_1xbFile.html#a5337ab8918df240910c0d19b4f298e3d',1,'xb::xbFile']]],
- ['xbftell_169',['xbFtell',['../classxb_1_1xbFile.html#a0e1c06aedfa7fbcb92e117f891edd13b',1,'xb::xbFile']]],
- ['xbfturnofffilebuffering_170',['xbFTurnOffFileBuffering',['../classxb_1_1xbFile.html#a9891b792f585a696f38a5cf959e30918',1,'xb::xbFile']]],
- ['xbfuncs_2ecpp_171',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
- ['xbfwrite_172',['xbFwrite',['../classxb_1_1xbFile.html#a6aadd871d1782944703fed773d44b85f',1,'xb::xbFile']]],
- ['xbindex_2eh_173',['xbindex.h',['../xbindex_8h.html',1,'']]],
- ['xbinsert_2ecpp_174',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
- ['xbixbase_2ecpp_175',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
- ['xbixmdx_2ecpp_176',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
- ['xbixndx_2ecpp_177',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
- ['xblnklst_2eh_178',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
- ['xblnklstord_2eh_179',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
- ['xblnknod_2eh_180',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
- ['xblog_181',['xbLog',['../namespacexb.html#a4a31fbe9110c9e55495ce71e642d785c',1,'xb']]],
- ['xblog_2ecpp_182',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
- ['xblog_2eh_183',['xblog.h',['../xblog_8h.html',1,'']]],
- ['xbmemcmp_184',['xbMemcmp',['../classxb_1_1xbXBase.html#a1b239c021358476382942522911b5c66',1,'xb::xbXBase']]],
- ['xbmemo_2ecpp_185',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
- ['xbmemo_2eh_186',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
- ['xbmemo3_2ecpp_187',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
- ['xbmemo4_2ecpp_188',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
- ['xbofft_189',['xbOffT',['../namespacexb.html#ac963d9fde6debb416303cfbed35fb793',1,'xb']]],
- ['xbreaduntil_190',['xbReadUntil',['../classxb_1_1xbFile.html#a08463f506f425c2385acbe1a561506e9',1,'xb::xbFile']]],
- ['xbremove_191',['xbRemove',['../classxb_1_1xbFile.html#a6d919366c2ec95e529906bf8842cbf07',1,'xb::xbFile::xbRemove(const xbString &sFileName, xbInt16 iOption)'],['../classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5',1,'xb::xbFile::xbRemove(const xbString &sFileName)'],['../classxb_1_1xbFile.html#ab3c668a8570433188382d31d7c60bd48',1,'xb::xbFile::xbRemove()']]],
- ['xbrename_192',['xbRename',['../classxb_1_1xbFile.html#afc8ce113aa72611a278233f9bb170012',1,'xb::xbFile']]],
- ['xbretcod_2eh_193',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
- ['xbrewind_194',['xbRewind',['../classxb_1_1xbFile.html#a7996b6e084665c37c3892faea64b3505',1,'xb::xbFile']]],
- ['xbschema_195',['xbSchema',['../structxb_1_1xbSchema.html',1,'xb']]],
- ['xbset_2ecpp_196',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
- ['xbsleep_197',['xbSleep',['../classxb_1_1xbXBase.html#a0915aff7be4b2dd3e881f3c5d0da4baf',1,'xb::xbXBase']]],
- ['xbsql_2ecpp_198',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
- ['xbsql_2eh_199',['xbsql.h',['../xbsql_8h.html',1,'']]],
- ['xbssv_200',['xbSsv',['../classxb_1_1xbSsv.html',1,'xb::xbSsv'],['../classxb_1_1xbSsv.html#a58f85692c3167af20b1a7c17c621523b',1,'xb::xbSsv::xbSsv()']]],
- ['xbssv_2ecpp_201',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
- ['xbssv_2eh_202',['xbssv.h',['../xbssv_8h.html',1,'']]],
- ['xbstring_203',['xbString',['../classxb_1_1xbString.html',1,'xb::xbString'],['../classxb_1_1xbString.html#ad865b55e3b08dffd527afee8e7e8e3fe',1,'xb::xbString::xbString(xbDouble d)'],['../classxb_1_1xbString.html#a25856311106c5fb15d39017b63f0ddc7',1,'xb::xbString::xbString(const char *="")'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &s)'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)'],['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)']]],
- ['xbstring_2ecpp_204',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
- ['xbstring_2eh_205',['xbstring.h',['../xbstring_8h.html',1,'']]],
- ['xbtag_2ecpp_206',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
- ['xbtag_2eh_207',['xbtag.h',['../xbtag_8h.html',1,'']]],
- ['xbtbllist_208',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
- ['xbtblmgr_209',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb::xbTblMgr'],['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr::xbTblMgr()']]],
- ['xbtblmgr_2ecpp_210',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
- ['xbtblmgr_2eh_211',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
- ['xbtrue_212',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]],
- ['xbtruncate_213',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
- ['xbtypes_2eh_214',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
- ['xbuda_2ecpp_215',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
- ['xbuda_2eh_216',['xbuda.h',['../xbuda_8h.html',1,'']]],
- ['xbxbase_217',['xbXBase',['../classxb_1_1xbXBase.html',1,'xb::xbXBase'],['../classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224',1,'xb::xbXBase::xbXBase()'],['../namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0',1,'xb::xbXBase()']]],
- ['xbxbase_2ecpp_218',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
- ['xbxbase_2eh_219',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
+ ['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 &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 &c)'],['../classxb_1_1xbFile.html#a5ee229bda4d7d6695e122200e581e7a6',1,'xb::xbFile::xbFgetc(char &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 &sMode, const xbString &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 &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 &sFileName, xbInt16 iOption)'],['../classxb_1_1xbFile.html#a58f6a6751fdf7e9549c273bb75d93eb5',1,'xb::xbFile::xbRemove(const xbString &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 *="")'],['../classxb_1_1xbString.html#a0d81016b93fc36ebbbafacf35c677f07',1,'xb::xbString::xbString(const xbString &s)'],['../classxb_1_1xbString.html#a63f9313217e0ff3c9789ec59316216a1',1,'xb::xbString::xbString(xbUInt32 size)'],['../classxb_1_1xbString.html#a14bbaa293c8d40dd6c64332f2668a92e',1,'xb::xbString::xbString(char c)'],['../classxb_1_1xbString.html#a18f3598dcdf2ec5692274fc8ee769ad7',1,'xb::xbString::xbString(const char *s, xbUInt32 lMaxLen)']]],
+ ['xbstring_2ecpp_212',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
+ ['xbstring_2eh_213',['xbstring.h',['../xbstring_8h.html',1,'']]],
+ ['xbtag_2ecpp_214',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
+ ['xbtag_2eh_215',['xbtag.h',['../xbtag_8h.html',1,'']]],
+ ['xbtbllist_216',['xbTblList',['../structxb_1_1xbTblList.html',1,'xb']]],
+ ['xbtblmgr_217',['xbTblMgr',['../classxb_1_1xbTblMgr.html',1,'xb::xbTblMgr'],['../classxb_1_1xbTblMgr.html#aad83f5ecc184ca6cbdfc6f356b598d6c',1,'xb::xbTblMgr::xbTblMgr()']]],
+ ['xbtblmgr_2ecpp_218',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
+ ['xbtblmgr_2eh_219',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
+ ['xbtrue_220',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]],
+ ['xbtruncate_221',['xbTruncate',['../classxb_1_1xbFile.html#a518bfcbfa3699d883cf89affee383296',1,'xb::xbFile']]],
+ ['xbtypes_2eh_222',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
+ ['xbuda_2ecpp_223',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
+ ['xbuda_2eh_224',['xbuda.h',['../xbuda_8h.html',1,'']]],
+ ['xbxbase_225',['xbXBase',['../classxb_1_1xbXBase.html',1,'xb::xbXBase'],['../classxb_1_1xbXBase.html#a6c68588e33946fb5416af3f86fe83224',1,'xb::xbXBase::xbXBase()'],['../namespacexb.html#a97858ddeb1c4b0100f3edc1a46d3a8b0',1,'xb::xbXBase()']]],
+ ['xbxbase_2ecpp_226',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
+ ['xbxbase_2eh_227',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
];
diff --git a/docs/doxygen/html/search/all_6.js b/docs/doxygen/html/search/all_6.js
index 580f3f8..1cedf85 100644
--- a/docs/doxygen/html/search/all_6.js
+++ b/docs/doxygen/html/search/all_6.js
@@ -2,65 +2,68 @@ var searchData=
[
['getautocommit_0',['GetAutoCommit',['../classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68',1,'xb::xbDbf::GetAutoCommit(xbInt16 iOption) const'],['../classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55',1,'xb::xbDbf::GetAutoCommit() const']]],
['getblocksize_1',['GetBlockSize',['../classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2',1,'xb::xbFile']]],
- ['getcharacter_2',['GetCharacter',['../classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d',1,'xb::xbString']]],
- ['getcurrecno_3',['GetCurRecNo',['../classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503',1,'xb::xbDbf']]],
- ['getdatadirectory_4',['GetDataDirectory',['../classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9',1,'xb::xbSsv']]],
- ['getdatefield_5',['GetDateField',['../classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555',1,'xb::xbDbf::GetDateField(xbInt16 iFieldNo, xbDate &dt) const'],['../classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36',1,'xb::xbDbf::GetDateField(const xbString &sFieldName, xbDate &dt) const']]],
- ['getdbfptr_6',['GetDbfPtr',['../classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5',1,'xb::xbTblMgr::GetDbfPtr(const xbString &sTblAlias) const'],['../classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6',1,'xb::xbTblMgr::GetDbfPtr(xbInt16 sItemNo) const']]],
- ['getdbfstatus_7',['GetDbfStatus',['../classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6',1,'xb::xbDbf']]],
- ['getdefaultautocommit_8',['GetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5',1,'xb::xbSsv']]],
- ['getdefaultdateformat_9',['GetDefaultDateFormat',['../classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2',1,'xb::xbSsv']]],
- ['getdefaultlogdirectory_10',['GetDefaultLogDirectory',['../classxb_1_1xbSsv.html#abf3763faf6a8917a963213cd53af529c',1,'xb::xbSsv']]],
- ['getdefaultlogfilename_11',['GetDefaultLogFileName',['../classxb_1_1xbSsv.html#a43878d4dc041f2a5e2398a118ccfaf79',1,'xb::xbSsv']]],
+ ['getbof_2',['GetBof',['../classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779',1,'xb::xbDbf']]],
+ ['getcharacter_3',['GetCharacter',['../classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d',1,'xb::xbString']]],
+ ['getcmdlineopt_4',['GetCmdLineOpt',['../classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &sParmOut)'],['../classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, xbString &sOptRqst, xbString &sParmOut)']]],
+ ['getcurrecno_5',['GetCurRecNo',['../classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503',1,'xb::xbDbf']]],
+ ['getdatadirectory_6',['GetDataDirectory',['../classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9',1,'xb::xbSsv']]],
+ ['getdatefield_7',['GetDateField',['../classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555',1,'xb::xbDbf::GetDateField(xbInt16 iFieldNo, xbDate &dt) const'],['../classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36',1,'xb::xbDbf::GetDateField(const xbString &sFieldName, xbDate &dt) const']]],
+ ['getdbfptr_8',['GetDbfPtr',['../classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5',1,'xb::xbTblMgr::GetDbfPtr(const xbString &sTblAlias) const'],['../classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6',1,'xb::xbTblMgr::GetDbfPtr(xbInt16 sItemNo) const']]],
+ ['getdbfstatus_9',['GetDbfStatus',['../classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6',1,'xb::xbDbf']]],
+ ['getdefaultautocommit_10',['GetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5',1,'xb::xbSsv']]],
+ ['getdefaultdateformat_11',['GetDefaultDateFormat',['../classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2',1,'xb::xbSsv']]],
['getdirectory_12',['GetDirectory',['../classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e',1,'xb::xbFile']]],
['getdoublefield_13',['GetDoubleField',['../classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &dFieldValue) const'],['../classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &dFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95',1,'xb::xbDbf::GetDoubleField(const xbString &sFieldName, xbDouble &dFieldValue) const']]],
['getendiantype_14',['GetEndianType',['../classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243',1,'xb::xbSsv']]],
- ['geterrormessage_15',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
- ['getfield_16',['GetField',['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &sFieldValue) const'],['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &sFieldName, xbString &sFieldValue) const']]],
- ['getfieldcnt_17',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
- ['getfielddecimal_18',['GetFieldDecimal',['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &sFieldName, xbInt16 &iFieldDecimal) const'],['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &iFieldDecimal) const']]],
- ['getfieldlen_19',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &sFieldName, xbInt16 &iFieldLen) const']]],
- ['getfieldname_20',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
- ['getfieldno_21',['GetFieldNo',['../classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b',1,'xb::xbDbf::GetFieldNo(const xbString &sFieldName, xbInt16 &iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &sFieldName) const']]],
- ['getfieldtype_22',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &sFieldName, char &cFieldType) const']]],
- ['getfiledirpart_23',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &sCompleteFileNameIn, xbString &sFileDirPartOut) const']]],
- ['getfileextpart_24',['GetFileExtPart',['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &sFileExtPartOut) const'],['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &sCompleteFileNameIn, xbString &sFileExtPartOut) const']]],
- ['getfilemtime_25',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
- ['getfilename_26',['GetFileName',['../classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a',1,'xb::xbFile']]],
- ['getfilenamepart_27',['GetFileNamePart',['../classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a',1,'xb::xbFile::GetFileNamePart(xbString &sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &sCompleteFileNameIn, xbString &sFileNamePartOut) const']]],
- ['getfilesize_28',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
- ['getfiletype_29',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
- ['getfirstrecord_30',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
- ['getfloatfield_31',['GetFloatField',['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &fFieldValue) const'],['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &sFieldName, xbFloat &fFieldValue) const']]],
- ['getfqfilename_32',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
- ['getfunctioninfo_33',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
- ['getlastpos_34',['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_35',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
- ['getlogdirectory_36',['GetLogDirectory',['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase']]],
- ['getlogfilename_37',['GetLogFileName',['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase']]],
- ['getlogfqfilename_38',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
- ['getlogicalfield_39',['GetLogicalField',['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &bFieldData) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &sFieldName, xbBool &bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &sFieldName, xbString &sFieldData) const'],['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &sFieldData) const']]],
- ['getlogstatus_40',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
- ['getlongfield_41',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &sFieldName, xbInt32 &lFieldValue) const']]],
- ['getmultiuser_42',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
- ['getnextrecord_43',['GetNextRecord',['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)']]],
- ['getnextsqlcmd_44',['GetNextSqlCmd',['../xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e',1,'xb_execsql.cpp']]],
- ['getopenmode_45',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
- ['getopentablecount_46',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
- ['getpathseparator_47',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString']]],
- ['getprevrecord_48',['GetPrevRecord',['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()']]],
- ['getrawfield_49',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
- ['getrecord_50',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
- ['getrecordbuf_51',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
- ['getrecordcnt_52',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
- ['getrecordcount_53',['GetRecordCount',['../classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce',1,'xb::xbDbf']]],
- ['getrecordlen_54',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
- ['getsharemode_55',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
- ['getsize_56',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
- ['gettblalias_57',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
- ['gettbllistentry_58',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
- ['getulongfield_59',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &sFieldName, xbUInt32 &lFieldValue) const']]],
- ['getversion_60',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
- ['getxbasefiletypebyte_61',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, xbInt16 &iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, unsigned char &cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, unsigned char &cFileTypeByte, xbInt16 &iVersion)']]],
- ['getxbaseptr_62',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
+ ['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 &sFieldName, xbString &sFieldValue) const'],['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &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 &iFieldDecimal) const'],['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &sFieldName, xbInt16 &iFieldDecimal) const']]],
+ ['getfieldlen_20',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &sFieldName, xbInt16 &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 &sFieldName, xbInt16 &iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &sFieldName) const']]],
+ ['getfieldtype_23',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &sFieldName, char &cFieldType) const']]],
+ ['getfiledirpart_24',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &sCompleteFileNameIn, xbString &sFileDirPartOut) const']]],
+ ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &sFileExtPartOut) const'],['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &sCompleteFileNameIn, xbString &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 &sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &sCompleteFileNameIn, xbString &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 &sFieldName, xbFloat &fFieldValue) const'],['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &fFieldValue) const']]],
+ ['getfqfilename_33',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
+ ['getfunctioninfo_34',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
+ ['getheaderlen_35',['GetHeaderLen',['../classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb',1,'xb::xbDbf']]],
+ ['gethomedir_36',['GetHomeDir',['../classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9',1,'xb::xbSsv']]],
+ ['getlastpos_37',['GetLastPos',['../classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df',1,'xb::xbString::GetLastPos(char c) const'],['../classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646',1,'xb::xbString::GetLastPos(const char *s) const']]],
+ ['getlastrecord_38',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
+ ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv::GetLogDirectory()'],['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase::GetLogDirectory()']]],
+ ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv::GetLogFileName()'],['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase::GetLogFileName() const']]],
+ ['getlogfqfilename_41',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
+ ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &sFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &sFieldName, xbString &sFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &sFieldName, xbBool &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 &lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &sFieldName, xbInt32 &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 &lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &sFieldName, xbUInt32 &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 &sFileName, xbInt16 &iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, unsigned char &cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, unsigned char &cFileTypeByte, xbInt16 &iVersion)']]],
+ ['getxbaseptr_65',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/all_b.js b/docs/doxygen/html/search/all_b.js
index 7595e8a..b877785 100644
--- a/docs/doxygen/html/search/all_b.js
+++ b/docs/doxygen/html/search/all_b.js
@@ -1,7 +1,9 @@
var searchData=
[
- ['main_0',['main',['../xb__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d',1,'main(int, char **): xb_dbfutil.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL): xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_tblmgr.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_uda.cpp'],['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_xbase.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_copydbf.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_lock.cpp'],['../xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_dumpdbt.cpp'],['../xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_dumphdr.cpp'],['../xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_dumpix.cpp'],['../xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_execsql.cpp'],['../xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_undelall.cpp'],['../xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_zap.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_linklist.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_date.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_ex_sql.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_bcd.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_expression.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_file.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_filter.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_funcs.cpp']]],
+ ['main_0',['main',['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_uda.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_funcs.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL): xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_tblmgr.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_filter.cpp'],['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_xbase.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_execsql.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_tblinfo.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_file.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_undelall.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_expression.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): 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']]]
+ ['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]],
+ ['mydbfrec_4',['MyDbfRec',['../xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e',1,'xb_test_blockread.cpp']]],
+ ['myv4record_5',['MyV4Record',['../xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99',1,'xb_ex_expression.cpp']]]
];
diff --git a/docs/doxygen/html/search/all_e.js b/docs/doxygen/html/search/all_e.js
index aa6ad3c..6ef5a5b 100644
--- a/docs/doxygen/html/search/all_e.js
+++ b/docs/doxygen/html/search/all_e.js
@@ -5,16 +5,20 @@ 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#a3baf59d15099589ff631995f129e582b',1,'xb::xbString::Pos(char c) const'],['../classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da',1,'xb::xbString::Pos(const char *s) const']]],
- ['pstblalias_6',['psTblAlias',['../structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05',1,'xb::xbTblList']]],
- ['pstblname_7',['psTblName',['../structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f',1,'xb::xbTblList']]],
- ['putat_8',['PutAt',['../classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39',1,'xb::xbString']]],
- ['putdatefield_9',['PutDateField',['../classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5',1,'xb::xbDbf::PutDateField(xbInt16 iFieldNo, const xbDate &dt)'],['../classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9',1,'xb::xbDbf::PutDateField(const xbString &sFieldName, const xbDate &dt)']]],
- ['putdoublefield_10',['PutDoubleField',['../classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971',1,'xb::xbDbf::PutDoubleField(const xbString &FieldName, xbDouble dFieldValue)'],['../classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5',1,'xb::xbDbf::PutDoubleField(xbInt16 FieldNo, xbDouble dFieldValue)']]],
- ['putfield_11',['PutField',['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &sFieldName, const xbString &sFieldData)'],['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &sFieldData)']]],
- ['putfloatfield_12',['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 &sFieldName, xbFloat fFieldValue)']]],
- ['putlogicalfield_13',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &sFieldName, const xbString &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 &sFieldName, xbBool bFieldData)']]],
- ['putlongfield_14',['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 &sFieldNo, xbInt32 lFieldValue)']]],
- ['putrecord_15',['PutRecord',['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()'],['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)']]],
- ['putulongfield_16',['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 &sFieldNo, xbUInt32 lFieldValue)']]]
+ ['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(): xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp(): xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_dumprecs.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_pack.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_undelall.cpp']]],
+ ['printresult_7',['PrintResult',['../xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda',1,'xb_ex_expression.cpp']]],
+ ['printversion_8',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_dumprecs.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_undelall.cpp']]],
+ ['psfqtblname_9',['psFqTblName',['../structxb_1_1xbTblList.html#aceec65f6f6b585788cf98e8dabd2737d',1,'xb::xbTblList']]],
+ ['pstblalias_10',['psTblAlias',['../structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05',1,'xb::xbTblList']]],
+ ['pstblname_11',['psTblName',['../structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f',1,'xb::xbTblList']]],
+ ['putat_12',['PutAt',['../classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39',1,'xb::xbString']]],
+ ['putdatefield_13',['PutDateField',['../classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5',1,'xb::xbDbf::PutDateField(xbInt16 iFieldNo, const xbDate &dt)'],['../classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9',1,'xb::xbDbf::PutDateField(const xbString &sFieldName, const xbDate &dt)']]],
+ ['putdoublefield_14',['PutDoubleField',['../classxb_1_1xbDbf.html#a4f34842d7e8ff1f16992c2ece2fc38a5',1,'xb::xbDbf::PutDoubleField(xbInt16 FieldNo, xbDouble dFieldValue)'],['../classxb_1_1xbDbf.html#ae695bbc71c19abc71c0c5f2ff2e1f971',1,'xb::xbDbf::PutDoubleField(const xbString &FieldName, xbDouble dFieldValue)']]],
+ ['putfield_15',['PutField',['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &sFieldName, const xbString &sFieldData)'],['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &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 &sFieldName, xbFloat fFieldValue)']]],
+ ['putlogicalfield_17',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &sFieldName, const xbString &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 &sFieldName, xbBool bFieldData)']]],
+ ['putlongfield_18',['PutLongField',['../classxb_1_1xbDbf.html#ae7aad223119edb3d541e9f65e88c9f2f',1,'xb::xbDbf::PutLongField(const xbString &sFieldNo, xbInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#a56c8f924284bf88aabf90b7930b4eb47',1,'xb::xbDbf::PutLongField(xbInt16 iFieldNo, xbInt32 lFieldValue)']]],
+ ['putrecord_19',['PutRecord',['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)'],['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()']]],
+ ['putulongfield_20',['PutULongField',['../classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381',1,'xb::xbDbf::PutULongField(const xbString &sFieldNo, xbUInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2',1,'xb::xbDbf::PutULongField(xbInt16 iFieldNo, xbUInt32 lFieldValue)']]]
];
diff --git a/docs/doxygen/html/search/defines_3.js b/docs/doxygen/html/search/defines_3.js
index b0be1a3..da8097a 100644
--- a/docs/doxygen/html/search/defines_3.js
+++ b/docs/doxygen/html/search/defines_3.js
@@ -3,84 +3,87 @@ var searchData=
['xb_5factive_5frecs_0',['XB_ACTIVE_RECS',['../xbdbf_8h.html#a1c44bb25bf2e23a3a9d3d2312df0b592',1,'xbdbf.h']]],
['xb_5fall_5frecs_1',['XB_ALL_RECS',['../xbdbf_8h.html#a8bd17730da3ba5c55a6a07bc482dd0e4',1,'xbdbf.h']]],
['xb_5falready_5fopen_2',['XB_ALREADY_OPEN',['../xbretcod_8h.html#aa2ff8301503f446c6a5f6510090e520f',1,'xbretcod.h']]],
- ['xb_5fbof_3',['XB_BOF',['../xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f',1,'xbretcod.h']]],
- ['xb_5fchar_5ffld_4',['XB_CHAR_FLD',['../xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa',1,'xbdbf.h']]],
- ['xb_5fchareof_5',['XB_CHAREOF',['../xbdbf_8h.html#ada1115f596131888c04df61546b198c4',1,'xbdbf.h']]],
- ['xb_5fcharhdr_6',['XB_CHARHDR',['../xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17',1,'xbdbf.h']]],
- ['xb_5fclose_5ferror_7',['XB_CLOSE_ERROR',['../xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235',1,'xbretcod.h']]],
- ['xb_5fclosed_8',['XB_CLOSED',['../xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f',1,'xbdbf.h']]],
- ['xb_5fdate_5ffld_9',['XB_DATE_FLD',['../xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc',1,'xbdbf.h']]],
- ['xb_5fdbf_5ffile_5fnot_5fopen_10',['XB_DBF_FILE_NOT_OPEN',['../xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2',1,'xbretcod.h']]],
- ['xb_5fdelete_5ffailed_11',['XB_DELETE_FAILED',['../xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2',1,'xbretcod.h']]],
- ['xb_5fdeleted_5frecs_12',['XB_DELETED_RECS',['../xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43',1,'xbdbf.h']]],
- ['xb_5fdontoverlay_13',['XB_DONTOVERLAY',['../xbdbf_8h.html#a7b797840abdb3291373d15978103a778',1,'xbdbf.h']]],
- ['xb_5fdup_5ftable_5for_5falias_14',['XB_DUP_TABLE_OR_ALIAS',['../xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95',1,'xbretcod.h']]],
- ['xb_5fempty_15',['XB_EMPTY',['../xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29',1,'xbretcod.h']]],
- ['xb_5feof_16',['XB_EOF',['../xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7',1,'xbretcod.h']]],
- ['xb_5ffile_5fexists_17',['XB_FILE_EXISTS',['../xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0',1,'xbretcod.h']]],
- ['xb_5ffile_5fnot_5ffound_18',['XB_FILE_NOT_FOUND',['../xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc',1,'xbretcod.h']]],
- ['xb_5ffile_5ftype_5fnot_5fsupported_19',['XB_FILE_TYPE_NOT_SUPPORTED',['../xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596',1,'xbretcod.h']]],
- ['xb_5ffloat_5ffld_20',['XB_FLOAT_FLD',['../xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd',1,'xbdbf.h']]],
- ['xb_5ffmt_5fmonth_21',['XB_FMT_MONTH',['../xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d',1,'xbdate.h']]],
- ['xb_5ffmt_5fweek_22',['XB_FMT_WEEK',['../xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178',1,'xbdate.h']]],
- ['xb_5ffmt_5fyear_23',['XB_FMT_YEAR',['../xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4',1,'xbdate.h']]],
- ['xb_5fincompatible_5foperands_24',['XB_INCOMPATIBLE_OPERANDS',['../xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74',1,'xbretcod.h']]],
- ['xb_5finconsistent_5fparm_5flens_25',['XB_INCONSISTENT_PARM_LENS',['../xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fno_26',['XB_INVALID_BLOCK_NO',['../xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2',1,'xbretcod.h']]],
- ['xb_5finvalid_5fblock_5fsize_27',['XB_INVALID_BLOCK_SIZE',['../xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdata_28',['XB_INVALID_DATA',['../xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fdate_29',['XB_INVALID_DATE',['../xbretcod_8h.html#a702475500357a27b8a34463be3e11925',1,'xbretcod.h']]],
- ['xb_5finvalid_5fexpression_30',['XB_INVALID_EXPRESSION',['../xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_31',['XB_INVALID_FIELD',['../xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5flen_32',['XB_INVALID_FIELD_LEN',['../xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fname_33',['XB_INVALID_FIELD_NAME',['../xbretcod_8h.html#a59403978784130834cf39434cb73f96e',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5fno_34',['XB_INVALID_FIELD_NO',['../xbretcod_8h.html#a09d6c08a44316f551108a74003efd381',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffield_5ftype_35',['XB_INVALID_FIELD_TYPE',['../xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f',1,'xbretcod.h']]],
- ['xb_5finvalid_5ffunction_36',['XB_INVALID_FUNCTION',['../xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742',1,'xbretcod.h']]],
- ['xb_5finvalid_5findex_37',['XB_INVALID_INDEX',['../xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4',1,'xbretcod.h']]],
- ['xb_5finvalid_5fkeyno_38',['XB_INVALID_KEYNO',['../xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8',1,'xbretcod.h']]],
- ['xb_5finvalid_5flock_5foption_39',['XB_INVALID_LOCK_OPTION',['../xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec',1,'xbretcod.h']]],
- ['xb_5finvalid_5fmemo_5ffield_40',['XB_INVALID_MEMO_FIELD',['../xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f',1,'xbretcod.h']]],
- ['xb_5finvalid_5fnodelink_41',['XB_INVALID_NODELINK',['../xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb',1,'xbretcod.h']]],
- ['xb_5finvalid_5fobject_42',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
- ['xb_5finvalid_5foption_43',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
- ['xb_5finvalid_5fpage_44',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
- ['xb_5finvalid_5fparm_45',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
- ['xb_5finvalid_5frecord_46',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftable_5fname_47',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
- ['xb_5finvalid_5ftag_48',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
- ['xb_5fkey_5fnot_5funique_49',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
- ['xb_5flimit_5freached_50',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
- ['xb_5flock_51',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
- ['xb_5flock_5ffailed_52',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
- ['xb_5flogical_5ffld_53',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
- ['xb_5fmax_5ferror_5fno_54',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
- ['xb_5fmemo_5ffld_55',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
- ['xb_5fmulti_5fuser_56',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
- ['xb_5fno_5ferror_57',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
- ['xb_5fno_5fmemory_58',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
- ['xb_5fnot_5ffound_59',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
- ['xb_5fnot_5fopen_60',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
- ['xb_5fnumeric_5ffld_61',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
- ['xb_5fopen_62',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
- ['xb_5fopen_5ferror_63',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
- ['xb_5foverlay_64',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
- ['xb_5fparse_5ferror_65',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
- ['xb_5fread_66',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
- ['xb_5fread_5ferror_67',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
- ['xb_5fread_5fwrite_68',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
- ['xb_5frename_5ferror_69',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
- ['xb_5fseek_5ferror_70',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
- ['xb_5fsingle_5fuser_71',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
- ['xb_5fsyntax_5ferror_72',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
- ['xb_5ftable_5fnot_5flocked_73',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fparens_74',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
- ['xb_5funbalanced_5fquotes_75',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
- ['xb_5funlock_76',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
- ['xb_5fupdated_77',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
- ['xb_5fwrite_78',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
- ['xb_5fwrite_5ferror_79',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
- ['xbfalse_80',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
- ['xbfileno_81',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
- ['xbtrue_82',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]]
+ ['xb_5fblockread_5fnot_5fenabled_3',['XB_BLOCKREAD_NOT_ENABLED',['../xbretcod_8h.html#aae9241d91cfb37f5d236128b3bce0a4a',1,'xbretcod.h']]],
+ ['xb_5fbof_4',['XB_BOF',['../xbretcod_8h.html#ade5f3a7cf1467d12761e4e21b5e4200f',1,'xbretcod.h']]],
+ ['xb_5fchar_5ffld_5',['XB_CHAR_FLD',['../xbdbf_8h.html#a20f739b9d9dc6a002a246a999e76aeaa',1,'xbdbf.h']]],
+ ['xb_5fchareof_6',['XB_CHAREOF',['../xbdbf_8h.html#ada1115f596131888c04df61546b198c4',1,'xbdbf.h']]],
+ ['xb_5fcharhdr_7',['XB_CHARHDR',['../xbdbf_8h.html#a35d56cac7959c1e5c761684ced3f1e17',1,'xbdbf.h']]],
+ ['xb_5fclose_5ferror_8',['XB_CLOSE_ERROR',['../xbretcod_8h.html#a030684d5541cf6127a76d81b0684b235',1,'xbretcod.h']]],
+ ['xb_5fclosed_9',['XB_CLOSED',['../xbdbf_8h.html#a843ca4569326dbd1d0647899b0eb512f',1,'xbdbf.h']]],
+ ['xb_5fdate_5ffld_10',['XB_DATE_FLD',['../xbdbf_8h.html#a7f685e6f5fe804b2174725a27ce73adc',1,'xbdbf.h']]],
+ ['xb_5fdbf_5ffile_5fnot_5fopen_11',['XB_DBF_FILE_NOT_OPEN',['../xbretcod_8h.html#a8104510b347c87998eadd0b27201e3c2',1,'xbretcod.h']]],
+ ['xb_5fdelete_5ffailed_12',['XB_DELETE_FAILED',['../xbretcod_8h.html#ada15513935d5ede9216f07c0438f34d2',1,'xbretcod.h']]],
+ ['xb_5fdeleted_5frecs_13',['XB_DELETED_RECS',['../xbdbf_8h.html#acc0a441854ed92b9d65d1181a97cad43',1,'xbdbf.h']]],
+ ['xb_5fdirectory_5ferror_14',['XB_DIRECTORY_ERROR',['../xbretcod_8h.html#af532df74147ce2d872f61abfee49c53e',1,'xbretcod.h']]],
+ ['xb_5fdontoverlay_15',['XB_DONTOVERLAY',['../xbdbf_8h.html#a7b797840abdb3291373d15978103a778',1,'xbdbf.h']]],
+ ['xb_5fdup_5ftable_5for_5falias_16',['XB_DUP_TABLE_OR_ALIAS',['../xbretcod_8h.html#ac18036408d10e5eee1bf76cf92352b95',1,'xbretcod.h']]],
+ ['xb_5fempty_17',['XB_EMPTY',['../xbretcod_8h.html#a18068d0cbe0c7a1b4dd3176220180c29',1,'xbretcod.h']]],
+ ['xb_5feof_18',['XB_EOF',['../xbretcod_8h.html#a8b47031e90c3f86306c7058e4490d3b7',1,'xbretcod.h']]],
+ ['xb_5ffile_5fexists_19',['XB_FILE_EXISTS',['../xbretcod_8h.html#a54303a9677dbd5342233f33dd08c64d0',1,'xbretcod.h']]],
+ ['xb_5ffile_5fnot_5ffound_20',['XB_FILE_NOT_FOUND',['../xbretcod_8h.html#ad090af330c93111d12f6de35dbb065bc',1,'xbretcod.h']]],
+ ['xb_5ffile_5ftype_5fnot_5fsupported_21',['XB_FILE_TYPE_NOT_SUPPORTED',['../xbretcod_8h.html#ab7b9130a5f1df9975cfeaf6241933596',1,'xbretcod.h']]],
+ ['xb_5ffloat_5ffld_22',['XB_FLOAT_FLD',['../xbdbf_8h.html#a96ab4218d70ab603b4866354ce8c18cd',1,'xbdbf.h']]],
+ ['xb_5ffmt_5fmonth_23',['XB_FMT_MONTH',['../xbdate_8h.html#aeacf2f7cc897ab5bd64781c0fb52b75d',1,'xbdate.h']]],
+ ['xb_5ffmt_5fweek_24',['XB_FMT_WEEK',['../xbdate_8h.html#a8f22704d3fd93fa85dd93b6c699e8178',1,'xbdate.h']]],
+ ['xb_5ffmt_5fyear_25',['XB_FMT_YEAR',['../xbdate_8h.html#aa29d78982a9e007874af1c4f4e4d1aa4',1,'xbdate.h']]],
+ ['xb_5fincompatible_5foperands_26',['XB_INCOMPATIBLE_OPERANDS',['../xbretcod_8h.html#af141ec58b7ca7360e0be6c61d015ea74',1,'xbretcod.h']]],
+ ['xb_5finconsistent_5fparm_5flens_27',['XB_INCONSISTENT_PARM_LENS',['../xbretcod_8h.html#adc4b24bfffa202f8df25409894e547b9',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fblock_5fno_28',['XB_INVALID_BLOCK_NO',['../xbretcod_8h.html#a4e13b529b486c43ca600ce7d8ddbf3c2',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fblock_5fsize_29',['XB_INVALID_BLOCK_SIZE',['../xbretcod_8h.html#a1bd22921612389c37f6b2eac438c62c5',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fdata_30',['XB_INVALID_DATA',['../xbretcod_8h.html#afb40bbed323ecb369dd430a2e1242f9a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fdate_31',['XB_INVALID_DATE',['../xbretcod_8h.html#a702475500357a27b8a34463be3e11925',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fexpression_32',['XB_INVALID_EXPRESSION',['../xbretcod_8h.html#a54db562c3cae97581812b4fccd52b71a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_33',['XB_INVALID_FIELD',['../xbretcod_8h.html#a34180b2e2bd350ba2ebcdd1335e15d7e',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5flen_34',['XB_INVALID_FIELD_LEN',['../xbretcod_8h.html#a7bd322c0efbba17f68ccccd6cf624411',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5fname_35',['XB_INVALID_FIELD_NAME',['../xbretcod_8h.html#a59403978784130834cf39434cb73f96e',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5fno_36',['XB_INVALID_FIELD_NO',['../xbretcod_8h.html#a09d6c08a44316f551108a74003efd381',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffield_5ftype_37',['XB_INVALID_FIELD_TYPE',['../xbretcod_8h.html#a79e2588f067d6e236c0e5a2c0728ba9f',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ffunction_38',['XB_INVALID_FUNCTION',['../xbretcod_8h.html#a2b7e5e440dbcf5e6dc885b24dbe28742',1,'xbretcod.h']]],
+ ['xb_5finvalid_5findex_39',['XB_INVALID_INDEX',['../xbretcod_8h.html#acd175ef0541e2cad424791bd87619dd4',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fkeyno_40',['XB_INVALID_KEYNO',['../xbretcod_8h.html#aec2c0ac2bd62e0329ef130e4fbda39f8',1,'xbretcod.h']]],
+ ['xb_5finvalid_5flock_5foption_41',['XB_INVALID_LOCK_OPTION',['../xbretcod_8h.html#ab45735e63c208eb7e6d6df31fd527aec',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fmemo_5ffield_42',['XB_INVALID_MEMO_FIELD',['../xbretcod_8h.html#a187c50745f51bfe4aa6f70a92f16c59f',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fnodelink_43',['XB_INVALID_NODELINK',['../xbretcod_8h.html#a13e6876470bd34c8c4e5533f115e04eb',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fobject_44',['XB_INVALID_OBJECT',['../xbretcod_8h.html#a418c047353bc683d0fd6ecbbdd5b7885',1,'xbretcod.h']]],
+ ['xb_5finvalid_5foption_45',['XB_INVALID_OPTION',['../xbretcod_8h.html#af1cd0baf346cad686fa4dd11f700012a',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fpage_46',['XB_INVALID_PAGE',['../xbretcod_8h.html#ad0aba12b5ae2137f8d6abd28b47f95f0',1,'xbretcod.h']]],
+ ['xb_5finvalid_5fparm_47',['XB_INVALID_PARM',['../xbretcod_8h.html#a4cedf96581c9cbc9c14d07494143702d',1,'xbretcod.h']]],
+ ['xb_5finvalid_5frecord_48',['XB_INVALID_RECORD',['../xbretcod_8h.html#a0fd212f912b2e62700a66bae95bd73a1',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftable_5fname_49',['XB_INVALID_TABLE_NAME',['../xbretcod_8h.html#a53891c95a78483704d2a8e14c4499f92',1,'xbretcod.h']]],
+ ['xb_5finvalid_5ftag_50',['XB_INVALID_TAG',['../xbretcod_8h.html#a176d917912d3433f065483f905a4c50a',1,'xbretcod.h']]],
+ ['xb_5fkey_5fnot_5funique_51',['XB_KEY_NOT_UNIQUE',['../xbretcod_8h.html#ad60dbb1862c0c1c2dc0464cfbfd93a34',1,'xbretcod.h']]],
+ ['xb_5flimit_5freached_52',['XB_LIMIT_REACHED',['../xbretcod_8h.html#a59f1a8a6aca19595c2d1804349a24850',1,'xbretcod.h']]],
+ ['xb_5flock_53',['XB_LOCK',['../xbdbf_8h.html#a395a2e101a793bacabf6bc079d178e29',1,'xbdbf.h']]],
+ ['xb_5flock_5ffailed_54',['XB_LOCK_FAILED',['../xbretcod_8h.html#a001e24b39e0f155fb1e892f5b1b9cff1',1,'xbretcod.h']]],
+ ['xb_5flogical_5ffld_55',['XB_LOGICAL_FLD',['../xbdbf_8h.html#a2f6d5073af761bc1a806a2c7b1c1d886',1,'xbdbf.h']]],
+ ['xb_5fmax_5ferror_5fno_56',['XB_MAX_ERROR_NO',['../xbretcod_8h.html#a299419a9c80e000b74bf97a2d24d6a3d',1,'xbretcod.h']]],
+ ['xb_5fmemcpy_5ferror_57',['XB_MEMCPY_ERROR',['../xbretcod_8h.html#aa2925f035e3b186d7efa14648ea0e86d',1,'xbretcod.h']]],
+ ['xb_5fmemo_5ffld_58',['XB_MEMO_FLD',['../xbdbf_8h.html#a23fa19b19cb43bd6dcc59a5a3f6c30ad',1,'xbdbf.h']]],
+ ['xb_5fmulti_5fuser_59',['XB_MULTI_USER',['../xbfile_8h.html#a05c0fc99ba71cf953d046d12f3f874bc',1,'xbfile.h']]],
+ ['xb_5fno_5ferror_60',['XB_NO_ERROR',['../xbretcod_8h.html#ac720d5b4ec45bfd606f5865d40816e23',1,'xbretcod.h']]],
+ ['xb_5fno_5fmemory_61',['XB_NO_MEMORY',['../xbretcod_8h.html#ae687fc7d872ba0475a8477e4447f9b54',1,'xbretcod.h']]],
+ ['xb_5fnot_5ffound_62',['XB_NOT_FOUND',['../xbretcod_8h.html#ac2606659a54111334f5b02861e533700',1,'xbretcod.h']]],
+ ['xb_5fnot_5fopen_63',['XB_NOT_OPEN',['../xbretcod_8h.html#a9474b400f647bdefbbb07e5177e8d7a1',1,'xbretcod.h']]],
+ ['xb_5fnumeric_5ffld_64',['XB_NUMERIC_FLD',['../xbdbf_8h.html#ae9fb6d69cc5edc94d36ae403c22ec1c6',1,'xbdbf.h']]],
+ ['xb_5fopen_65',['XB_OPEN',['../xbdbf_8h.html#a9a6dafbb07cac744eb14094efa739409',1,'xbdbf.h']]],
+ ['xb_5fopen_5ferror_66',['XB_OPEN_ERROR',['../xbretcod_8h.html#aaab55236993a1d3acb29206252a904c8',1,'xbretcod.h']]],
+ ['xb_5foverlay_67',['XB_OVERLAY',['../xbdbf_8h.html#a6fe10b307878b4612b04c2c876a4a592',1,'xbdbf.h']]],
+ ['xb_5fparse_5ferror_68',['XB_PARSE_ERROR',['../xbretcod_8h.html#aec713cac2b03a0d536a2d16336ae7c0b',1,'xbretcod.h']]],
+ ['xb_5fread_69',['XB_READ',['../xbfile_8h.html#ae58c73e0ba237fcf67ee20feea6c2743',1,'xbfile.h']]],
+ ['xb_5fread_5ferror_70',['XB_READ_ERROR',['../xbretcod_8h.html#adbd40585db8bb748d191f94a33bac710',1,'xbretcod.h']]],
+ ['xb_5fread_5fwrite_71',['XB_READ_WRITE',['../xbfile_8h.html#af991a288c327f6857e90156ea734a633',1,'xbfile.h']]],
+ ['xb_5frename_5ferror_72',['XB_RENAME_ERROR',['../xbretcod_8h.html#a373f30b2efcbbab9f6d060fb3fe8cba3',1,'xbretcod.h']]],
+ ['xb_5fseek_5ferror_73',['XB_SEEK_ERROR',['../xbretcod_8h.html#a0455ad8719e153b08ec68b10c81e9f41',1,'xbretcod.h']]],
+ ['xb_5fsingle_5fuser_74',['XB_SINGLE_USER',['../xbfile_8h.html#a9ec4d60a008c667d9861e3b3814f0232',1,'xbfile.h']]],
+ ['xb_5fsyntax_5ferror_75',['XB_SYNTAX_ERROR',['../xbretcod_8h.html#a5db3a90f215534143bdde81253729c7f',1,'xbretcod.h']]],
+ ['xb_5ftable_5fnot_5flocked_76',['XB_TABLE_NOT_LOCKED',['../xbretcod_8h.html#af6aaf779fddecca521d785666f6dc56b',1,'xbretcod.h']]],
+ ['xb_5funbalanced_5fparens_77',['XB_UNBALANCED_PARENS',['../xbretcod_8h.html#aff5646a6b0884ff81004de6961473ea6',1,'xbretcod.h']]],
+ ['xb_5funbalanced_5fquotes_78',['XB_UNBALANCED_QUOTES',['../xbretcod_8h.html#aedfa20a6c4eb9ba3063ba56be8280eac',1,'xbretcod.h']]],
+ ['xb_5funlock_79',['XB_UNLOCK',['../xbdbf_8h.html#a21389b73e7b4e7e185fa635b9e354c2e',1,'xbdbf.h']]],
+ ['xb_5fupdated_80',['XB_UPDATED',['../xbdbf_8h.html#a26e7eeda69f32bc88b08a208ca9e7991',1,'xbdbf.h']]],
+ ['xb_5fwrite_81',['XB_WRITE',['../xbfile_8h.html#abbf99e259c2f31572c886da6d85b1359',1,'xbfile.h']]],
+ ['xb_5fwrite_5ferror_82',['XB_WRITE_ERROR',['../xbretcod_8h.html#aef34ebe6726057f805d6063130280549',1,'xbretcod.h']]],
+ ['xbfalse_83',['xbFalse',['../xbtypes_8h.html#adc4b6ca5ad299f63675136d9e03938cc',1,'xbtypes.h']]],
+ ['xbfileno_84',['xbFileNo',['../xbtypes_8h.html#a2c65f692ac861990861575e18f72f6eb',1,'xbtypes.h']]],
+ ['xbtrue_85',['xbTrue',['../xbtypes_8h.html#ab0ae00665298fe7f5292691cb98ec2d9',1,'xbtypes.h']]]
];
diff --git a/docs/doxygen/html/search/files_1.js b/docs/doxygen/html/search/files_1.js
index 8a867fe..3628f1d 100644
--- a/docs/doxygen/html/search/files_1.js
+++ b/docs/doxygen/html/search/files_1.js
@@ -5,11 +5,11 @@ var searchData=
['xb_5fdbfutil_2ecpp_2',['xb_dbfutil.cpp',['../xb__dbfutil_8cpp.html',1,'']]],
['xb_5fdeletall_2ecpp_3',['xb_deletall.cpp',['../xb__deletall_8cpp.html',1,'']]],
['xb_5fdumpdbt_2ecpp_4',['xb_dumpdbt.cpp',['../xb__dumpdbt_8cpp.html',1,'']]],
- ['xb_5fdumphdr_2ecpp_5',['xb_dumphdr.cpp',['../xb__dumphdr_8cpp.html',1,'']]],
- ['xb_5fdumpix_2ecpp_6',['xb_dumpix.cpp',['../xb__dumpix_8cpp.html',1,'']]],
- ['xb_5fdumprecs_2ecpp_7',['xb_dumprecs.cpp',['../xb__dumprecs_8cpp.html',1,'']]],
- ['xb_5fex_5fdate_2ecpp_8',['xb_ex_date.cpp',['../xb__ex__date_8cpp.html',1,'']]],
- ['xb_5fex_5fsql_2ecpp_9',['xb_ex_sql.cpp',['../xb__ex__sql_8cpp.html',1,'']]],
+ ['xb_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,'']]],
@@ -19,83 +19,88 @@ var searchData=
['xb_5fpack_2ecpp_16',['xb_pack.cpp',['../xb__pack_8cpp.html',1,'']]],
['xb_5ftblinfo_2ecpp_17',['xb_tblinfo.cpp',['../xb__tblinfo_8cpp.html',1,'']]],
['xb_5ftest_5fbcd_2ecpp_18',['xb_test_bcd.cpp',['../xb__test__bcd_8cpp.html',1,'']]],
- ['xb_5ftest_5fdate_2ecpp_19',['xb_test_date.cpp',['../xb__test__date_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fmemos_2ecpp_20',['xb_test_dbf_v3_memos.cpp',['../xb__test__dbf__v3__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv3_5fnomemos_2ecpp_21',['xb_test_dbf_v3_nomemos.cpp',['../xb__test__dbf__v3__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fmemos_2ecpp_22',['xb_test_dbf_v4_memos.cpp',['../xb__test__dbf__v4__memos_8cpp.html',1,'']]],
- ['xb_5ftest_5fdbf_5fv4_5fnomemos_2ecpp_23',['xb_test_dbf_v4_nomemos.cpp',['../xb__test__dbf__v4__nomemos_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpnode_2ecpp_24',['xb_test_expnode.cpp',['../xb__test__expnode_8cpp.html',1,'']]],
- ['xb_5ftest_5fexpression_2ecpp_25',['xb_test_expression.cpp',['../xb__test__expression_8cpp.html',1,'']]],
- ['xb_5ftest_5ffile_2ecpp_26',['xb_test_file.cpp',['../xb__test__file_8cpp.html',1,'']]],
- ['xb_5ftest_5ffilter_2ecpp_27',['xb_test_filter.cpp',['../xb__test__filter_8cpp.html',1,'']]],
- ['xb_5ftest_5ffuncs_2ecpp_28',['xb_test_funcs.cpp',['../xb__test__funcs_8cpp.html',1,'']]],
- ['xb_5ftest_5flinklist_2ecpp_29',['xb_test_linklist.cpp',['../xb__test__linklist_8cpp.html',1,'']]],
- ['xb_5ftest_5flock_2ecpp_30',['xb_test_lock.cpp',['../xb__test__lock_8cpp.html',1,'']]],
- ['xb_5ftest_5flock2_2ecpp_31',['xb_test_lock2.cpp',['../xb__test__lock2_8cpp.html',1,'']]],
- ['xb_5ftest_5flog_2ecpp_32',['xb_test_log.cpp',['../xb__test__log_8cpp.html',1,'']]],
- ['xb_5ftest_5fmdx_2ecpp_33',['xb_test_mdx.cpp',['../xb__test__mdx_8cpp.html',1,'']]],
- ['xb_5ftest_5fndx_2ecpp_34',['xb_test_ndx.cpp',['../xb__test__ndx_8cpp.html',1,'']]],
- ['xb_5ftest_5fsql_2ecpp_35',['xb_test_sql.cpp',['../xb__test__sql_8cpp.html',1,'']]],
- ['xb_5ftest_5fstring_2ecpp_36',['xb_test_string.cpp',['../xb__test__string_8cpp.html',1,'']]],
- ['xb_5ftest_5ftblmgr_2ecpp_37',['xb_test_tblmgr.cpp',['../xb__test__tblmgr_8cpp.html',1,'']]],
- ['xb_5ftest_5fuda_2ecpp_38',['xb_test_uda.cpp',['../xb__test__uda_8cpp.html',1,'']]],
- ['xb_5ftest_5fxbase_2ecpp_39',['xb_test_xbase.cpp',['../xb__test__xbase_8cpp.html',1,'']]],
- ['xb_5fundelall_2ecpp_40',['xb_undelall.cpp',['../xb__undelall_8cpp.html',1,'']]],
- ['xb_5fzap_2ecpp_41',['xb_zap.cpp',['../xb__zap_8cpp.html',1,'']]],
+ ['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,'']]],
- ['xbcrix_2ecpp_46',['xbcrix.cpp',['../xbcrix_8cpp.html',1,'']]],
- ['xbcrtbl_2ecpp_47',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
- ['xbdate_2ecpp_48',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
- ['xbdate_2eh_49',['xbdate.h',['../xbdate_8h.html',1,'']]],
- ['xbdbf_2ecpp_50',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
- ['xbdbf_2eh_51',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
- ['xbdbf3_2ecpp_52',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
- ['xbdbf4_2ecpp_53',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
- ['xbdelete_2ecpp_54',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
- ['xbdrpix_2ecpp_55',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
- ['xbdrptbl_2ecpp_56',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
- ['xbexp_2ecpp_57',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
- ['xbexp_2eh_58',['xbexp.h',['../xbexp_8h.html',1,'']]],
- ['xbexpnode_2ecpp_59',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
- ['xbexpnode_2eh_60',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
- ['xbfields_2ecpp_61',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
- ['xbfile_2ecpp_62',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
- ['xbfile_2eh_63',['xbfile.h',['../xbfile_8h.html',1,'']]],
- ['xbfilter_2ecpp_64',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
- ['xbfilter_2eh_65',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
- ['xbfuncs_2ecpp_66',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
- ['xbindex_2eh_67',['xbindex.h',['../xbindex_8h.html',1,'']]],
- ['xbinsert_2ecpp_68',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
- ['xbixbase_2ecpp_69',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
- ['xbixmdx_2ecpp_70',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
- ['xbixndx_2ecpp_71',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
- ['xblnklst_2eh_72',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
- ['xblnklstord_2eh_73',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
- ['xblnknod_2eh_74',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
- ['xblog_2ecpp_75',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
- ['xblog_2eh_76',['xblog.h',['../xblog_8h.html',1,'']]],
- ['xbmemo_2ecpp_77',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
- ['xbmemo_2eh_78',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
- ['xbmemo3_2ecpp_79',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
- ['xbmemo4_2ecpp_80',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
- ['xbretcod_2eh_81',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
- ['xbset_2ecpp_82',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
- ['xbsql_2ecpp_83',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
- ['xbsql_2eh_84',['xbsql.h',['../xbsql_8h.html',1,'']]],
- ['xbssv_2ecpp_85',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
- ['xbssv_2eh_86',['xbssv.h',['../xbssv_8h.html',1,'']]],
- ['xbstring_2ecpp_87',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
- ['xbstring_2eh_88',['xbstring.h',['../xbstring_8h.html',1,'']]],
- ['xbtag_2ecpp_89',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
- ['xbtag_2eh_90',['xbtag.h',['../xbtag_8h.html',1,'']]],
- ['xbtblmgr_2ecpp_91',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
- ['xbtblmgr_2eh_92',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
- ['xbtypes_2eh_93',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
- ['xbuda_2ecpp_94',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
- ['xbuda_2eh_95',['xbuda.h',['../xbuda_8h.html',1,'']]],
- ['xbxbase_2ecpp_96',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
- ['xbxbase_2eh_97',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
+ ['xbblkread_2eh_46',['xbblkread.h',['../xbblkread_8h.html',1,'']]],
+ ['xbblockread_2ecpp_47',['xbblockread.cpp',['../xbblockread_8cpp.html',1,'']]],
+ ['xbcrix_2ecpp_48',['xbcrix.cpp',['../xbcrix_8cpp.html',1,'']]],
+ ['xbcrtbl_2ecpp_49',['xbcrtbl.cpp',['../xbcrtbl_8cpp.html',1,'']]],
+ ['xbcrtbl_2esave_2ecpp_50',['xbcrtbl.save.cpp',['../xbcrtbl_8save_8cpp.html',1,'']]],
+ ['xbdate_2ecpp_51',['xbdate.cpp',['../xbdate_8cpp.html',1,'']]],
+ ['xbdate_2eh_52',['xbdate.h',['../xbdate_8h.html',1,'']]],
+ ['xbdbf_2ecpp_53',['xbdbf.cpp',['../xbdbf_8cpp.html',1,'']]],
+ ['xbdbf_2eh_54',['xbdbf.h',['../xbdbf_8h.html',1,'']]],
+ ['xbdbf3_2ecpp_55',['xbdbf3.cpp',['../xbdbf3_8cpp.html',1,'']]],
+ ['xbdbf4_2ecpp_56',['xbdbf4.cpp',['../xbdbf4_8cpp.html',1,'']]],
+ ['xbdelete_2ecpp_57',['xbdelete.cpp',['../xbdelete_8cpp.html',1,'']]],
+ ['xbdrpix_2ecpp_58',['xbdrpix.cpp',['../xbdrpix_8cpp.html',1,'']]],
+ ['xbdrptbl_2ecpp_59',['xbdrptbl.cpp',['../xbdrptbl_8cpp.html',1,'']]],
+ ['xbexp_2ecpp_60',['xbexp.cpp',['../xbexp_8cpp.html',1,'']]],
+ ['xbexp_2eh_61',['xbexp.h',['../xbexp_8h.html',1,'']]],
+ ['xbexpnode_2ecpp_62',['xbexpnode.cpp',['../xbexpnode_8cpp.html',1,'']]],
+ ['xbexpnode_2eh_63',['xbexpnode.h',['../xbexpnode_8h.html',1,'']]],
+ ['xbfields_2ecpp_64',['xbfields.cpp',['../xbfields_8cpp.html',1,'']]],
+ ['xbfile_2ecpp_65',['xbfile.cpp',['../xbfile_8cpp.html',1,'']]],
+ ['xbfile_2eh_66',['xbfile.h',['../xbfile_8h.html',1,'']]],
+ ['xbfilter_2ecpp_67',['xbfilter.cpp',['../xbfilter_8cpp.html',1,'']]],
+ ['xbfilter_2eh_68',['xbfilter.h',['../xbfilter_8h.html',1,'']]],
+ ['xbfuncs_2ecpp_69',['xbfuncs.cpp',['../xbfuncs_8cpp.html',1,'']]],
+ ['xbindex_2eh_70',['xbindex.h',['../xbindex_8h.html',1,'']]],
+ ['xbinsert_2ecpp_71',['xbinsert.cpp',['../xbinsert_8cpp.html',1,'']]],
+ ['xbixbase_2ecpp_72',['xbixbase.cpp',['../xbixbase_8cpp.html',1,'']]],
+ ['xbixmdx_2ecpp_73',['xbixmdx.cpp',['../xbixmdx_8cpp.html',1,'']]],
+ ['xbixndx_2ecpp_74',['xbixndx.cpp',['../xbixndx_8cpp.html',1,'']]],
+ ['xblnklst_2eh_75',['xblnklst.h',['../xblnklst_8h.html',1,'']]],
+ ['xblnklstord_2eh_76',['xblnklstord.h',['../xblnklstord_8h.html',1,'']]],
+ ['xblnknod_2eh_77',['xblnknod.h',['../xblnknod_8h.html',1,'']]],
+ ['xblog_2ecpp_78',['xblog.cpp',['../xblog_8cpp.html',1,'']]],
+ ['xblog_2eh_79',['xblog.h',['../xblog_8h.html',1,'']]],
+ ['xbmemo_2ecpp_80',['xbmemo.cpp',['../xbmemo_8cpp.html',1,'']]],
+ ['xbmemo_2eh_81',['xbmemo.h',['../xbmemo_8h.html',1,'']]],
+ ['xbmemo3_2ecpp_82',['xbmemo3.cpp',['../xbmemo3_8cpp.html',1,'']]],
+ ['xbmemo4_2ecpp_83',['xbmemo4.cpp',['../xbmemo4_8cpp.html',1,'']]],
+ ['xbretcod_2eh_84',['xbretcod.h',['../xbretcod_8h.html',1,'']]],
+ ['xbselect_2ecpp_85',['xbselect.cpp',['../xbselect_8cpp.html',1,'']]],
+ ['xbset_2ecpp_86',['xbset.cpp',['../xbset_8cpp.html',1,'']]],
+ ['xbsql_2ecpp_87',['xbsql.cpp',['../xbsql_8cpp.html',1,'']]],
+ ['xbsql_2eh_88',['xbsql.h',['../xbsql_8h.html',1,'']]],
+ ['xbssv_2ecpp_89',['xbssv.cpp',['../xbssv_8cpp.html',1,'']]],
+ ['xbssv_2eh_90',['xbssv.h',['../xbssv_8h.html',1,'']]],
+ ['xbstmt_2ecpp_91',['xbstmt.cpp',['../xbstmt_8cpp.html',1,'']]],
+ ['xbstring_2ecpp_92',['xbstring.cpp',['../xbstring_8cpp.html',1,'']]],
+ ['xbstring_2eh_93',['xbstring.h',['../xbstring_8h.html',1,'']]],
+ ['xbtag_2ecpp_94',['xbtag.cpp',['../xbtag_8cpp.html',1,'']]],
+ ['xbtag_2eh_95',['xbtag.h',['../xbtag_8h.html',1,'']]],
+ ['xbtblmgr_2ecpp_96',['xbtblmgr.cpp',['../xbtblmgr_8cpp.html',1,'']]],
+ ['xbtblmgr_2eh_97',['xbtblmgr.h',['../xbtblmgr_8h.html',1,'']]],
+ ['xbtypes_2eh_98',['xbtypes.h',['../xbtypes_8h.html',1,'']]],
+ ['xbuda_2ecpp_99',['xbuda.cpp',['../xbuda_8cpp.html',1,'']]],
+ ['xbuda_2eh_100',['xbuda.h',['../xbuda_8h.html',1,'']]],
+ ['xbxbase_2ecpp_101',['xbxbase.cpp',['../xbxbase_8cpp.html',1,'']]],
+ ['xbxbase_2eh_102',['xbxbase.h',['../xbxbase_8h.html',1,'']]]
];
diff --git a/docs/doxygen/html/search/functions_0.js b/docs/doxygen/html/search/functions_0.js
index 25f7a4e..1e4e72c 100644
--- a/docs/doxygen/html/search/functions_0.js
+++ b/docs/doxygen/html/search/functions_0.js
@@ -2,7 +2,7 @@ var searchData=
[
['abort_0',['Abort',['../classxb_1_1xbDbf.html#a4edcf31390fbdc8c3558004770fd9f2f',1,'xb::xbDbf']]],
['addbackslash_1',['AddBackSlash',['../classxb_1_1xbString.html#a6c4fdb689d27a9d19a0b5b4236e1ca62',1,'xb::xbString']]],
- ['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#a721f69ccc7893842422a043468ffccea',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &sTblName)'],['../classxb_1_1xbTblMgr.html#a62f6841849dbe5c1768f7e90f1b7e766',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &sTblName, const xbString &sTblAlias)']]],
+ ['addtbltotbllist_2',['AddTblToTblList',['../classxb_1_1xbTblMgr.html#af16832ff2bfaee09265652e0fc03709a',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &sFqTblName)'],['../classxb_1_1xbTblMgr.html#a2033188e9b08778188a034a6fc90ca85',1,'xb::xbTblMgr::AddTblToTblList(xbDbf *d, const xbString &sFqTblName, const xbString &sTblAlias)']]],
['append_3',['Append',['../classxb_1_1xbString.html#a8f202e4798491f2ae9ce51ff58dd5815',1,'xb::xbString::Append(const xbString &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 &s, xbUInt32 pos, xbUInt32 lCopyLen)'],['../classxb_1_1xbString.html#a4f1d709d9f6c56959e8549157b4ee68c',1,'xb::xbString::Assign(const xbString &s, xbUInt32 lCopyLen)']]]
diff --git a/docs/doxygen/html/search/functions_10.js b/docs/doxygen/html/search/functions_10.js
index 7973353..475233e 100644
--- a/docs/doxygen/html/search/functions_10.js
+++ b/docs/doxygen/html/search/functions_10.js
@@ -6,12 +6,12 @@ var searchData=
['setdatadirectory_3',['SetDataDirectory',['../classxb_1_1xbSsv.html#a57caaaadfbd089d9a58ecfcb50c88a6c',1,'xb::xbSsv']]],
['setdefaultautocommit_4',['SetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a25542afadaaf39b4fb5a1772a29cc0bd',1,'xb::xbSsv']]],
['setdefaultdateformat_5',['SetDefaultDateFormat',['../classxb_1_1xbSsv.html#a5f74db23f8902846d581935c7db73f9c',1,'xb::xbSsv']]],
- ['setdefaultlogdirectory_6',['SetDefaultLogDirectory',['../classxb_1_1xbSsv.html#a84343b8645790791512d6bc22ee6c8eb',1,'xb::xbSsv']]],
- ['setdirectory_7',['SetDirectory',['../classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3',1,'xb::xbFile']]],
- ['setendiantype_8',['SetEndianType',['../classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108',1,'xb::xbSsv']]],
- ['setfilename_9',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
- ['setfqfilename_10',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
- ['setlogdirectory_11',['SetLogDirectory',['../classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292',1,'xb::xbXBase']]],
+ ['setdirectory_6',['SetDirectory',['../classxb_1_1xbFile.html#ae78a85255488bc78964c16946dbaead3',1,'xb::xbFile']]],
+ ['setendiantype_7',['SetEndianType',['../classxb_1_1xbSsv.html#a904ec348fd029d4a76e72b8fde636108',1,'xb::xbSsv']]],
+ ['setfilename_8',['SetFileName',['../classxb_1_1xbFile.html#a5419eb27e56822f828b2b88a9502a636',1,'xb::xbFile']]],
+ ['setfqfilename_9',['SetFqFileName',['../classxb_1_1xbFile.html#aee832fa11db2077a532f49e1329bd05a',1,'xb::xbFile']]],
+ ['sethomefolders_10',['SetHomeFolders',['../classxb_1_1xbFile.html#a060acbfaa8d528f86cb59301814b414a',1,'xb::xbFile']]],
+ ['setlogdirectory_11',['SetLogDirectory',['../classxb_1_1xbSsv.html#a7b992ed97281bf25b5b66f5df686225e',1,'xb::xbSsv::SetLogDirectory()'],['../classxb_1_1xbXBase.html#a48d82dbe298c6f4cf68a63ac82dd8292',1,'xb::xbXBase::SetLogDirectory(const xbString &sLogFileDirectory)']]],
['setlogfilename_12',['SetLogFileName',['../classxb_1_1xbXBase.html#a94010b88a309315ef980715eb581336c',1,'xb::xbXBase']]],
['setlogsize_13',['SetLogSize',['../classxb_1_1xbXBase.html#a666a0cb5b76ec7a9a3677d339e0c6b42',1,'xb::xbXBase']]],
['setmultiuser_14',['SetMultiUser',['../classxb_1_1xbSsv.html#aba6e59512f7172dd55dcf92059e5928c',1,'xb::xbSsv']]],
diff --git a/docs/doxygen/html/search/functions_6.js b/docs/doxygen/html/search/functions_6.js
index 580f3f8..1cedf85 100644
--- a/docs/doxygen/html/search/functions_6.js
+++ b/docs/doxygen/html/search/functions_6.js
@@ -2,65 +2,68 @@ var searchData=
[
['getautocommit_0',['GetAutoCommit',['../classxb_1_1xbDbf.html#ae0c00226fd2ea7a67f101e795467ed68',1,'xb::xbDbf::GetAutoCommit(xbInt16 iOption) const'],['../classxb_1_1xbDbf.html#abb9e20c5efacd4fea80f1515abbc6b55',1,'xb::xbDbf::GetAutoCommit() const']]],
['getblocksize_1',['GetBlockSize',['../classxb_1_1xbFile.html#a638e14262410a1627819f016a16cdce2',1,'xb::xbFile']]],
- ['getcharacter_2',['GetCharacter',['../classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d',1,'xb::xbString']]],
- ['getcurrecno_3',['GetCurRecNo',['../classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503',1,'xb::xbDbf']]],
- ['getdatadirectory_4',['GetDataDirectory',['../classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9',1,'xb::xbSsv']]],
- ['getdatefield_5',['GetDateField',['../classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555',1,'xb::xbDbf::GetDateField(xbInt16 iFieldNo, xbDate &dt) const'],['../classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36',1,'xb::xbDbf::GetDateField(const xbString &sFieldName, xbDate &dt) const']]],
- ['getdbfptr_6',['GetDbfPtr',['../classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5',1,'xb::xbTblMgr::GetDbfPtr(const xbString &sTblAlias) const'],['../classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6',1,'xb::xbTblMgr::GetDbfPtr(xbInt16 sItemNo) const']]],
- ['getdbfstatus_7',['GetDbfStatus',['../classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6',1,'xb::xbDbf']]],
- ['getdefaultautocommit_8',['GetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5',1,'xb::xbSsv']]],
- ['getdefaultdateformat_9',['GetDefaultDateFormat',['../classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2',1,'xb::xbSsv']]],
- ['getdefaultlogdirectory_10',['GetDefaultLogDirectory',['../classxb_1_1xbSsv.html#abf3763faf6a8917a963213cd53af529c',1,'xb::xbSsv']]],
- ['getdefaultlogfilename_11',['GetDefaultLogFileName',['../classxb_1_1xbSsv.html#a43878d4dc041f2a5e2398a118ccfaf79',1,'xb::xbSsv']]],
+ ['getbof_2',['GetBof',['../classxb_1_1xbDbf.html#ad0827a43c025c1184ffebab74cc9e779',1,'xb::xbDbf']]],
+ ['getcharacter_3',['GetCharacter',['../classxb_1_1xbString.html#a685187a5f8401b322fc61f3fbe56330d',1,'xb::xbString']]],
+ ['getcmdlineopt_4',['GetCmdLineOpt',['../classxb_1_1xbXBase.html#aadecb3ac460d8e94b88b2e809e22f48e',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &sParmOut)'],['../classxb_1_1xbXBase.html#a8612e0c5334349fbceb9394b47817fd5',1,'xb::xbXBase::GetCmdLineOpt(xbInt32 lArgc, char **argv, xbString &sOptRqst, xbString &sParmOut)']]],
+ ['getcurrecno_5',['GetCurRecNo',['../classxb_1_1xbDbf.html#a643a80a3792a52760c8e09ba18719503',1,'xb::xbDbf']]],
+ ['getdatadirectory_6',['GetDataDirectory',['../classxb_1_1xbSsv.html#a1d803a4bfc8ba0561267a0bf9e51f7d9',1,'xb::xbSsv']]],
+ ['getdatefield_7',['GetDateField',['../classxb_1_1xbDbf.html#af78ef1fba949463ff7f829d3cffc4555',1,'xb::xbDbf::GetDateField(xbInt16 iFieldNo, xbDate &dt) const'],['../classxb_1_1xbDbf.html#ac624e06a97666bfd64b4f252b4548b36',1,'xb::xbDbf::GetDateField(const xbString &sFieldName, xbDate &dt) const']]],
+ ['getdbfptr_8',['GetDbfPtr',['../classxb_1_1xbTblMgr.html#ad8a5d28a2ee6720a9aa74bcb45662cf5',1,'xb::xbTblMgr::GetDbfPtr(const xbString &sTblAlias) const'],['../classxb_1_1xbTblMgr.html#a801dfecf7fc216954b4197b2c31b25d6',1,'xb::xbTblMgr::GetDbfPtr(xbInt16 sItemNo) const']]],
+ ['getdbfstatus_9',['GetDbfStatus',['../classxb_1_1xbDbf.html#ac1110d867ba297a52c8b0e83e88f05e6',1,'xb::xbDbf']]],
+ ['getdefaultautocommit_10',['GetDefaultAutoCommit',['../classxb_1_1xbSsv.html#a6982f973e81587b04916f4509746aaf5',1,'xb::xbSsv']]],
+ ['getdefaultdateformat_11',['GetDefaultDateFormat',['../classxb_1_1xbSsv.html#a6fbb9c3a550ab0b3378f9586a57791d2',1,'xb::xbSsv']]],
['getdirectory_12',['GetDirectory',['../classxb_1_1xbFile.html#acd0fb2166b2bff7e8a1cf65a7bc8be1e',1,'xb::xbFile']]],
['getdoublefield_13',['GetDoubleField',['../classxb_1_1xbDbf.html#a4556041a7ff2f6b6f986729901c11f08',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &dFieldValue) const'],['../classxb_1_1xbDbf.html#a2370b5e736931441a5968649291b9ef4',1,'xb::xbDbf::GetDoubleField(xbInt16 FieldNo, xbDouble &dFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a6e6774df0f2d7733f4b25a9989596d95',1,'xb::xbDbf::GetDoubleField(const xbString &sFieldName, xbDouble &dFieldValue) const']]],
['getendiantype_14',['GetEndianType',['../classxb_1_1xbSsv.html#a49cd162f066eef2b829ba7c9f6620243',1,'xb::xbSsv']]],
- ['geterrormessage_15',['GetErrorMessage',['../classxb_1_1xbSsv.html#a56961d2a67b8e7470098626ac4dac7e4',1,'xb::xbSsv']]],
- ['getfield_16',['GetField',['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &sFieldValue) const'],['../classxb_1_1xbDbf.html#a9a0fcf7e2040ab483e3807927833cb26',1,'xb::xbDbf::GetField(const xbString &sFieldName, xbString &sFieldValue) const']]],
- ['getfieldcnt_17',['GetFieldCnt',['../classxb_1_1xbDbf.html#add27d8ef555a13b336b8c804165dc15e',1,'xb::xbDbf']]],
- ['getfielddecimal_18',['GetFieldDecimal',['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &sFieldName, xbInt16 &iFieldDecimal) const'],['../classxb_1_1xbDbf.html#abcb4defad2e1b6e67f63cc60737ad840',1,'xb::xbDbf::GetFieldDecimal(xbInt16 iFieldNo, xbInt16 &iFieldDecimal) const']]],
- ['getfieldlen_19',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &sFieldName, xbInt16 &iFieldLen) const']]],
- ['getfieldname_20',['GetFieldName',['../classxb_1_1xbDbf.html#a5e3e4368bfba1724c016b8859023e34c',1,'xb::xbDbf']]],
- ['getfieldno_21',['GetFieldNo',['../classxb_1_1xbDbf.html#aed9113b5095c6df1b9c854cbd0d8047b',1,'xb::xbDbf::GetFieldNo(const xbString &sFieldName, xbInt16 &iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &sFieldName) const']]],
- ['getfieldtype_22',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &sFieldName, char &cFieldType) const']]],
- ['getfiledirpart_23',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &sCompleteFileNameIn, xbString &sFileDirPartOut) const']]],
- ['getfileextpart_24',['GetFileExtPart',['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &sFileExtPartOut) const'],['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &sCompleteFileNameIn, xbString &sFileExtPartOut) const']]],
- ['getfilemtime_25',['GetFileMtime',['../classxb_1_1xbFile.html#a02df78f4c90313243f508fc56b95aba8',1,'xb::xbFile']]],
- ['getfilename_26',['GetFileName',['../classxb_1_1xbFile.html#ac95cb882ccbcdedc9a233c6ad9fed07a',1,'xb::xbFile']]],
- ['getfilenamepart_27',['GetFileNamePart',['../classxb_1_1xbFile.html#a81422b3dd52763d2cc6c77237ec9af0a',1,'xb::xbFile::GetFileNamePart(xbString &sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &sCompleteFileNameIn, xbString &sFileNamePartOut) const']]],
- ['getfilesize_28',['GetFileSize',['../classxb_1_1xbFile.html#a50b63c39e49d44e52078038027b24cc5',1,'xb::xbFile']]],
- ['getfiletype_29',['GetFileType',['../classxb_1_1xbFile.html#a5548236d38d43b89ae29b9a015b1f678',1,'xb::xbFile']]],
- ['getfirstrecord_30',['GetFirstRecord',['../classxb_1_1xbDbf.html#a6fc5b8a3e2f177d5ceaf9d975cbb5226',1,'xb::xbDbf::GetFirstRecord()'],['../classxb_1_1xbDbf.html#acb78991e8435edd36318c653cb977c1a',1,'xb::xbDbf::GetFirstRecord(xbInt16 iOption)']]],
- ['getfloatfield_31',['GetFloatField',['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &fFieldValue) const'],['../classxb_1_1xbDbf.html#a81ef2f36f921d7ece066a592eb6393eb',1,'xb::xbDbf::GetFloatField(const xbString &sFieldName, xbFloat &fFieldValue) const']]],
- ['getfqfilename_32',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
- ['getfunctioninfo_33',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
- ['getlastpos_34',['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_35',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
- ['getlogdirectory_36',['GetLogDirectory',['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase']]],
- ['getlogfilename_37',['GetLogFileName',['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase']]],
- ['getlogfqfilename_38',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
- ['getlogicalfield_39',['GetLogicalField',['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &bFieldData) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &sFieldName, xbBool &bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &sFieldName, xbString &sFieldData) const'],['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &sFieldData) const']]],
- ['getlogstatus_40',['GetLogStatus',['../classxb_1_1xbXBase.html#ade34cd72c2a7e70fb55429a8a6f6c028',1,'xb::xbXBase']]],
- ['getlongfield_41',['GetLongField',['../classxb_1_1xbDbf.html#abe525c0820640e0a9e169d0b7913cfa1',1,'xb::xbDbf::GetLongField(xbInt16 iFieldNo, xbInt32 &lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &sFieldName, xbInt32 &lFieldValue) const']]],
- ['getmultiuser_42',['GetMultiUser',['../classxb_1_1xbSsv.html#abd58031c5f1c3766c24d47a82e6fd9c5',1,'xb::xbSsv']]],
- ['getnextrecord_43',['GetNextRecord',['../classxb_1_1xbDbf.html#ab896fe3b734f556de578d30f92b18fe2',1,'xb::xbDbf::GetNextRecord()'],['../classxb_1_1xbDbf.html#a3191428a7a92d9107d8d42448884f2ac',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#a18fdcb4ab15b36cd47fa6f6f7a540d1a',1,'xb::xbDbf::GetNextRecord(xbInt16 iOption, xbUInt32 ulStartRec)']]],
- ['getnextsqlcmd_44',['GetNextSqlCmd',['../xb__execsql_8cpp.html#af888ba5e7e94d92c2165362b87f1ea0e',1,'xb_execsql.cpp']]],
- ['getopenmode_45',['GetOpenMode',['../classxb_1_1xbFile.html#a3c500dc9dac22c49496e4b29386b2dd3',1,'xb::xbFile']]],
- ['getopentablecount_46',['GetOpenTableCount',['../classxb_1_1xbTblMgr.html#ad0d2d4adabc0dc0e761cfdee63c84069',1,'xb::xbTblMgr']]],
- ['getpathseparator_47',['GetPathSeparator',['../classxb_1_1xbString.html#af8b8b808cf43cd352321b43f500142db',1,'xb::xbString']]],
- ['getprevrecord_48',['GetPrevRecord',['../classxb_1_1xbDbf.html#a7eadc7b08d73003802b90584f7b33387',1,'xb::xbDbf::GetPrevRecord(xbInt16 iOption)'],['../classxb_1_1xbDbf.html#ab3d248e5221b4f0809897cd43af17a1e',1,'xb::xbDbf::GetPrevRecord()']]],
- ['getrawfield_49',['GetRawField',['../classxb_1_1xbDbf.html#aabd146c0e1054ab905ec96aedd84b02e',1,'xb::xbDbf']]],
- ['getrecord_50',['GetRecord',['../classxb_1_1xbDbf.html#a26fba086b07caeab95066bf1c8d25161',1,'xb::xbDbf']]],
- ['getrecordbuf_51',['GetRecordBuf',['../classxb_1_1xbDbf.html#aa3e38c4057d726a28a27d07a1610d124',1,'xb::xbDbf']]],
- ['getrecordcnt_52',['GetRecordCnt',['../classxb_1_1xbDbf.html#ac196ad55335e1f4789d698748434dc89',1,'xb::xbDbf']]],
- ['getrecordcount_53',['GetRecordCount',['../classxb_1_1xbDbf.html#a0aaa06d6028e75efc6b5131f7356ecce',1,'xb::xbDbf']]],
- ['getrecordlen_54',['GetRecordLen',['../classxb_1_1xbDbf.html#ab50d76c6e29e81e347a6feb04c2f62bb',1,'xb::xbDbf']]],
- ['getsharemode_55',['GetShareMode',['../classxb_1_1xbFile.html#a9b63e05b77f477ff6109ff7b9432c1b6',1,'xb::xbFile']]],
- ['getsize_56',['GetSize',['../classxb_1_1xbString.html#a6c33e73659f8e98819289d2661c7271c',1,'xb::xbString']]],
- ['gettblalias_57',['GetTblAlias',['../classxb_1_1xbDbf.html#a27758a325c097f204247908b65ba7fbd',1,'xb::xbDbf']]],
- ['gettbllistentry_58',['GetTblListEntry',['../classxb_1_1xbTblMgr.html#acbf148ddba4297021cfb980a161ebef9',1,'xb::xbTblMgr']]],
- ['getulongfield_59',['GetULongField',['../classxb_1_1xbDbf.html#a67e3a050f9090edf69eee75aef7f5d83',1,'xb::xbDbf::GetULongField(xbInt16 iFieldNo, xbUInt32 &lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &sFieldName, xbUInt32 &lFieldValue) const']]],
- ['getversion_60',['GetVersion',['../classxb_1_1xbDbf.html#a49212a9eb17f7fa9f303e08d5fc50fc6',1,'xb::xbDbf']]],
- ['getxbasefiletypebyte_61',['GetXbaseFileTypeByte',['../classxb_1_1xbFile.html#aaf2e697751a0beff41432a66bb83fb5e',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, xbInt16 &iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, unsigned char &cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, unsigned char &cFileTypeByte, xbInt16 &iVersion)']]],
- ['getxbaseptr_62',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
+ ['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 &sFieldName, xbString &sFieldValue) const'],['../classxb_1_1xbDbf.html#ad245a26eb8b79610c9ae7bab19e05513',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#ac81f078f3c932f0da60ad1fbdd848d3e',1,'xb::xbDbf::GetField(xbInt16 iFieldNo, xbString &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 &iFieldDecimal) const'],['../classxb_1_1xbDbf.html#a607f774fcd6dc0b9913d7a7801b60db2',1,'xb::xbDbf::GetFieldDecimal(const xbString &sFieldName, xbInt16 &iFieldDecimal) const']]],
+ ['getfieldlen_20',['GetFieldLen',['../classxb_1_1xbDbf.html#adda4302b58cc6109b048f19d9b68bbd4',1,'xb::xbDbf::GetFieldLen(xbInt16 iFieldNo, xbInt16 &iFieldLen) const'],['../classxb_1_1xbDbf.html#acf06dbccdba1a4bcd90fa0bea6cca59b',1,'xb::xbDbf::GetFieldLen(const xbString &sFieldName, xbInt16 &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 &sFieldName, xbInt16 &iFieldNo) const'],['../classxb_1_1xbDbf.html#aad9029e63909aeb77d8473256d88bea8',1,'xb::xbDbf::GetFieldNo(const xbString &sFieldName) const']]],
+ ['getfieldtype_23',['GetFieldType',['../classxb_1_1xbDbf.html#a5143973e4f165651152aa13c8fd45f84',1,'xb::xbDbf::GetFieldType(xbInt16 iFieldNo, char &cFieldType) const'],['../classxb_1_1xbDbf.html#a181db879f1a75f93a34c03513a0b2fea',1,'xb::xbDbf::GetFieldType(const xbString &sFieldName, char &cFieldType) const']]],
+ ['getfiledirpart_24',['GetFileDirPart',['../classxb_1_1xbFile.html#a60c53998e3d1b694134b20a87bc9bf5a',1,'xb::xbFile::GetFileDirPart(xbString &sFileDirPartOut) const'],['../classxb_1_1xbFile.html#af5127c92892816e9bbc5c19653c4147a',1,'xb::xbFile::GetFileDirPart(const xbString &sCompleteFileNameIn, xbString &sFileDirPartOut) const']]],
+ ['getfileextpart_25',['GetFileExtPart',['../classxb_1_1xbFile.html#a57a9222e5cbb51019d4eeb2c3ac89fa2',1,'xb::xbFile::GetFileExtPart(xbString &sFileExtPartOut) const'],['../classxb_1_1xbFile.html#ab289b6ffe955321160c1f90220c22e25',1,'xb::xbFile::GetFileExtPart(const xbString &sCompleteFileNameIn, xbString &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 &sFileNamePartOut) const'],['../classxb_1_1xbFile.html#a6110763c5ae996b72c7a62c15bdecc73',1,'xb::xbFile::GetFileNamePart(const xbString &sCompleteFileNameIn, xbString &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 &sFieldName, xbFloat &fFieldValue) const'],['../classxb_1_1xbDbf.html#a3443f646038ced14425f067a59c0f2da',1,'xb::xbDbf::GetFloatField(xbInt16 iFieldNo, xbFloat &fFieldValue) const']]],
+ ['getfqfilename_33',['GetFqFileName',['../classxb_1_1xbFile.html#a31b4e641f93206ba23e2a5a27491dcd4',1,'xb::xbFile']]],
+ ['getfunctioninfo_34',['GetFunctionInfo',['../classxb_1_1xbXBase.html#ae52e53340593b4253936c1372ec15ee1',1,'xb::xbXBase']]],
+ ['getheaderlen_35',['GetHeaderLen',['../classxb_1_1xbDbf.html#ad56be2756b7a9f8318d9ba5cf215dafb',1,'xb::xbDbf']]],
+ ['gethomedir_36',['GetHomeDir',['../classxb_1_1xbSsv.html#abc9c06c95d71fbad8294e1ae8862cea9',1,'xb::xbSsv']]],
+ ['getlastpos_37',['GetLastPos',['../classxb_1_1xbString.html#ac7698665f44413a5e99a5b5bc573c6df',1,'xb::xbString::GetLastPos(char c) const'],['../classxb_1_1xbString.html#a1c55587904fe7e534290559d0ecb8646',1,'xb::xbString::GetLastPos(const char *s) const']]],
+ ['getlastrecord_38',['GetLastRecord',['../classxb_1_1xbDbf.html#a49e667f9c8ee55c36444702663fc5964',1,'xb::xbDbf::GetLastRecord()'],['../classxb_1_1xbDbf.html#a8ccfa2291417412b6894940d1b92f9a6',1,'xb::xbDbf::GetLastRecord(xbInt16 iOption)']]],
+ ['getlogdirectory_39',['GetLogDirectory',['../classxb_1_1xbSsv.html#a4822315bded3969b59aeeb683c373051',1,'xb::xbSsv::GetLogDirectory()'],['../classxb_1_1xbXBase.html#a51d49b4d699740194b28c6ec0d0ee07b',1,'xb::xbXBase::GetLogDirectory()']]],
+ ['getlogfilename_40',['GetLogFileName',['../classxb_1_1xbSsv.html#afaef09435be73b3111f5edbd7091d861',1,'xb::xbSsv::GetLogFileName()'],['../classxb_1_1xbXBase.html#ac0744edf9e4aa959d8cf2daa874376af',1,'xb::xbXBase::GetLogFileName() const']]],
+ ['getlogfqfilename_41',['GetLogFqFileName',['../classxb_1_1xbXBase.html#ab5d63cd7d9137eba8a1d4d9c3df522b7',1,'xb::xbXBase']]],
+ ['getlogicalfield_42',['GetLogicalField',['../classxb_1_1xbDbf.html#a3254f091fc4a1404abed3dd2bcdd6ce6',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbString &sFieldData) const'],['../classxb_1_1xbDbf.html#a9cd6819bfd932ff8507e54d9cb9a624e',1,'xb::xbDbf::GetLogicalField(const xbString &sFieldName, xbString &sFieldData) const'],['../classxb_1_1xbDbf.html#aaf615ddcf08f8cd14efc713c2a8d7ae1',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &bFieldData) const'],['../classxb_1_1xbDbf.html#ab28feef20c988b0a6f1c1911a45377b0',1,'xb::xbDbf::GetLogicalField(xbInt16 iFieldNo, xbBool &bFieldData, xbInt16 iRecBufSw) const'],['../classxb_1_1xbDbf.html#a943cea7fde1b06c1a05184193eff8d2d',1,'xb::xbDbf::GetLogicalField(const xbString &sFieldName, xbBool &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 &lFieldValue) const'],['../classxb_1_1xbDbf.html#a7b8ef75b17941beac17e50e969b2d3db',1,'xb::xbDbf::GetLongField(const xbString &sFieldName, xbInt32 &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 &lFieldValue) const'],['../classxb_1_1xbDbf.html#a039eb02418ec4ca862adbc0f95b9cbec',1,'xb::xbDbf::GetULongField(const xbString &sFieldName, xbUInt32 &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 &sFileName, xbInt16 &iVersion)'],['../classxb_1_1xbFile.html#a7af337808919680b90710ad5e8a99232',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, unsigned char &cFileTypeByte)'],['../classxb_1_1xbFile.html#a78aebdd21d3de46a450d5f835e3027f6',1,'xb::xbFile::GetXbaseFileTypeByte(const xbString &sFileName, unsigned char &cFileTypeByte, xbInt16 &iVersion)']]],
+ ['getxbaseptr_65',['GetXbasePtr',['../classxb_1_1xbDbf.html#ab21ec23c076b0c9affdc0f6672bd133f',1,'xb::xbDbf']]]
];
diff --git a/docs/doxygen/html/search/functions_b.js b/docs/doxygen/html/search/functions_b.js
index 7595e8a..4debf05 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__dbfutil_8cpp.html#a57e6ea63b6f0a962708db29159629a6d',1,'main(int, char **): xb_dbfutil.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL): xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_tblmgr.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_uda.cpp'],['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_xbase.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_copydbf.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_lock.cpp'],['../xb__deletall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_dumpdbt.cpp'],['../xb__dumphdr_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_dumphdr.cpp'],['../xb__dumpix_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_dumpix.cpp'],['../xb__dumprecs_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_execsql.cpp'],['../xb__pack_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_undelall.cpp'],['../xb__zap_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_zap.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_linklist.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_date.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_ex_sql.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_bcd.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_expression.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_file.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_filter.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_funcs.cpp']]],
+ ['main_0',['main',['../xb__test__xbase_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_xbase.cpp'],['../xb__test__funcs_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_funcs.cpp'],['../xb__test__linklist_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_linklist.cpp'],['../xb__test__lock_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_lock.cpp'],['../xb__test__lock2_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_lock2.cpp'],['../xb__test__log_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_log.cpp'],['../xb__test__mdx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_mdx.cpp'],['../xb__test__ndx_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_ndx.cpp'],['../xb__test__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_sql.cpp'],['../xb__test__string_8cpp.html#aabf71bc9adb6daf457b2ea8879ae537f',1,'main(int argCnt, char **av=NULL): xb_test_string.cpp'],['../xb__test__tblmgr_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_tblmgr.cpp'],['../xb__test__uda_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_uda.cpp'],['../xb__test__filter_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_filter.cpp'],['../xb__cfg__check_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_cfg_check.cpp'],['../xb__copydbf_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_dumprecs.cpp'],['../xb__execsql_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_execsql.cpp'],['../xb__pack_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): xb_undelall.cpp'],['../xb__test__file_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_file.cpp'],['../xb__ex__date_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_date.cpp'],['../xb__ex__expression_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_expression.cpp'],['../xb__ex__sql_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_ex_sql.cpp'],['../xb__ex__ssv_8cpp.html#a0c99d968a34e803d378692bde2e3f18f',1,'main(int ac, char **av): xb_ex_ssv.cpp'],['../xb__ex__string_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_string.cpp'],['../xb__ex__v3__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v3_create_dbf.cpp'],['../xb__ex__v3__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v3_upd_dbf.cpp'],['../xb__ex__v4__create__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v4_create_dbf.cpp'],['../xb__ex__v4__upd__dbf_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): xb_ex_v4_upd_dbf.cpp'],['../xb__test__bcd_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_bcd.cpp'],['../xb__test__blockread_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_blockread.cpp'],['../xb__test__date_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_date.cpp'],['../xb__test__dbf__v3__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v3_memos.cpp'],['../xb__test__dbf__v3__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v3_nomemos.cpp'],['../xb__test__dbf__v4__memos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v4_memos.cpp'],['../xb__test__dbf__v4__nomemos_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_dbf_v4_nomemos.cpp'],['../xb__test__expnode_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_expnode.cpp'],['../xb__test__expression_8cpp.html#a1470527971db41f828c26074cde7e15a',1,'main(int argCnt, char **av): xb_test_expression.cpp']]],
['memofieldsexist_1',['MemoFieldsExist',['../classxb_1_1xbDbf.html#a013dc8c51fc1aa988de39cf3da6da950',1,'xb::xbDbf']]],
['mid_2',['Mid',['../classxb_1_1xbString.html#a0f9eefc836b24c4ee7c5a316c5d812b7',1,'xb::xbString']]],
['monthof_3',['MonthOf',['../classxb_1_1xbDate.html#a08bd84c67e1119d8c5c1748cd89d092e',1,'xb::xbDate']]]
diff --git a/docs/doxygen/html/search/functions_e.js b/docs/doxygen/html/search/functions_e.js
index 99045b4..1b907f5 100644
--- a/docs/doxygen/html/search/functions_e.js
+++ b/docs/doxygen/html/search/functions_e.js
@@ -3,14 +3,17 @@ var searchData=
['pack_0',['Pack',['../classxb_1_1xbDbf.html#a93bb14ad0451355bfa3379128120988a',1,'xb::xbDbf::Pack(xbUInt32 &ulDeletedRecCnt)'],['../classxb_1_1xbDbf.html#a8a52bf3ef2123c0d17e6b1f67bf0dc55',1,'xb::xbDbf::Pack()']]],
['padleft_1',['PadLeft',['../classxb_1_1xbString.html#a6a09cfed22066b0c72432f26960f9e7b',1,'xb::xbString']]],
['padright_2',['PadRight',['../classxb_1_1xbString.html#aba13f0c77eb6c4a22996039569fad284',1,'xb::xbString']]],
- ['pos_3',['Pos',['../classxb_1_1xbString.html#a3baf59d15099589ff631995f129e582b',1,'xb::xbString::Pos(char c) const'],['../classxb_1_1xbString.html#a8705d7277b72f5aa98021e84438914da',1,'xb::xbString::Pos(const char *s) const']]],
- ['putat_4',['PutAt',['../classxb_1_1xbString.html#a1bae6fa8f608261f6e889616482f6e39',1,'xb::xbString']]],
- ['putdatefield_5',['PutDateField',['../classxb_1_1xbDbf.html#a873f04af528a9d81e6a367a59d998ec5',1,'xb::xbDbf::PutDateField(xbInt16 iFieldNo, const xbDate &dt)'],['../classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9',1,'xb::xbDbf::PutDateField(const xbString &sFieldName, const xbDate &dt)']]],
- ['putdoublefield_6',['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 &FieldName, xbDouble dFieldValue)']]],
- ['putfield_7',['PutField',['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &sFieldData)'],['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &sFieldName, const xbString &sFieldData)']]],
- ['putfloatfield_8',['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 &sFieldName, xbFloat fFieldValue)']]],
- ['putlogicalfield_9',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &sFieldName, const xbString &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 &sFieldName, xbBool bFieldData)']]],
- ['putlongfield_10',['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 &sFieldNo, xbInt32 lFieldValue)']]],
- ['putrecord_11',['PutRecord',['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()'],['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)']]],
- ['putulongfield_12',['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 &sFieldNo, xbUInt32 lFieldValue)']]]
+ ['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(): xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a9c55a055e1cd4249c7f47e19dc7ac564',1,'PrintHelp(): xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_dumprecs.cpp'],['../xb__pack_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_pack.cpp'],['../xb__tblinfo_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#ae964ff8411b4fdcaf65cb5529aea4bef',1,'PrintHelp(): xb_undelall.cpp']]],
+ ['printresult_5',['PrintResult',['../xb__ex__expression_8cpp.html#a3234afc912211aec54c10d363d28cbda',1,'xb_ex_expression.cpp']]],
+ ['printversion_6',['PrintVersion',['../xb__copydbf_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_copydbf.cpp'],['../xb__dbfutil_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_dbfutil.cpp'],['../xb__deletall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_deletall.cpp'],['../xb__dumpdbt_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_dumpdbt.cpp'],['../xb__dumprecs_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_dumprecs.cpp'],['../xb__pack_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_pack.cpp'],['../xb__tblinfo_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): xb_tblinfo.cpp'],['../xb__undelall_8cpp.html#a1fae5968f70747445d63f63065fb7ef3',1,'PrintVersion(): 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 &dt)'],['../classxb_1_1xbDbf.html#a571b36b3a940b1a16d5e834f329b33b9',1,'xb::xbDbf::PutDateField(const xbString &sFieldName, const xbDate &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 &FieldName, xbDouble dFieldValue)']]],
+ ['putfield_10',['PutField',['../classxb_1_1xbDbf.html#a7862215dd2f83a1c488e539cd1f9aec0',1,'xb::xbDbf::PutField(const xbString &sFieldName, const xbString &sFieldData)'],['../classxb_1_1xbDbf.html#a142b0c0dc904917f3c68c5572c1237b5',1,'xb::xbDbf::PutField(xbInt16 iFieldNo, const xbString &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 &sFieldName, xbFloat fFieldValue)']]],
+ ['putlogicalfield_12',['PutLogicalField',['../classxb_1_1xbDbf.html#ab39ac4269ac63bc7ea4f638733bb17f0',1,'xb::xbDbf::PutLogicalField(xbInt16 iFieldNo, const xbString &sFieldData)'],['../classxb_1_1xbDbf.html#a507e400ca6526a9e0391cf06dd6a014e',1,'xb::xbDbf::PutLogicalField(const xbString &sFieldName, const xbString &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 &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 &sFieldNo, xbInt32 lFieldValue)']]],
+ ['putrecord_14',['PutRecord',['../classxb_1_1xbDbf.html#a3c36a5ffbc7067a1abbcb526dd3b981d',1,'xb::xbDbf::PutRecord()'],['../classxb_1_1xbDbf.html#aacbc7bac3ea0c502ee75b838f4f0fcbf',1,'xb::xbDbf::PutRecord(xbUInt32 ulRecNo)']]],
+ ['putulongfield_15',['PutULongField',['../classxb_1_1xbDbf.html#af5dec5c9ff903efffdb0490a44d296d2',1,'xb::xbDbf::PutULongField(xbInt16 iFieldNo, xbUInt32 lFieldValue)'],['../classxb_1_1xbDbf.html#ac62cb97c4e678c83f41788b1ae4d0381',1,'xb::xbDbf::PutULongField(const xbString &sFieldNo, xbUInt32 lFieldValue)']]]
];
diff --git a/docs/doxygen/html/search/searchdata.js b/docs/doxygen/html/search/searchdata.js
index cf012e6..0f7e3a8 100644
--- a/docs/doxygen/html/search/searchdata.js
+++ b/docs/doxygen/html/search/searchdata.js
@@ -5,7 +5,7 @@ var indexSectionsWithContent =
2: "x",
3: "tx",
4: "abcdefghijlmnoprstuvwxyz~",
- 5: "ceiprstux",
+ 5: "ceimprstux",
6: "x",
7: "ox",
8: "jlvx"
diff --git a/docs/doxygen/html/search/variables_3.js b/docs/doxygen/html/search/variables_3.js
index d024da4..7708e94 100644
--- a/docs/doxygen/html/search/variables_3.js
+++ b/docs/doxygen/html/search/variables_3.js
@@ -1,7 +1,5 @@
var searchData=
[
- ['pdbf_0',['pDbf',['../structxb_1_1xbTblList.html#a387d3f6bbf291a1fb96d276ed9bb96b6',1,'xb::xbTblList']]],
- ['pnext_1',['pNext',['../structxb_1_1xbTblList.html#a3fd169fcf0fd4df927544e5342db583c',1,'xb::xbTblList']]],
- ['pstblalias_2',['psTblAlias',['../structxb_1_1xbTblList.html#ac87742c8a6b1cf2e7e35218e96966a05',1,'xb::xbTblList']]],
- ['pstblname_3',['psTblName',['../structxb_1_1xbTblList.html#a02c3b0c47fd104ef9758b375ecdcfd0f',1,'xb::xbTblList']]]
+ ['mydbfrec_0',['MyDbfRec',['../xb__test__blockread_8cpp.html#af68c3291a63fdf20ffa0e477460d148e',1,'xb_test_blockread.cpp']]],
+ ['myv4record_1',['MyV4Record',['../xb__ex__expression_8cpp.html#a2122b9562802e2fd799b20454000dc99',1,'xb_ex_expression.cpp']]]
];
diff --git a/docs/doxygen/html/search/variables_4.js b/docs/doxygen/html/search/variables_4.js
index 9dde579..946d73a 100644
--- a/docs/doxygen/html/search/variables_4.js
+++ b/docs/doxygen/html/search/variables_4.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_5.js b/docs/doxygen/html/search/variables_5.js
index f1b6b71..9dde579 100644
--- a/docs/doxygen/html/search/variables_5.js
+++ b/docs/doxygen/html/search/variables_5.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_6.js b/docs/doxygen/html/search/variables_6.js
index 2369f5c..f1b6b71 100644
--- a/docs/doxygen/html/search/variables_6.js
+++ b/docs/doxygen/html/search/variables_6.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_7.js b/docs/doxygen/html/search/variables_7.js
index 5eb7a13..2369f5c 100644
--- a/docs/doxygen/html/search/variables_7.js
+++ b/docs/doxygen/html/search/variables_7.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_8.js b/docs/doxygen/html/search/variables_8.js
index 8367676..5eb7a13 100644
--- a/docs/doxygen/html/search/variables_8.js
+++ b/docs/doxygen/html/search/variables_8.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_9.html b/docs/doxygen/html/search/variables_9.html
new file mode 100644
index 0000000..1aec773
--- /dev/null
+++ b/docs/doxygen/html/search/variables_9.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/doxygen/html/search/variables_9.js b/docs/doxygen/html/search/variables_9.js
new file mode 100644
index 0000000..8367676
--- /dev/null
+++ b/docs/doxygen/html/search/variables_9.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/structxb_1_1xbSchema.html b/docs/doxygen/html/structxb_1_1xbSchema.html
index a1611c3..4d314dd 100644
--- a/docs/doxygen/html/structxb_1_1xbSchema.html
+++ b/docs/doxygen/html/structxb_1_1xbSchema.html
@@ -168,7 +168,7 @@ Data Fields
The documentation for this struct was generated from the following file:
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbdbf.h
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdbf.h
diff --git a/docs/doxygen/html/structxb_1_1xbTblList.html b/docs/doxygen/html/structxb_1_1xbTblList.html
index 3842fb2..688538c 100644
--- a/docs/doxygen/html/structxb_1_1xbTblList.html
+++ b/docs/doxygen/html/structxb_1_1xbTblList.html
@@ -79,6 +79,8 @@ $(function() {
Data Fields
xbTblList * pNext
+xbString * psFqTblName
+
xbString * psTblName
xbString * psTblAlias
@@ -113,6 +115,20 @@ Data Fields
+
+
+
+◆ psFqTblName
+
+
+
+
+
+ xbString * xb::xbTblList::psFqTblName
+
+
+
+
@@ -144,7 +160,7 @@ Data Fields
The documentation for this struct was generated from the following file:
-/mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbtblmgr.h
+/mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbtblmgr.h
diff --git a/docs/doxygen/html/tstfuncs_8cpp.html b/docs/doxygen/html/tstfuncs_8cpp.html
index f9fb6f6..dbc72bf 100644
--- a/docs/doxygen/html/tstfuncs_8cpp.html
+++ b/docs/doxygen/html/tstfuncs_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/tstfuncs.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/tstfuncs.cpp File Reference
diff --git a/docs/doxygen/html/xb__cfg__check_8cpp.html b/docs/doxygen/html/xb__cfg__check_8cpp.html
index d69fc0d..124dfaf 100644
--- a/docs/doxygen/html/xb__cfg__check_8cpp.html
+++ b/docs/doxygen/html/xb__cfg__check_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_cfg_check.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_cfg_check.cpp File Reference
diff --git a/docs/doxygen/html/xb__copydbf_8cpp.html b/docs/doxygen/html/xb__copydbf_8cpp.html
index e9e9cac..b79ed7a 100644
--- a/docs/doxygen/html/xb__copydbf_8cpp.html
+++ b/docs/doxygen/html/xb__copydbf_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_copydbf.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_copydbf.cpp File Reference
@@ -76,12 +76,16 @@ $(function() {
-
-◆ main()
+
+◆ main()
@@ -90,13 +94,13 @@ Functions
int main
(
int
- ac ,
+ argc ,
- char **
- av
+ char *
+ argv []
@@ -106,6 +110,40 @@ Functions
+
+
+
+◆ PrintHelp()
+
+
+
+
+
+ void PrintHelp
+ (
+ )
+
+
+
+
+
+
+
+
+◆ PrintVersion()
+
+
+
+
+
+ void PrintVersion
+ (
+ )
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__dbfutil_8cpp.html b/docs/doxygen/html/xb__dbfutil_8cpp.html
index e1e9c21..3adab86 100644
--- a/docs/doxygen/html/xb__dbfutil_8cpp.html
+++ b/docs/doxygen/html/xb__dbfutil_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_dbfutil.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_dbfutil.cpp File Reference
@@ -76,27 +76,31 @@ $(function() {
-
-◆ main()
+
+◆ main()
- DOXYOFF int main
+ int main
(
int
- ,
+ argc ,
- char **
-
+ char *
+ argv []
@@ -106,6 +110,40 @@ Functions
+
+
+
+◆ PrintHelp()
+
+
+
+
+
+ DOXYOFF void PrintHelp
+ (
+ )
+
+
+
+
+
+
+
+
+◆ PrintVersion()
+
+
+
+
+
+ void PrintVersion
+ (
+ )
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__deletall_8cpp.html b/docs/doxygen/html/xb__deletall_8cpp.html
index 0878f48..d643d2e 100644
--- a/docs/doxygen/html/xb__deletall_8cpp.html
+++ b/docs/doxygen/html/xb__deletall_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_deletall.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_deletall.cpp File Reference
@@ -76,12 +76,16 @@ $(function() {
-
-◆ main()
+
+◆ main()
@@ -90,13 +94,13 @@ Functions
int main
(
int
- ac ,
+ argc ,
- char **
- av
+ char *
+ argv []
@@ -106,6 +110,40 @@ Functions
+
+
+
+◆ PrintHelp()
+
+
+
+
+
+ void PrintHelp
+ (
+ )
+
+
+
+
+
+
+
+
+◆ PrintVersion()
+
+
+
+
+
+ void PrintVersion
+ (
+ )
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__dumpdbt_8cpp.html b/docs/doxygen/html/xb__dumpdbt_8cpp.html
index a52b092..d664d5f 100644
--- a/docs/doxygen/html/xb__dumpdbt_8cpp.html
+++ b/docs/doxygen/html/xb__dumpdbt_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_dumpdbt.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_dumpdbt.cpp File Reference
@@ -76,12 +76,16 @@ $(function() {
-
-◆ main()
+
+◆ main()
@@ -90,13 +94,13 @@ Functions
int main
(
int
- ac ,
+ argc ,
- char **
- av
+ char *
+ argv []
@@ -106,6 +110,40 @@ Functions
+
+
+
+◆ PrintHelp()
+
+
+
+
+
+ void PrintHelp
+ (
+ )
+
+
+
+
+
+
+
+
+◆ PrintVersion()
+
+
+
+
+
+ void PrintVersion
+ (
+ )
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__dumphdr_8cpp.html b/docs/doxygen/html/xb__dumphdr_8cpp.html
index 696a816..39b4a89 100644
--- a/docs/doxygen/html/xb__dumphdr_8cpp.html
+++ b/docs/doxygen/html/xb__dumphdr_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_dumphdr.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.1/src/utils/xb_dumphdr.cpp File Reference
diff --git a/docs/doxygen/html/xb__dumpix_8cpp.html b/docs/doxygen/html/xb__dumpix_8cpp.html
index af02d57..7e42d1e 100644
--- a/docs/doxygen/html/xb__dumpix_8cpp.html
+++ b/docs/doxygen/html/xb__dumpix_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_dumpix.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.1/src/utils/xb_dumpix.cpp File Reference
diff --git a/docs/doxygen/html/xb__dumprecs_8cpp.html b/docs/doxygen/html/xb__dumprecs_8cpp.html
index 91de180..e68256e 100644
--- a/docs/doxygen/html/xb__dumprecs_8cpp.html
+++ b/docs/doxygen/html/xb__dumprecs_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_dumprecs.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_dumprecs.cpp File Reference
@@ -76,12 +76,16 @@ $(function() {
-
-◆ main()
+
+◆ main()
@@ -90,13 +94,13 @@ Functions
int main
(
int
- ac ,
+ argc ,
- char **
- av
+ char *
+ argv []
@@ -106,6 +110,40 @@ Functions
+
+
+
+◆ PrintHelp()
+
+
+
+
+
+ void PrintHelp
+ (
+ )
+
+
+
+
+
+
+
+
+◆ PrintVersion()
+
+
+
+
+
+ void PrintVersion
+ (
+ )
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__ex__date_8cpp.html b/docs/doxygen/html/xb__ex__date_8cpp.html
index 7479bb2..24429e7 100644
--- a/docs/doxygen/html/xb__ex__date_8cpp.html
+++ b/docs/doxygen/html/xb__ex__date_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/examples/xb_ex_date.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_date.cpp File Reference
diff --git a/docs/doxygen/html/xb__ex__expression_8cpp.html b/docs/doxygen/html/xb__ex__expression_8cpp.html
new file mode 100644
index 0000000..9ef36af
--- /dev/null
+++ b/docs/doxygen/html/xb__ex__expression_8cpp.html
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_expression.cpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xbase64 4.0.1
+
+ C++ Library for handling Xbase (DBF) format type files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
◆ main()
+
+
+
+
+
+ int main
+ (
+ )
+
+
+
+
+
+
+
+
+
◆ PrintResult()
+
+
+
+
+
+ void PrintResult
+ (
+ xbString *
+ sExpression ,
+
+
+
+
+ xbExp *
+ exp
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
◆ MyV4Record
+
+
+
+
Initial value: =
+
{
+
+
+
+
+
{ "" ,0,0,0 }
+
}
+
#define XB_CHAR_FLD
Definition: xbdbf.h:29
+
#define XB_DATE_FLD
Definition: xbdbf.h:32
+
#define XB_NUMERIC_FLD
Definition: xbdbf.h:31
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__ex__sql_8cpp.html b/docs/doxygen/html/xb__ex__sql_8cpp.html
index b81c3e9..edb601b 100644
--- a/docs/doxygen/html/xb__ex__sql_8cpp.html
+++ b/docs/doxygen/html/xb__ex__sql_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/examples/xb_ex_sql.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_sql.cpp File Reference
diff --git a/docs/doxygen/html/xb__ex__ssv_8cpp.html b/docs/doxygen/html/xb__ex__ssv_8cpp.html
new file mode 100644
index 0000000..dcf2628
--- /dev/null
+++ b/docs/doxygen/html/xb__ex__ssv_8cpp.html
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_ssv.cpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xbase64 4.0.1
+
+ C++ Library for handling Xbase (DBF) format type files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+int main (int ac, char **av)
+
+
+
+
+
◆ main()
+
+
+
+
+
+ int main
+ (
+ int
+ ac ,
+
+
+
+
+ char **
+ av
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__ex__string_8cpp.html b/docs/doxygen/html/xb__ex__string_8cpp.html
index 2b3a639..9daa57a 100644
--- a/docs/doxygen/html/xb__ex__string_8cpp.html
+++ b/docs/doxygen/html/xb__ex__string_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/examples/xb_ex_string.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_string.cpp File Reference
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 bbdaec8..a32c39b 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 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/examples/xb_ex_v3_create_dbf.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_v3_create_dbf.cpp File Reference
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 189151c..b16f9cc 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 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/examples/xb_ex_v3_upd_dbf.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_v3_upd_dbf.cpp File Reference
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 473e312..243b739 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 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/examples/xb_ex_v4_create_dbf.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_v4_create_dbf.cpp File Reference
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 326dbd4..ff4ca67 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 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/examples/xb_ex_v4_upd_dbf.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/examples/xb_ex_v4_upd_dbf.cpp File Reference
diff --git a/docs/doxygen/html/xb__execsql_8cpp.html b/docs/doxygen/html/xb__execsql_8cpp.html
index 1c7e737..b00df44 100644
--- a/docs/doxygen/html/xb__execsql_8cpp.html
+++ b/docs/doxygen/html/xb__execsql_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_execsql.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_execsql.cpp File Reference
diff --git a/docs/doxygen/html/xb__pack_8cpp.html b/docs/doxygen/html/xb__pack_8cpp.html
index 3a2e728..e007f38 100644
--- a/docs/doxygen/html/xb__pack_8cpp.html
+++ b/docs/doxygen/html/xb__pack_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_pack.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_pack.cpp File Reference
@@ -76,12 +76,16 @@ $(function() {
-
-◆ main()
+
+◆ main()
@@ -90,13 +94,13 @@ Functions
int main
(
int
- ac ,
+ argc ,
- char **
- av
+ char *
+ argv []
@@ -106,6 +110,40 @@ Functions
+
+
+
+◆ PrintHelp()
+
+
+
+
+
+ void PrintHelp
+ (
+ )
+
+
+
+
+
+
+
+
+◆ PrintVersion()
+
+
+
+
+
+ void PrintVersion
+ (
+ )
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__tblinfo_8cpp.html b/docs/doxygen/html/xb__tblinfo_8cpp.html
index b464098..e01295b 100644
--- a/docs/doxygen/html/xb__tblinfo_8cpp.html
+++ b/docs/doxygen/html/xb__tblinfo_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_tblinfo.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_tblinfo.cpp File Reference
@@ -76,12 +76,16 @@ $(function() {
-
-◆ main()
+
+◆ main()
@@ -90,13 +94,13 @@ Functions
int main
(
int
- ac ,
+ argc ,
- char **
- av
+ char *
+ argv []
@@ -106,6 +110,40 @@ Functions
+
+
+
+◆ PrintHelp()
+
+
+
+
+
+ void PrintHelp
+ (
+ )
+
+
+
+
+
+
+
+
+◆ PrintVersion()
+
+
+
+
+
+ void PrintVersion
+ (
+ )
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__test__bcd_8cpp.html b/docs/doxygen/html/xb__test__bcd_8cpp.html
index 05a6e51..0de8fc2 100644
--- a/docs/doxygen/html/xb__test__bcd_8cpp.html
+++ b/docs/doxygen/html/xb__test__bcd_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_bcd.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_bcd.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__blockread_8cpp.html b/docs/doxygen/html/xb__test__blockread_8cpp.html
new file mode 100644
index 0000000..195746e
--- /dev/null
+++ b/docs/doxygen/html/xb__test__blockread_8cpp.html
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_blockread.cpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xbase64 4.0.1
+
+ C++ Library for handling Xbase (DBF) format type files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include "xbase.h "
+
#include "tstfuncs.cpp "
+
+
+int main (int argCnt, char **av)
+
+
+
+
+
◆ main()
+
+
+
+
+
+ int main
+ (
+ int
+ argCnt ,
+
+
+
+
+ char **
+ av
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
◆ MyDbfRec
+
+
+
+
Initial value: =
+
{
+
+
+
{ "" ,0,0,0 }
+
}
+
#define XB_CHAR_FLD
Definition: xbdbf.h:29
+
#define XB_NUMERIC_FLD
Definition: xbdbf.h:31
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__test__blockread__save_8cpp.html b/docs/doxygen/html/xb__test__blockread__save_8cpp.html
new file mode 100644
index 0000000..40885f8
--- /dev/null
+++ b/docs/doxygen/html/xb__test__blockread__save_8cpp.html
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.1/src/tests/xb_test_blockread_save.cpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xbase64 4.0.1
+
+ C++ Library for handling Xbase (DBF) format type files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include "xbase.h "
+
#include "tstfuncs.cpp "
+
+
+int main (int argCnt, char **av)
+
+
+
+
+
◆ main()
+
+
+
+
+
+ int main
+ (
+ int
+ argCnt ,
+
+
+
+
+ char **
+ av
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
◆ MyDbfRec
+
+
+
+
Initial value: =
+
{
+
+
+
{ "" ,0,0,0 }
+
}
+
#define XB_CHAR_FLD
Definition: xbdbf.h:29
+
#define XB_NUMERIC_FLD
Definition: xbdbf.h:31
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__test__date_8cpp.html b/docs/doxygen/html/xb__test__date_8cpp.html
index 31c0209..a6b3d97 100644
--- a/docs/doxygen/html/xb__test__date_8cpp.html
+++ b/docs/doxygen/html/xb__test__date_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_date.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_date.cpp File Reference
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 008e7ab..60eced6 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 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_dbf_v3_memos.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_dbf_v3_memos.cpp File Reference
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 7ef53c3..59c23e1 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 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_dbf_v3_nomemos.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_dbf_v3_nomemos.cpp File Reference
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 e4fd262..86e0b35 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 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_dbf_v4_memos.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_dbf_v4_memos.cpp File Reference
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 dfc126b..e9b853a 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 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_dbf_v4_nomemos.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_dbf_v4_nomemos.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__expnode_8cpp.html b/docs/doxygen/html/xb__test__expnode_8cpp.html
index ac3be1d..630ecdb 100644
--- a/docs/doxygen/html/xb__test__expnode_8cpp.html
+++ b/docs/doxygen/html/xb__test__expnode_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_expnode.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_expnode.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__expression_8cpp.html b/docs/doxygen/html/xb__test__expression_8cpp.html
index 8d33a91..6be59f2 100644
--- a/docs/doxygen/html/xb__test__expression_8cpp.html
+++ b/docs/doxygen/html/xb__test__expression_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_expression.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_expression.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__file_8cpp.html b/docs/doxygen/html/xb__test__file_8cpp.html
index 46db655..6a9b6b0 100644
--- a/docs/doxygen/html/xb__test__file_8cpp.html
+++ b/docs/doxygen/html/xb__test__file_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_file.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_file.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__filter_8cpp.html b/docs/doxygen/html/xb__test__filter_8cpp.html
index bafc24d..7176b10 100644
--- a/docs/doxygen/html/xb__test__filter_8cpp.html
+++ b/docs/doxygen/html/xb__test__filter_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_filter.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_filter.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__funcs_8cpp.html b/docs/doxygen/html/xb__test__funcs_8cpp.html
index 639d97e..fc28aec 100644
--- a/docs/doxygen/html/xb__test__funcs_8cpp.html
+++ b/docs/doxygen/html/xb__test__funcs_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_funcs.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_funcs.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__linklist_8cpp.html b/docs/doxygen/html/xb__test__linklist_8cpp.html
index 51d1df3..2d6be8e 100644
--- a/docs/doxygen/html/xb__test__linklist_8cpp.html
+++ b/docs/doxygen/html/xb__test__linklist_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_linklist.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_linklist.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__lock2_8cpp.html b/docs/doxygen/html/xb__test__lock2_8cpp.html
index ae965a9..54f9e90 100644
--- a/docs/doxygen/html/xb__test__lock2_8cpp.html
+++ b/docs/doxygen/html/xb__test__lock2_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_lock2.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_lock2.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__lock_8cpp.html b/docs/doxygen/html/xb__test__lock_8cpp.html
index 6d369bf..5d83846 100644
--- a/docs/doxygen/html/xb__test__lock_8cpp.html
+++ b/docs/doxygen/html/xb__test__lock_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_lock.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_lock.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__log_8cpp.html b/docs/doxygen/html/xb__test__log_8cpp.html
index 033fe18..b3115b6 100644
--- a/docs/doxygen/html/xb__test__log_8cpp.html
+++ b/docs/doxygen/html/xb__test__log_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_log.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_log.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__mdx_8cpp.html b/docs/doxygen/html/xb__test__mdx_8cpp.html
index c9176e4..1fb7381 100644
--- a/docs/doxygen/html/xb__test__mdx_8cpp.html
+++ b/docs/doxygen/html/xb__test__mdx_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_mdx.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_mdx.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__ndx_8cpp.html b/docs/doxygen/html/xb__test__ndx_8cpp.html
index eb9732d..78bcd99 100644
--- a/docs/doxygen/html/xb__test__ndx_8cpp.html
+++ b/docs/doxygen/html/xb__test__ndx_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_ndx.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_ndx.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__sql_8cpp.html b/docs/doxygen/html/xb__test__sql_8cpp.html
index 3305469..759da86 100644
--- a/docs/doxygen/html/xb__test__sql_8cpp.html
+++ b/docs/doxygen/html/xb__test__sql_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_sql.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_sql.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__string_8cpp.html b/docs/doxygen/html/xb__test__string_8cpp.html
index 6774b85..2a28164 100644
--- a/docs/doxygen/html/xb__test__string_8cpp.html
+++ b/docs/doxygen/html/xb__test__string_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_string.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_string.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__tblmgr_8cpp.html b/docs/doxygen/html/xb__test__tblmgr_8cpp.html
index 597f66c..df12fec 100644
--- a/docs/doxygen/html/xb__test__tblmgr_8cpp.html
+++ b/docs/doxygen/html/xb__test__tblmgr_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_tblmgr.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_tblmgr.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__uda_8cpp.html b/docs/doxygen/html/xb__test__uda_8cpp.html
index a46aeb2..bc917d6 100644
--- a/docs/doxygen/html/xb__test__uda_8cpp.html
+++ b/docs/doxygen/html/xb__test__uda_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_uda.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_uda.cpp File Reference
diff --git a/docs/doxygen/html/xb__test__xbase_8cpp.html b/docs/doxygen/html/xb__test__xbase_8cpp.html
index 71b36f5..ac33034 100644
--- a/docs/doxygen/html/xb__test__xbase_8cpp.html
+++ b/docs/doxygen/html/xb__test__xbase_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/tests/xb_test_xbase.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/tests/xb_test_xbase.cpp File Reference
diff --git a/docs/doxygen/html/xb__undelall_8cpp.html b/docs/doxygen/html/xb__undelall_8cpp.html
index 8ac455f..04da1a6 100644
--- a/docs/doxygen/html/xb__undelall_8cpp.html
+++ b/docs/doxygen/html/xb__undelall_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_undelall.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/utils/xb_undelall.cpp File Reference
@@ -76,12 +76,16 @@ $(function() {
-
-◆ main()
+
+◆ main()
@@ -90,13 +94,13 @@ Functions
int main
(
int
- ac ,
+ argc ,
- char **
- av
+ char *
+ argv []
@@ -106,6 +110,40 @@ Functions
+
+
+
+◆ PrintHelp()
+
+
+
+
+
+ void PrintHelp
+ (
+ )
+
+
+
+
+
+
+
+
+◆ PrintVersion()
+
+
+
+
+
+ void PrintVersion
+ (
+ )
+
+
+
+
+
diff --git a/docs/doxygen/html/xb__zap_8cpp.html b/docs/doxygen/html/xb__zap_8cpp.html
index 7f84f88..793d67e 100644
--- a/docs/doxygen/html/xb__zap_8cpp.html
+++ b/docs/doxygen/html/xb__zap_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/utils/xb_zap.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.1/src/utils/xb_zap.cpp File Reference
diff --git a/docs/doxygen/html/xbalttbl_8cpp.html b/docs/doxygen/html/xbalttbl_8cpp.html
index cd474a9..6fdf925 100644
--- a/docs/doxygen/html/xbalttbl_8cpp.html
+++ b/docs/doxygen/html/xbalttbl_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql/xbalttbl.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbalttbl.cpp File Reference
diff --git a/docs/doxygen/html/xbase_8h.html b/docs/doxygen/html/xbase_8h.html
index dc746f9..e91ad08 100644
--- a/docs/doxygen/html/xbase_8h.html
+++ b/docs/doxygen/html/xbase_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbase.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbase.h File Reference
@@ -94,6 +94,7 @@ $(function() {
#include <xbexpnode.h >
#include <xbexp.h >
#include <xbtag.h >
+#include <xbblkread.h >
#include <xbdbf.h >
#include <xbindex.h >
#include <xbfilter.h >
diff --git a/docs/doxygen/html/xbase_8h_source.html b/docs/doxygen/html/xbase_8h_source.html
index f79396f..fe74fac 100644
--- a/docs/doxygen/html/xbase_8h_source.html
+++ b/docs/doxygen/html/xbase_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbase.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbase.h Source File
@@ -75,7 +75,7 @@ $(function() {
-
+
@@ -113,59 +113,65 @@ $(function() {
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/xbbcd_8cpp.html b/docs/doxygen/html/xbbcd_8cpp.html
index 54c4b5f..26f5cf0 100644
--- a/docs/doxygen/html/xbbcd_8cpp.html
+++ b/docs/doxygen/html/xbbcd_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbbcd.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbbcd.cpp File Reference
diff --git a/docs/doxygen/html/xbbcd_8h.html b/docs/doxygen/html/xbbcd_8h.html
index 656c563..c8ad04d 100644
--- a/docs/doxygen/html/xbbcd_8h.html
+++ b/docs/doxygen/html/xbbcd_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbbcd.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbbcd.h File Reference
diff --git a/docs/doxygen/html/xbbcd_8h_source.html b/docs/doxygen/html/xbbcd_8h_source.html
index d442eb4..a76c0ce 100644
--- a/docs/doxygen/html/xbbcd_8h_source.html
+++ b/docs/doxygen/html/xbbcd_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbbcd.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbbcd.h Source File
diff --git a/docs/doxygen/html/xbblkread_8h.html b/docs/doxygen/html/xbblkread_8h.html
new file mode 100644
index 0000000..f79f691
--- /dev/null
+++ b/docs/doxygen/html/xbblkread_8h.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbblkread.h File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xbase64 4.0.1
+
+ C++ Library for handling Xbase (DBF) format type files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/xbblkread_8h_source.html b/docs/doxygen/html/xbblkread_8h_source.html
new file mode 100644
index 0000000..6da459b
--- /dev/null
+++ b/docs/doxygen/html/xbblkread_8h_source.html
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbblkread.h Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xbase64 4.0.1
+
+ C++ Library for handling Xbase (DBF) format type files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
16 #ifndef __XB_BLKREAD_H__
+
17 #define __XB_BLKREAD_H__
+
+
+
20 #ifdef XB_BLOCKREAD_SUPPORT
+
+
+
+
+
32 class XBDLLEXPORT xbBlockRead {
+
+
+
35 xbBlockRead(
xbDbf * d );
+
+
+
38 #ifdef XB_DEBUG_SUPPORT
+
39 void DumpReadBlockInternals();
+
+
+
42 xbInt16 Init( xbUInt32 ulBlkSize = 0 );
+
+
44 xbUInt32 GetBlockFirstRecNo()
const ;
+
45 xbUInt32 GetBlockRecCnt()
const ;
+
46 xbUInt32 GetBlockSize()
const ;
+
+
48 xbInt16 GetRecord( xbUInt32 ulRecNo );
+
49 xbInt16 SetBlockSize( xbUInt32 ulBlkSize );
+
+
+
+
+
54 xbInt16 GetBlockForRecNo( xbUInt32 ulRecNo );
+
+
+
+
58 xbUInt32 ulFirstBlkRec;
+
+
+
+
+
+
+
+
+
+
+
+
+
Definition: xbdate.cpp:19
+
short int xbBool
Definition: xbtypes.h:24
+
class XBDLLEXPORT xbDbf
Definition: xbtblmgr.h:28
+
+
+
+
+
diff --git a/docs/doxygen/html/xbblockread_8cpp.html b/docs/doxygen/html/xbblockread_8cpp.html
new file mode 100644
index 0000000..e75a40c
--- /dev/null
+++ b/docs/doxygen/html/xbblockread_8cpp.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbblockread.cpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xbase64 4.0.1
+
+ C++ Library for handling Xbase (DBF) format type files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/xbcrix_8cpp.html b/docs/doxygen/html/xbcrix_8cpp.html
index 9da453c..a7fc095 100644
--- a/docs/doxygen/html/xbcrix_8cpp.html
+++ b/docs/doxygen/html/xbcrix_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql/xbcrix.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbcrix.cpp File Reference
diff --git a/docs/doxygen/html/xbcrtbl_8cpp.html b/docs/doxygen/html/xbcrtbl_8cpp.html
index 830c956..816b297 100644
--- a/docs/doxygen/html/xbcrtbl_8cpp.html
+++ b/docs/doxygen/html/xbcrtbl_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql/xbcrtbl.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbcrtbl.cpp File Reference
diff --git a/docs/doxygen/html/xbcrtbl_8save_8cpp.html b/docs/doxygen/html/xbcrtbl_8save_8cpp.html
new file mode 100644
index 0000000..fce08f6
--- /dev/null
+++ b/docs/doxygen/html/xbcrtbl_8save_8cpp.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbcrtbl.save.cpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xbase64 4.0.1
+
+ C++ Library for handling Xbase (DBF) format type files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/xbdate_8cpp.html b/docs/doxygen/html/xbdate_8cpp.html
index 933fca7..7db59c4 100644
--- a/docs/doxygen/html/xbdate_8cpp.html
+++ b/docs/doxygen/html/xbdate_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbdate.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdate.cpp File Reference
diff --git a/docs/doxygen/html/xbdate_8h.html b/docs/doxygen/html/xbdate_8h.html
index 0787c5e..d910af4 100644
--- a/docs/doxygen/html/xbdate_8h.html
+++ b/docs/doxygen/html/xbdate_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbdate.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdate.h File Reference
diff --git a/docs/doxygen/html/xbdate_8h_source.html b/docs/doxygen/html/xbdate_8h_source.html
index 087d5ed..fbebea0 100644
--- a/docs/doxygen/html/xbdate_8h_source.html
+++ b/docs/doxygen/html/xbdate_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbdate.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdate.h Source File
@@ -139,35 +139,34 @@ $(function() {
93 xbInt16 DayOf( xbInt16 iFormat )
const ;
94 xbInt16 CTOD(
const xbString &sCtodInDate );
-
-
- 97 const char *Str()
const ;
- 98 xbBool IsLeapYear( xbInt16 iYear )
const ;
-
- 100 xbInt32 JulianDays()
const ;
- 101 xbInt16 JulToDate8( xbInt32 lJulDate );
- 102 xbInt16 LastDayOfMonth();
- 103 xbInt16 MonthOf()
const ;
- 104 xbInt16 Set(
const xbString &Date8 );
-
- 106 xbInt16 YearOf()
const ;
-
- 108 #ifdef XB_DEBUG_SUPPORT
- 109 void Dump(
const char * title );
- 110 void DumpDateTables();
-
-
-
- 114 void SetDateTables();
-
-
- 117 static int iAggregatedDaysInMonths[2][13];
- 118 static int iDaysInMonths[2][13];
-
-
-
-
-
+
+ 96 const char *Str()
const ;
+ 97 xbBool IsLeapYear( xbInt16 iYear )
const ;
+
+ 99 xbInt32 JulianDays()
const ;
+ 100 xbInt16 JulToDate8( xbInt32 lJulDate );
+ 101 xbInt16 LastDayOfMonth();
+ 102 xbInt16 MonthOf()
const ;
+ 103 xbInt16 Set(
const xbString &Date8 );
+
+ 105 xbInt16 YearOf()
const ;
+
+ 107 #ifdef XB_DEBUG_SUPPORT
+ 108 void Dump(
const char * title );
+ 109 void DumpDateTables();
+
+
+
+ 113 void SetDateTables();
+
+
+ 116 static int iAggregatedDaysInMonths[2][13];
+ 117 static int iDaysInMonths[2][13];
+
+
+
+
+
xbDate class.
Definition: xbdate.h:62
Class for handling shared system variables.
Definition: xbssv.h:59
Class for handling string data.
Definition: xbstring.h:50
diff --git a/docs/doxygen/html/xbdbf3_8cpp.html b/docs/doxygen/html/xbdbf3_8cpp.html
index 406aa1f..84171c6 100644
--- a/docs/doxygen/html/xbdbf3_8cpp.html
+++ b/docs/doxygen/html/xbdbf3_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbdbf3.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdbf3.cpp File Reference
diff --git a/docs/doxygen/html/xbdbf4_8cpp.html b/docs/doxygen/html/xbdbf4_8cpp.html
index 8e11ded..7bf435f 100644
--- a/docs/doxygen/html/xbdbf4_8cpp.html
+++ b/docs/doxygen/html/xbdbf4_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbdbf4.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdbf4.cpp File Reference
diff --git a/docs/doxygen/html/xbdbf_8cpp.html b/docs/doxygen/html/xbdbf_8cpp.html
index 23135a7..918936e 100644
--- a/docs/doxygen/html/xbdbf_8cpp.html
+++ b/docs/doxygen/html/xbdbf_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbdbf.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbdbf.cpp File Reference
diff --git a/docs/doxygen/html/xbdbf_8h.html b/docs/doxygen/html/xbdbf_8h.html
index b509172..39b2a14 100644
--- a/docs/doxygen/html/xbdbf_8h.html
+++ b/docs/doxygen/html/xbdbf_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbdbf.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdbf.h File Reference
diff --git a/docs/doxygen/html/xbdbf_8h_source.html b/docs/doxygen/html/xbdbf_8h_source.html
index 0a8b612..c871653 100644
--- a/docs/doxygen/html/xbdbf_8h_source.html
+++ b/docs/doxygen/html/xbdbf_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbdbf.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbdbf.h Source File
@@ -74,7 +74,7 @@ $(function() {
-
+
@@ -198,373 +198,389 @@ $(function() {
168 virtual xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );
169 virtual xbInt16 GetAutoCommit ()
const ;
170 virtual xbInt16 GetAutoCommit ( xbInt16 iOption )
const ;
- 171 virtual xbUInt32 GetCurRecNo ()
const ;
- 172 virtual xbInt16 GetDbfStatus ()
const ;
- 173 virtual xbInt32 GetFieldCnt ()
const ;
- 174 virtual xbInt16 GetFirstRecord ();
- 175 virtual xbInt16 GetFirstRecord ( xbInt16 iOption );
- 176 virtual xbInt16 GetLastRecord ();
- 177 virtual xbInt16 GetLastRecord ( xbInt16 iOption );
-
- 179 virtual xbInt16 GetNextRecord ();
- 180 virtual xbInt16 GetNextRecord ( xbInt16 iOption );
- 181 virtual xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );
- 182 virtual xbInt16 GetPrevRecord ();
- 183 virtual xbInt16 GetPrevRecord ( xbInt16 iOption );
- 184 virtual xbInt16 GetRecord ( xbUInt32 ulRecNo );
-
- 186 virtual xbUInt32 GetRecordCount ();
- 187 virtual xbInt16 GetRecordCnt ( xbUInt32 & ulRecCnt );
+
+ 172 virtual xbUInt32 GetCurRecNo ()
const ;
+ 173 virtual xbInt16 GetDbfStatus ()
const ;
+
+ 175 virtual xbInt32 GetFieldCnt ()
const ;
+ 176 virtual xbInt16 GetFirstRecord ();
+ 177 virtual xbInt16 GetFirstRecord ( xbInt16 iOption );
+
+ 179 virtual xbInt16 GetLastRecord ();
+ 180 virtual xbInt16 GetLastRecord ( xbInt16 iOption );
+
+ 182 virtual xbInt16 GetNextRecord ();
+ 183 virtual xbInt16 GetNextRecord ( xbInt16 iOption );
+ 184 virtual xbInt16 GetNextRecord ( xbInt16 iOption, xbUInt32 ulStartRec );
+ 185 virtual xbInt16 GetPrevRecord ();
+ 186 virtual xbInt16 GetPrevRecord ( xbInt16 iOption );
+ 187 virtual xbInt16 GetRecord ( xbUInt32 ulRecNo );
- 189 virtual char * GetRecordBuf ( xbInt16 iOpt = 0 )
const ;
- 190 virtual xbUInt16 GetRecordLen ()
const ;
- 191 virtual const xbString &GetTblAlias()
const ;
-
- 193 virtual xbXBase *GetXbasePtr ()
const ;
-
-
- 196 virtual xbBool MemoFieldsExist ()
const ;
+ 189 virtual xbUInt32 GetRecordCount ();
+ 190 virtual xbInt16 GetRecordCnt ( xbUInt32 & ulRecCnt );
+
+ 192 virtual char * GetRecordBuf ( xbInt16 iOpt = 0 )
const ;
+ 193 virtual xbUInt16 GetRecordLen ()
const ;
+ 194 virtual const xbString &GetTblAlias()
const ;
+
+ 196 virtual xbXBase *GetXbasePtr ()
const ;
- 198 virtual xbInt16 Open (
const xbString &sTableName );
- 199 virtual xbInt16 Open (
const xbString &sTableName,
const xbString &sAlias );
- 200 virtual xbInt16
Open (
const xbString &sTableName,
const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0;
- 201 virtual xbInt16 Pack ();
- 202 virtual xbInt16 Pack ( xbUInt32 &ulDeletedRecCnt );
-
-
- 205 virtual xbInt16 PutRecord ();
- 206 virtual xbInt16 PutRecord ( xbUInt32 ulRecNo );
- 207 virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );
- 208 virtual xbInt16 RecordDeleted ( xbInt16 iOpt = 0 )
const ;
-
-
- 211 virtual xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );
-
- 213 virtual xbInt16 UndeleteAllRecords();
- 214 virtual xbInt16 UndeleteRecord ();
- 215 virtual xbInt16 Zap ();
-
-
-
-
- 220 virtual xbInt16 GetField(xbInt16 iFieldNo,
xbString &sFieldValue, xbInt16 iRecBufSw )
const ;
- 221 virtual xbInt16 GetField(xbInt16 iFieldNo,
xbString &sFieldValue)
const ;
- 222 virtual xbInt16 GetField(
const xbString &sFieldName,
xbString &sFieldValue)
const ;
- 223 virtual xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &iFieldDecimal )
const ;
- 224 virtual xbInt16 GetFieldDecimal(
const xbString &sFieldName, xbInt16 &iFieldDecimal )
const ;
- 225 virtual xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &iFieldLen )
const ;
- 226 virtual xbInt16 GetFieldLen(
const xbString &sFieldName, xbInt16 &iFieldLen )
const ;
- 227 virtual xbInt16 GetFieldName( xbInt16 iFieldNo,
xbString &sFieldName )
const ;
-
- 229 virtual xbInt16 GetFieldNo(
const xbString &sFieldName, xbInt16 &iFieldNo )
const ;
- 230 virtual xbInt16 GetFieldNo(
const xbString &sFieldName )
const ;
+
+ 199 virtual xbBool MemoFieldsExist ()
const ;
+
+ 201 virtual xbInt16 Open (
const xbString &sTableName );
+ 202 virtual xbInt16 Open (
const xbString &sTableName,
const xbString &sAlias );
+ 203 virtual xbInt16
Open (
const xbString &sTableName,
const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode ) = 0;
+ 204 virtual xbInt16 Pack ();
+ 205 virtual xbInt16 Pack ( xbUInt32 &ulDeletedRecCnt );
+
+
+ 208 virtual xbInt16 PutRecord ();
+ 209 virtual xbInt16 PutRecord ( xbUInt32 ulRecNo );
+ 210 virtual xbInt16 ReadHeader ( xbInt16 iFilePositionOption, xbInt16 iReadOption );
+ 211 virtual xbInt16 RecordDeleted ( xbInt16 iOpt = 0 )
const ;
+
+
+ 214 virtual xbInt16 SetAutoCommit ( xbInt16 iAutoCommit );
+
+ 216 virtual xbInt16 UndeleteAllRecords();
+ 217 virtual xbInt16 UndeleteRecord ();
+ 218 virtual xbInt16 Zap ();
+
+
+
+
+ 223 virtual xbInt16 GetField(xbInt16 iFieldNo,
xbString &sFieldValue, xbInt16 iRecBufSw )
const ;
+ 224 virtual xbInt16 GetField(xbInt16 iFieldNo,
xbString &sFieldValue)
const ;
+ 225 virtual xbInt16 GetField(
const xbString &sFieldName,
xbString &sFieldValue)
const ;
+ 226 virtual xbInt16 GetFieldDecimal( xbInt16 iFieldNo, xbInt16 &iFieldDecimal )
const ;
+ 227 virtual xbInt16 GetFieldDecimal(
const xbString &sFieldName, xbInt16 &iFieldDecimal )
const ;
+ 228 virtual xbInt16 GetFieldLen( xbInt16 iFieldNo, xbInt16 &iFieldLen )
const ;
+ 229 virtual xbInt16 GetFieldLen(
const xbString &sFieldName, xbInt16 &iFieldLen )
const ;
+ 230 virtual xbInt16 GetFieldName( xbInt16 iFieldNo,
xbString &sFieldName )
const ;
- 232 virtual xbInt16 GetFieldType( xbInt16 iFieldNo,
char &cFieldType )
const ;
- 233 virtual xbInt16 GetFieldType(
const xbString &sFieldName,
char &cFieldType )
const ;
- 234 virtual xbInt16 PutField(
const xbString &sFieldName,
const xbString &sFieldData );
- 235 virtual xbInt16 PutField( xbInt16 iFieldNo,
const xbString &sFieldData );
-
- 237 virtual xbInt16 PutLogicalField( xbInt16 iFieldNo,
const xbString &sFieldData );
- 238 virtual xbInt16 PutLogicalField(
const xbString &sFieldName,
const xbString &sFieldData );
- 239 virtual xbInt16 GetLogicalField( xbInt16 iFieldNo,
xbString &sFieldData )
const ;
- 240 virtual xbInt16 GetLogicalField(
const xbString &sFieldName,
xbString &sFieldData)
const ;
-
- 242 virtual xbInt16 PutLogicalField( xbInt16 iFieldNo,
xbBool bFieldData );
- 243 virtual xbInt16 PutLogicalField(
const xbString &sFieldName,
xbBool bFieldData );
- 244 virtual xbInt16 GetLogicalField( xbInt16 iFieldNo,
xbBool &bFieldData )
const ;
- 245 virtual xbInt16 GetLogicalField( xbInt16 iFieldNo,
xbBool &bFieldData, xbInt16 iRecBufSw )
const ;
- 246 virtual xbInt16 GetLogicalField(
const xbString &sFieldName,
xbBool &bFieldData)
const ;
-
- 248 virtual xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &lFieldValue )
const ;
- 249 virtual xbInt16 GetLongField(
const xbString &sFieldName, xbInt32 &lFieldValue )
const ;
- 250 virtual xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );
- 251 virtual xbInt16 PutLongField(
const xbString &sFieldNo, xbInt32 lFieldValue );
-
- 253 virtual xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &lFieldValue )
const ;
- 254 virtual xbInt16 GetULongField(
const xbString &sFieldName, xbUInt32 &lFieldValue )
const ;
- 255 virtual xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );
- 256 virtual xbInt16 PutULongField(
const xbString &sFieldNo, xbUInt32 lFieldValue );
-
- 258 virtual xbInt16 GetDoubleField( xbInt16 FieldNo,
xbDouble &dFieldValue )
const ;
- 259 virtual xbInt16 GetDoubleField( xbInt16 FieldNo,
xbDouble &dFieldValue, xbInt16 iRecBufSw )
const ;
- 260 virtual xbInt16 GetDoubleField(
const xbString &sFieldName,
xbDouble &dFieldValue )
const ;
- 261 virtual xbInt16 PutDoubleField( xbInt16 FieldNo,
xbDouble dFieldValue );
- 262 virtual xbInt16 PutDoubleField(
const xbString &FieldName,
xbDouble dFieldValue );
-
- 264 virtual xbInt16 GetFloatField( xbInt16 iFieldNo,
xbFloat &fFieldValue )
const ;
- 265 virtual xbInt16 GetFloatField(
const xbString &sFieldName,
xbFloat &fFieldValue )
const ;
- 266 virtual xbInt16 PutFloatField( xbInt16 iFieldNo,
xbFloat fFieldValue );
- 267 virtual xbInt16 PutFloatField(
const xbString &sFieldName,
xbFloat fFieldValue );
-
- 269 virtual xbInt16 GetDateField( xbInt16 iFieldNo,
xbDate &dt )
const ;
- 270 virtual xbInt16 GetDateField(
const xbString &sFieldName,
xbDate &dt )
const ;
- 271 virtual xbInt16 PutDateField( xbInt16 iFieldNo,
const xbDate &dt );
- 272 virtual xbInt16 PutDateField(
const xbString &sFieldName,
const xbDate &dt );
-
-
-
- 276 #ifdef XB_MEMO_SUPPORT
- 277 virtual xbInt16 GetMemoFieldCnt ()
const ;
- 278 virtual xbMemo *GetMemoPtr ();
- 279 virtual xbUInt32 GetCreateMemoBlockSize()
const ;
- 280 virtual xbInt16 GetMemoField ( xbInt16 iFldNo,
xbString &sMemoData );
- 281 virtual xbInt16 GetMemoField (
const xbString & sFldName,
xbString &sMemoData );
- 282 virtual xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &ullMemoFieldLen );
- 283 virtual xbInt16 GetMemoFieldLen (
const xbString & sFldName, xbUInt32 &ulMemoFieldLen );
- 284 virtual xbBool MemoFieldExists ( xbInt16 iFieldNo )
const ;
- 285 virtual xbBool MemoFieldExists (
const xbString &sFieldName )
const ;
- 286 virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;
- 287 virtual xbInt16 UpdateMemoField ( xbInt16 iFldNo,
const xbString &sMemoData );
- 288 virtual xbInt16 UpdateMemoField (
const xbString & sFldName,
const xbString &sMemoData );
-
-
-
- 292 #ifdef XB_LOCKING_SUPPORT
- 293 virtual xbInt16 LockTable ( xbInt16 iLockFunction );
- 294 virtual xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );
- 295 virtual xbInt16 LockAppend ( xbInt16 iLockFunction );
- 296 virtual xbInt16 LockHeader ( xbInt16 iLockFunction );
-
- 298 #ifdef XB_MEMO_SUPPORT
- 299 virtual xbInt16 LockMemo ( xbInt16 iLockFunction );
- 300 virtual xbBool GetMemoLocked ()
const ;
-
-
- 303 #ifdef XB_INDEX_SUPPORT
- 304 virtual xbInt16 LockIndices ( xbInt16 iLockFunction );
-
-
- 307 xbInt16 GetAutoLock ()
const ;
- 308 void SetAutoLock ( xbInt16 iAutoLock );
- 309 xbInt16 GetLockFlavor ()
const ;
- 310 void SetLockFlavor ( xbInt16 iLockFlavor );
- 311 xbBool GetTableLocked ()
const ;
- 312 xbBool GetHeaderLocked ()
const ;
- 313 xbUInt32 GetAppendLocked ()
const ;
- 314 xbLinkListNode<xbUInt32> * GetFirstRecLock ()
const ;
-
- 316 #ifdef XB_DEBUG_SUPPORT
- 317 void DumpTableLockStatus()
const ;
-
-
-
-
- 322 #ifdef XB_INDEX_SUPPORT
- 323 virtual xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );
- 324 virtual xbInt16 CloseIndexFile( xbIx *pIx );
-
- 326 xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut,
void **vpTagOut );
- 327 virtual xbInt16 DeleteTag(
const xbString &sIxType,
const xbString &sName );
- 328 virtual xbInt16 DeleteAllIndexFiles();
- 329 virtual xbInt16 Find(
xbString &sKey );
- 330 virtual xbInt16 Find(
xbDate &dtKey );
- 331 virtual xbInt16 Find(
xbDouble &dKey );
- 332 virtual xbIx *GetCurIx()
const ;
- 333 virtual void *GetCurTag()
const ;
-
- 335 virtual xbInt16 GetFirstKey();
- 336 virtual xbInt16 GetNextKey();
- 337 virtual xbInt16 GetPrevKey();
- 338 virtual xbInt16 GetLastKey();
-
- 340 virtual const xbString &GetCurIxType()
const ;
- 341 virtual const xbString &GetCurTagName()
const ;
- 342 virtual xbIxList *GetIxList()
const ;
- 343 virtual xbInt32 GetPhysicalIxCnt ()
const ;
- 344 xbLinkListNode<xbTag *> *GetTagList ()
const ;
-
- 346 virtual xbInt16 OpenIndex(
const xbString &sIxType,
const xbString &sIndexName );
- 347 virtual xbInt16 Reindex( xbInt16 iTagOpt );
- 348 virtual xbInt16 SetCurTag(
const xbString &sTagName );
- 349 virtual void SetCurTag(
const xbString &sIxType, xbIx *pIx,
void *vpTag );
-
-
-
- 353 #ifdef XB_INF_SUPPORT
- 354 virtual xbInt16 AssociateIndex(
const xbString &sType,
const xbString &sName, xbInt16 iOption );
- 355 xbLinkListNode<xbString> *GetInfList()
const ;
-
-
-
-
-
-
-
-
-
-
- 366 #ifdef XB_INDEX_SUPPORT
-
- 368 friend class xbIxMdx;
-
- 370 xbInt16 AddIndex( xbIx *ix,
const xbString &sFmt );
-
- 372 xbInt16 RemoveIndex( xbIx * ix );
- 373 void UpdateSchemaIxFlag( xbInt16 iFldNo,
unsigned char cVal );
- 374 virtual xbInt16 UpdateTagList ();
-
+ 232 virtual xbInt16 GetFieldNo(
const xbString &sFieldName, xbInt16 &iFieldNo )
const ;
+ 233 virtual xbInt16 GetFieldNo(
const xbString &sFieldName )
const ;
+
+ 235 virtual xbInt16 GetFieldType( xbInt16 iFieldNo,
char &cFieldType )
const ;
+ 236 virtual xbInt16 GetFieldType(
const xbString &sFieldName,
char &cFieldType )
const ;
+ 237 virtual xbInt16 PutField(
const xbString &sFieldName,
const xbString &sFieldData );
+ 238 virtual xbInt16 PutField( xbInt16 iFieldNo,
const xbString &sFieldData );
+
+ 240 virtual xbInt16 PutLogicalField( xbInt16 iFieldNo,
const xbString &sFieldData );
+ 241 virtual xbInt16 PutLogicalField(
const xbString &sFieldName,
const xbString &sFieldData );
+ 242 virtual xbInt16 GetLogicalField( xbInt16 iFieldNo,
xbString &sFieldData )
const ;
+ 243 virtual xbInt16 GetLogicalField(
const xbString &sFieldName,
xbString &sFieldData)
const ;
+
+ 245 virtual xbInt16 PutLogicalField( xbInt16 iFieldNo,
xbBool bFieldData );
+ 246 virtual xbInt16 PutLogicalField(
const xbString &sFieldName,
xbBool bFieldData );
+ 247 virtual xbInt16 GetLogicalField( xbInt16 iFieldNo,
xbBool &bFieldData )
const ;
+ 248 virtual xbInt16 GetLogicalField( xbInt16 iFieldNo,
xbBool &bFieldData, xbInt16 iRecBufSw )
const ;
+ 249 virtual xbInt16 GetLogicalField(
const xbString &sFieldName,
xbBool &bFieldData)
const ;
+
+ 251 virtual xbInt16 GetLongField( xbInt16 iFieldNo, xbInt32 &lFieldValue )
const ;
+ 252 virtual xbInt16 GetLongField(
const xbString &sFieldName, xbInt32 &lFieldValue )
const ;
+ 253 virtual xbInt16 PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue );
+ 254 virtual xbInt16 PutLongField(
const xbString &sFieldNo, xbInt32 lFieldValue );
+
+ 256 virtual xbInt16 GetULongField( xbInt16 iFieldNo, xbUInt32 &lFieldValue )
const ;
+ 257 virtual xbInt16 GetULongField(
const xbString &sFieldName, xbUInt32 &lFieldValue )
const ;
+ 258 virtual xbInt16 PutULongField( xbInt16 iFieldNo, xbUInt32 lFieldValue );
+ 259 virtual xbInt16 PutULongField(
const xbString &sFieldNo, xbUInt32 lFieldValue );
+
+ 261 virtual xbInt16 GetDoubleField( xbInt16 FieldNo,
xbDouble &dFieldValue )
const ;
+ 262 virtual xbInt16 GetDoubleField( xbInt16 FieldNo,
xbDouble &dFieldValue, xbInt16 iRecBufSw )
const ;
+ 263 virtual xbInt16 GetDoubleField(
const xbString &sFieldName,
xbDouble &dFieldValue )
const ;
+ 264 virtual xbInt16 PutDoubleField( xbInt16 FieldNo,
xbDouble dFieldValue );
+ 265 virtual xbInt16 PutDoubleField(
const xbString &FieldName,
xbDouble dFieldValue );
+
+ 267 virtual xbInt16 GetFloatField( xbInt16 iFieldNo,
xbFloat &fFieldValue )
const ;
+ 268 virtual xbInt16 GetFloatField(
const xbString &sFieldName,
xbFloat &fFieldValue )
const ;
+ 269 virtual xbInt16 PutFloatField( xbInt16 iFieldNo,
xbFloat fFieldValue );
+ 270 virtual xbInt16 PutFloatField(
const xbString &sFieldName,
xbFloat fFieldValue );
+
+ 272 virtual xbInt16 GetDateField( xbInt16 iFieldNo,
xbDate &dt )
const ;
+ 273 virtual xbInt16 GetDateField(
const xbString &sFieldName,
xbDate &dt )
const ;
+ 274 virtual xbInt16 PutDateField( xbInt16 iFieldNo,
const xbDate &dt );
+ 275 virtual xbInt16 PutDateField(
const xbString &sFieldName,
const xbDate &dt );
+
+
+
+ 279 #ifdef XB_MEMO_SUPPORT
+ 280 virtual xbInt16 GetMemoFieldCnt ()
const ;
+ 281 virtual xbMemo *GetMemoPtr ();
+ 282 virtual xbUInt32 GetCreateMemoBlockSize()
const ;
+ 283 virtual xbInt16 GetMemoField ( xbInt16 iFldNo,
xbString &sMemoData );
+ 284 virtual xbInt16 GetMemoField (
const xbString & sFldName,
xbString &sMemoData );
+ 285 virtual xbInt16 GetMemoFieldLen ( xbInt16 iFldNo, xbUInt32 &ullMemoFieldLen );
+ 286 virtual xbInt16 GetMemoFieldLen (
const xbString & sFldName, xbUInt32 &ulMemoFieldLen );
+ 287 virtual xbBool MemoFieldExists ( xbInt16 iFieldNo )
const ;
+ 288 virtual xbBool MemoFieldExists (
const xbString &sFieldName )
const ;
+ 289 virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 ulBlockSize ) = 0;
+ 290 virtual xbInt16 UpdateMemoField ( xbInt16 iFldNo,
const xbString &sMemoData );
+ 291 virtual xbInt16 UpdateMemoField (
const xbString & sFldName,
const xbString &sMemoData );
+
+
+
+ 295 #ifdef XB_LOCKING_SUPPORT
+ 296 virtual xbInt16 LockTable ( xbInt16 iLockFunction );
+ 297 virtual xbInt16 LockRecord ( xbInt16 iLockFunction, xbUInt32 ulRecNo );
+ 298 virtual xbInt16 LockAppend ( xbInt16 iLockFunction );
+ 299 virtual xbInt16 LockHeader ( xbInt16 iLockFunction );
+
+ 301 #ifdef XB_MEMO_SUPPORT
+ 302 virtual xbInt16 LockMemo ( xbInt16 iLockFunction );
+ 303 virtual xbBool GetMemoLocked ()
const ;
+
+
+ 306 #ifdef XB_INDEX_SUPPORT
+ 307 virtual xbInt16 LockIndices ( xbInt16 iLockFunction );
+
+
+ 310 xbInt16 GetAutoLock ()
const ;
+ 311 void SetAutoLock ( xbInt16 iAutoLock );
+ 312 xbInt16 GetLockFlavor ()
const ;
+ 313 void SetLockFlavor ( xbInt16 iLockFlavor );
+ 314 xbBool GetTableLocked ()
const ;
+ 315 xbBool GetHeaderLocked ()
const ;
+ 316 xbUInt32 GetAppendLocked ()
const ;
+ 317 xbLinkListNode<xbUInt32> * GetFirstRecLock ()
const ;
+
+ 319 #ifdef XB_DEBUG_SUPPORT
+ 320 void DumpTableLockStatus()
const ;
+
+
+
+
+ 325 #ifdef XB_INDEX_SUPPORT
+ 326 virtual xbInt16 CheckTagIntegrity( xbInt16 iTagOpt, xbInt16 iOutputOpt );
+ 327 virtual xbInt16 CloseIndexFile( xbIx *pIx );
+
+ 329 xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut,
void **vpTagOut );
+ 330 virtual xbInt16 DeleteTag(
const xbString &sIxType,
const xbString &sName );
+ 331 virtual xbInt16 DeleteAllIndexFiles();
+ 332 virtual xbInt16 Find(
xbString &sKey );
+ 333 virtual xbInt16 Find(
xbDate &dtKey );
+ 334 virtual xbInt16 Find(
xbDouble &dKey );
+ 335 virtual xbIx *GetCurIx()
const ;
+ 336 virtual void *GetCurTag()
const ;
+
+ 338 virtual xbInt16 GetFirstKey();
+ 339 virtual xbInt16 GetNextKey();
+ 340 virtual xbInt16 GetPrevKey();
+ 341 virtual xbInt16 GetLastKey();
+
+ 343 virtual const xbString &GetCurIxType()
const ;
+ 344 virtual const xbString &GetCurTagName()
const ;
+ 345 virtual xbIxList *GetIxList()
const ;
+ 346 virtual xbInt32 GetPhysicalIxCnt ()
const ;
+ 347 xbLinkListNode<xbTag *> *GetTagList ()
const ;
+
+ 349 virtual xbInt16 OpenIndex(
const xbString &sIxType,
const xbString &sIndexName );
+ 350 virtual xbInt16 Reindex( xbInt16 iTagOpt );
+ 351 virtual xbInt16 SetCurTag(
const xbString &sTagName );
+ 352 virtual void SetCurTag(
const xbString &sIxType, xbIx *pIx,
void *vpTag );
+
+
+
+ 356 #ifdef XB_INF_SUPPORT
+ 357 virtual xbInt16 AssociateIndex(
const xbString &sType,
const xbString &sName, xbInt16 iOption );
+ 358 xbLinkListNode<xbString> *GetInfList()
const ;
+
+
+
+
+
+
+
+ 366 #ifdef XB_BLOCKREAD_SUPPORT
+ 367 xbInt16 DisableBlockReadProcessing();
+ 368 xbInt16 EnableBlockReadProcessing();
+ 369 xbBool GetBlockReadStatus()
const ;
+
+
+
+ 373 #ifdef XB_INDEX_SUPPORT
+
+ 375 friend class xbIxMdx;
- 377 #ifdef XB_INF_SUPPORT
- 378 virtual xbInt16 GetInfFileName(
xbString &sNdxIdxFileName );
-
-
-
- 382 #ifdef XB_LOCKING_SUPPORT
- 383 void SetHeaderLocked (
xbBool bTableLocked );
- 384 void SetTableLocked (
xbBool bTableLocked );
-
-
- 387 #ifdef XB_MEMO_SUPPORT
- 388 xbInt16 iMemoFieldCnt;
-
- 390 xbUInt32 ulCreateMemoBlockSize;
-
+ 377 xbInt16 AddIndex( xbIx *ix,
const xbString &sFmt );
+
+ 379 xbInt16 RemoveIndex( xbIx * ix );
+ 380 void UpdateSchemaIxFlag( xbInt16 iFldNo,
unsigned char cVal );
+ 381 virtual xbInt16 UpdateTagList ();
+
+
+ 384 #ifdef XB_INF_SUPPORT
+ 385 virtual xbInt16 GetInfFileName(
xbString &sNdxIdxFileName );
+
+
+ 388 #ifdef XB_BLOCKREAD_SUPPORT
+ 389 friend class xbBlockRead;
+
+
- 393 #ifdef XB_INF_SUPPORT
- 394 virtual xbInt16 DeleteInfData();
- 395 virtual xbInt16 LoadInfData();
- 396 virtual xbInt16 SaveInfData();
-
-
-
-
-
-
-
-
- 405 virtual xbInt16 GetRawField( xbInt16 iFieldNo,
char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw )
const ;
- 406 virtual void InitVars();
- 407 virtual xbInt16 SetVersion() = 0;
- 408 virtual xbInt16 ValidateSchema(
xbSchema * s ) = 0;
- 409 xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );
-
-
-
-
-
-
-
-
- 418 xbInt16 iFileVersion;
-
-
-
-
-
-
-
-
- 427 xbSchemaRec *SchemaPtr;
-
-
+ 393 #ifdef XB_LOCKING_SUPPORT
+ 394 void SetHeaderLocked (
xbBool bTableLocked );
+ 395 void SetTableLocked (
xbBool bTableLocked );
+
+
+ 398 #ifdef XB_MEMO_SUPPORT
+ 399 xbInt16 iMemoFieldCnt;
+
+ 401 xbUInt32 ulCreateMemoBlockSize;
+
+
+ 404 #ifdef XB_INF_SUPPORT
+ 405 virtual xbInt16 DeleteInfData();
+ 406 virtual xbInt16 LoadInfData();
+ 407 virtual xbInt16 SaveInfData();
+
+
+
+
+
+
+
+
+ 416 virtual xbInt16 GetRawField( xbInt16 iFieldNo,
char *Buf, xbUInt32 BufSize, xbInt16 iRecBufSw )
const ;
+ 417 virtual void InitVars();
+ 418 virtual xbInt16 SetVersion() = 0;
+ 419 virtual xbInt16 ValidateSchema(
xbSchema * s ) = 0;
+ 420 xbInt16 WriteHeader( xbInt16 iPositionOption, xbInt16 iWriteOption );
+
+
+
+
+
+
+
+
+ 429 xbInt16 iFileVersion;
-
-
- 433 unsigned char cVersion;
-
-
-
-
- 438 xbUInt16 uiHeaderLen;
- 439 xbUInt16 uiRecordLen;
- 440 char cTransactionFlag;
- 441 char cEncryptionFlag;
-
-
-
-
-
-
- 448 void ResetNoOfRecords();
-
-
- 451 #ifdef XB_LOCKING_SUPPORT
-
-
-
-
- 456 xbUInt32 ulAppendLocked;
- 457 xbLinkListOrd<xbUInt32> lloRecLocks;
-
-
+
+
+
+
+
+
+
+ 438 xbSchemaRec *SchemaPtr;
+
+
+
+
+
+ 444 unsigned char cVersion;
+
+
+
+
+ 449 xbUInt16 uiHeaderLen;
+ 450 xbUInt16 uiRecordLen;
+ 451 char cTransactionFlag;
+ 452 char cEncryptionFlag;
+
+
+
+
+
+
+ 459 void ResetNoOfRecords();
- 461 #ifdef XB_INDEX_SUPPORT
-
-
-
-
- 466 xbLinkList<xbTag *> llTags;
-
-
-
-
- 471 xbLinkList<xbString> llInfData;
-
-
-
-
-
-
- 478 #ifdef XB_DBF3_SUPPORT
-
- 486 class XBDLLEXPORT xbDbf3 :
public xbDbf {
-
-
-
- 490 virtual xbInt16 CreateTable (
const xbString &sTableName,
const xbString &sAlias,
xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );
- 491 virtual xbInt16 GetVersion ()
const ;
- 492 virtual xbInt16 Open (
const xbString &sTableName,
const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );
- 493 virtual xbInt16 Rename (
const xbString sNewName );
-
- 495 #ifdef XB_MEMO_SUPPORT
- 496 virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );
-
-
-
- 500 xbInt16 SetVersion ();
- 501 virtual xbInt16 ValidateSchema(
xbSchema *s );
-
-
-
-
-
-
-
- 509 #ifdef XB_DBF4_SUPPORT
-
- 516 class XBDLLEXPORT xbDbf4 :
public xbDbf {
-
-
+
+ 462 #ifdef XB_LOCKING_SUPPORT
+
+
+
+
+ 467 xbUInt32 ulAppendLocked;
+ 468 xbLinkListOrd<xbUInt32> lloRecLocks;
+
+
+ 471 #ifdef XB_INDEX_SUPPORT
+
+
+
+
+ 476 xbLinkList<xbTag *> llTags;
+
+
+ 479 #ifdef XB_INF_SUPPORT
+ 480 xbLinkList<xbString> llInfData;
+
+
+ 483 #ifdef XB_BLOCKREAD_SUPPORT
+
+
+
+
+
+
+
+
+
+ 493 #ifdef XB_DBF3_SUPPORT
+
+ 501 class XBDLLEXPORT xbDbf3 :
public xbDbf {
+
+
+
+ 505 virtual xbInt16 CreateTable (
const xbString &sTableName,
const xbString &sAlias,
xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );
+ 506 virtual xbInt16 GetVersion ()
const ;
+ 507 virtual xbInt16 Open (
const xbString &sTableName,
const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );
+ 508 virtual xbInt16 Rename (
const xbString sNewName );
+
+ 510 #ifdef XB_MEMO_SUPPORT
+ 511 virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );
+
+
+
+ 515 xbInt16 SetVersion ();
+ 516 virtual xbInt16 ValidateSchema(
xbSchema *s );
+
+
-
-
- 522 virtual xbInt16 CreateTable (
const xbString &sTableName,
const xbString &sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );
- 523 virtual xbInt16 GetVersion ()
const ;
- 524 virtual xbInt16 Open (
const xbString &sTableName,
const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );
- 525 virtual xbInt16 Rename (
const xbString sNewName );
+
+
+
+
+ 524 #ifdef XB_DBF4_SUPPORT
- 527 #ifdef XB_MEMO_SUPPORT
- 528 virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );
-
-
-
-
- 533 xbInt16 SetVersion();
- 534 virtual xbInt16 ValidateSchema ( xbSchema *s );
-
-
-
-
-
-
+ 531 class XBDLLEXPORT xbDbf4 :
public xbDbf {
+
+
+
+
+
+ 537 virtual xbInt16 CreateTable (
const xbString &sTableName,
const xbString &sAlias, xbSchema *, xbInt16 iOverlay, xbInt16 iShareMode );
+ 538 virtual xbInt16 GetVersion ()
const ;
+ 539 virtual xbInt16 Open (
const xbString &sTableName,
const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode );
+ 540 virtual xbInt16 Rename (
const xbString sNewName );
-
-
+ 542 #ifdef XB_MEMO_SUPPORT
+ 543 virtual xbInt16 SetCreateMemoBlockSize( xbUInt32 iBlockSize );
+
+
+
+
+ 548 xbInt16 SetVersion();
+ 549 virtual xbInt16 ValidateSchema ( xbSchema *s );
+
+
+
+
+
+
+
+
+
xbDate class.
Definition: xbdate.h:62
Base class for handling dbf files/tables.
Definition: xbdbf.h:150
virtual xbInt16 GetVersion() const =0
virtual xbInt16 Open(const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode)=0
virtual xbInt16 CreateTable(const xbString &sTableName, const xbString &sAlias, xbSchema *pSchema, xbInt16 iOverlay, xbInt16 iShareMode)=0
+virtual xbUInt16 GetHeaderLen() const
virtual xbInt16 Rename(const xbString sNewName)=0
Class for handling low level file I/O.
Definition: xbfile.h:56
Class for handling string data.
Definition: xbstring.h:50
diff --git a/docs/doxygen/html/xbdelete_8cpp.html b/docs/doxygen/html/xbdelete_8cpp.html
index 98abf7b..24c2f92 100644
--- a/docs/doxygen/html/xbdelete_8cpp.html
+++ b/docs/doxygen/html/xbdelete_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql/xbdelete.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbdelete.cpp File Reference
diff --git a/docs/doxygen/html/xbdrpix_8cpp.html b/docs/doxygen/html/xbdrpix_8cpp.html
index 5ee81fc..c156992 100644
--- a/docs/doxygen/html/xbdrpix_8cpp.html
+++ b/docs/doxygen/html/xbdrpix_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql/xbdrpix.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbdrpix.cpp File Reference
diff --git a/docs/doxygen/html/xbdrptbl_8cpp.html b/docs/doxygen/html/xbdrptbl_8cpp.html
index e1868e1..dbb9d11 100644
--- a/docs/doxygen/html/xbdrptbl_8cpp.html
+++ b/docs/doxygen/html/xbdrptbl_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql/xbdrptbl.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbdrptbl.cpp File Reference
diff --git a/docs/doxygen/html/xbexp_8cpp.html b/docs/doxygen/html/xbexp_8cpp.html
index ba70747..dbbc593 100644
--- a/docs/doxygen/html/xbexp_8cpp.html
+++ b/docs/doxygen/html/xbexp_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbexp.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbexp.cpp File Reference
diff --git a/docs/doxygen/html/xbexp_8h.html b/docs/doxygen/html/xbexp_8h.html
index 307d9d2..15d6430 100644
--- a/docs/doxygen/html/xbexp_8h.html
+++ b/docs/doxygen/html/xbexp_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbexp.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbexp.h File Reference
diff --git a/docs/doxygen/html/xbexp_8h_source.html b/docs/doxygen/html/xbexp_8h_source.html
index 0061537..a5195d7 100644
--- a/docs/doxygen/html/xbexp_8h_source.html
+++ b/docs/doxygen/html/xbexp_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbexp.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbexp.h Source File
diff --git a/docs/doxygen/html/xbexpnode_8cpp.html b/docs/doxygen/html/xbexpnode_8cpp.html
index e8df7a8..d26df29 100644
--- a/docs/doxygen/html/xbexpnode_8cpp.html
+++ b/docs/doxygen/html/xbexpnode_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbexpnode.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbexpnode.cpp File Reference
diff --git a/docs/doxygen/html/xbexpnode_8h.html b/docs/doxygen/html/xbexpnode_8h.html
index a72834f..079ab87 100644
--- a/docs/doxygen/html/xbexpnode_8h.html
+++ b/docs/doxygen/html/xbexpnode_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbexpnode.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbexpnode.h File Reference
diff --git a/docs/doxygen/html/xbexpnode_8h_source.html b/docs/doxygen/html/xbexpnode_8h_source.html
index f58824d..0043f29 100644
--- a/docs/doxygen/html/xbexpnode_8h_source.html
+++ b/docs/doxygen/html/xbexpnode_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbexpnode.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbexpnode.h Source File
diff --git a/docs/doxygen/html/xbfields_8cpp.html b/docs/doxygen/html/xbfields_8cpp.html
index 8b99d8e..f2cd472 100644
--- a/docs/doxygen/html/xbfields_8cpp.html
+++ b/docs/doxygen/html/xbfields_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbfields.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfields.cpp File Reference
diff --git a/docs/doxygen/html/xbfile_8cpp.html b/docs/doxygen/html/xbfile_8cpp.html
index 929f40c..26e8b99 100644
--- a/docs/doxygen/html/xbfile_8cpp.html
+++ b/docs/doxygen/html/xbfile_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbfile.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfile.cpp File Reference
diff --git a/docs/doxygen/html/xbfile_8h.html b/docs/doxygen/html/xbfile_8h.html
index 4fee508..d778f87 100644
--- a/docs/doxygen/html/xbfile_8h.html
+++ b/docs/doxygen/html/xbfile_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbfile.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbfile.h File Reference
diff --git a/docs/doxygen/html/xbfile_8h_source.html b/docs/doxygen/html/xbfile_8h_source.html
index 898a60b..11c4fcd 100644
--- a/docs/doxygen/html/xbfile_8h_source.html
+++ b/docs/doxygen/html/xbfile_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbfile.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbfile.h Source File
@@ -112,140 +112,144 @@ $(function() {
-
-
+
+ 64 xbInt16 SetHomeFolders();
- 66 const xbString & GetDirectory()
const ;
-
- 68 const xbString & GetFqFileName()
const ;
-
- 70 void SetDirectory (
const xbString &sDirectory);
- 71 void SetFileName (
const xbString &sFileName );
- 72 void SetFqFileName(
const xbString &sFqName );
-
- 74 xbUInt32 GetBlockSize ()
const ;
- 75 xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );
+
+
+
+ 69 const xbString & GetDirectory()
const ;
+
+ 71 const xbString & GetFqFileName()
const ;
+
+ 73 void SetDirectory (
const xbString &sDirectory);
+ 74 void SetFileName (
const xbString &sFileName );
+ 75 void SetFqFileName(
const xbString &sFqName );
- 77 xbInt16 GetOpenMode ()
const ;
- 78 xbInt16 GetShareMode ()
const ;
+ 77 xbUInt32 GetBlockSize ()
const ;
+ 78 xbInt16 SetBlockSize ( xbUInt32 ulBlockSize );
- 80 xbInt16 GetFileDirPart (
xbString &sFileDirPartOut )
const ;
- 81 xbInt16 GetFileDirPart (
const xbString &sCompleteFileNameIn,
xbString &sFileDirPartOut )
const ;
- 82 xbInt16 GetFileExtPart (
xbString &sFileExtPartOut )
const ;
- 83 xbInt16 GetFileExtPart (
const xbString &sCompleteFileNameIn,
xbString &sFileExtPartOut )
const ;
- 84 xbInt16 GetFileNamePart(
xbString &sFileNamePartOut )
const ;
- 85 xbInt16 GetFileNamePart(
const xbString &sCompleteFileNameIn,
xbString &sFileNamePartOut )
const ;
- 86 xbInt16 GetFileType (
xbString &sFileType )
const ;
-
- 88 xbInt16 GetXbaseFileTypeByte(
const xbString &sFileName, xbInt16 &iVersion );
- 89 xbInt16 GetXbaseFileTypeByte(
const xbString &sFileName,
unsigned char &cFileTypeByte );
- 90 xbInt16 GetXbaseFileTypeByte(
const xbString &sFileName,
unsigned char &cFileTypeByte, xbInt16 &iVersion );
- 91 xbInt16 DetermineXbaseTableVersion(
unsigned char cFileTypeByte )
const ;
- 92 xbInt16 DetermineXbaseMemoVersion(
unsigned char cFileTypeByte )
const ;
-
- 94 xbBool FileExists ()
const ;
- 95 xbBool FileExists ( xbInt16 iOption )
const ;
-
- 97 xbBool FileExists (
const xbString &sFileName, xbInt16 iOption )
const ;
-
- 99 xbBool FileIsOpen ()
const ;
-
- 101 xbInt16 ReadBlock ( xbUInt32 ulBlockNo,
size_t readSize,
void *buf );
- 102 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize,
size_t readSize,
void *buf );
- 103 xbInt16 WriteBlock( xbUInt32 ulBlockNo,
size_t writeSize,
void *buf );
-
- 105 xbInt16 GetFileSize( xbUInt64 &ullFileSize );
- 106 xbInt16 GetFileMtime( time_t &mtime );
+ 80 xbInt16 GetOpenMode ()
const ;
+ 81 xbInt16 GetShareMode ()
const ;
+
+ 83 xbInt16 GetFileDirPart (
xbString &sFileDirPartOut )
const ;
+ 84 xbInt16 GetFileDirPart (
const xbString &sCompleteFileNameIn,
xbString &sFileDirPartOut )
const ;
+ 85 xbInt16 GetFileExtPart (
xbString &sFileExtPartOut )
const ;
+ 86 xbInt16 GetFileExtPart (
const xbString &sCompleteFileNameIn,
xbString &sFileExtPartOut )
const ;
+ 87 xbInt16 GetFileNamePart(
xbString &sFileNamePartOut )
const ;
+ 88 xbInt16 GetFileNamePart(
const xbString &sCompleteFileNameIn,
xbString &sFileNamePartOut )
const ;
+ 89 xbInt16 GetFileType (
xbString &sFileType )
const ;
+
+ 91 xbInt16 GetXbaseFileTypeByte(
const xbString &sFileName, xbInt16 &iVersion );
+ 92 xbInt16 GetXbaseFileTypeByte(
const xbString &sFileName,
unsigned char &cFileTypeByte );
+ 93 xbInt16 GetXbaseFileTypeByte(
const xbString &sFileName,
unsigned char &cFileTypeByte, xbInt16 &iVersion );
+ 94 xbInt16 DetermineXbaseTableVersion(
unsigned char cFileTypeByte )
const ;
+ 95 xbInt16 DetermineXbaseMemoVersion(
unsigned char cFileTypeByte )
const ;
+
+ 97 xbBool FileExists ()
const ;
+ 98 xbBool FileExists ( xbInt16 iOption )
const ;
+
+ 100 xbBool FileExists (
const xbString &sFileName, xbInt16 iOption )
const ;
+
+ 102 xbBool FileIsOpen ()
const ;
+
+ 104 xbInt16 ReadBlock ( xbUInt32 ulBlockNo,
size_t readSize,
void *buf );
+ 105 xbInt16 ReadBlock ( xbUInt32 ulBlockNo, xbUInt32 ulBlockSize,
size_t readSize,
void *buf );
+ 106 xbInt16 WriteBlock( xbUInt32 ulBlockNo,
size_t writeSize,
void *buf );
- 108 xbDouble eGetDouble(
const char *p )
const ;
- 109 xbInt32 eGetInt32 (
const char *p )
const ;
- 110 xbUInt32 eGetUInt32(
const char *p )
const ;
- 111 xbInt16 eGetInt16 (
const char *p )
const ;
- 112 xbUInt16 eGetUInt16(
const char *p )
const ;
- 113 void ePutDouble(
char *p,
xbDouble d );
- 114 void ePutInt32 (
char *p, xbInt32 l );
- 115 void ePutUInt32(
char *p, xbUInt32 ul );
- 116 void ePutInt16 (
char *p, xbInt16 s );
- 117 void ePutUInt16(
char *p, xbUInt16 s );
-
-
-
-
- 122 xbInt16 xbFgetc ( xbInt32 &c );
- 123 xbInt16 xbFgetc (
char &c );
-
- 125 #ifdef XB_LOCKING_SUPPORT
- 126 xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset,
size_t stLen );
- 127 xbInt16 GetLockRetryCount()
const ;
- 128 void SetLockRetryCount( xbInt16 iLockRetries );
-
-
-
- 132 xbInt16 xbFopen (
const xbString &sOpenMode, xbInt16 iShareMode );
- 133 xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );
- 134 xbInt16 xbFopen (
const xbString &sMode,
const xbString &sFileName, xbInt16 iShareMode );
-
- 136 xbInt16 xbFputc ( xbInt32 c );
- 137 xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );
- 138 xbInt16 xbFputs (
const xbString &s );
- 139 xbInt16 xbFread (
void *ptr,
size_t size,
size_t nmemb );
- 140 xbInt16 xbFgets (
size_t lSize,
xbString &sLine );
-
-
- 143 xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );
+ 108 xbInt16 GetFileSize( xbUInt64 &ullFileSize );
+ 109 xbInt16 GetFileMtime( time_t &mtime );
+
+ 111 xbDouble eGetDouble(
const char *p )
const ;
+ 112 xbInt32 eGetInt32 (
const char *p )
const ;
+ 113 xbUInt32 eGetUInt32(
const char *p )
const ;
+ 114 xbInt16 eGetInt16 (
const char *p )
const ;
+ 115 xbUInt16 eGetUInt16(
const char *p )
const ;
+ 116 void ePutDouble(
char *p,
xbDouble d );
+ 117 void ePutInt32 (
char *p, xbInt32 l );
+ 118 void ePutUInt32(
char *p, xbUInt32 ul );
+ 119 void ePutInt16 (
char *p, xbInt16 s );
+ 120 void ePutUInt16(
char *p, xbUInt16 s );
+
+
+
+
+ 125 xbInt16 xbFgetc ( xbInt32 &c );
+ 126 xbInt16 xbFgetc (
char &c );
+
+ 128 #ifdef XB_LOCKING_SUPPORT
+ 129 xbInt16 xbLock ( xbInt16 iFunction, xbInt64 llOffset,
size_t stLen );
+ 130 xbInt16 GetLockRetryCount()
const ;
+ 131 void SetLockRetryCount( xbInt16 iLockRetries );
+
+
+
+ 135 xbInt16 xbFopen (
const xbString &sOpenMode, xbInt16 iShareMode );
+ 136 xbInt16 xbFopen ( xbInt16 iOpenMode, xbInt16 iShareMode );
+ 137 xbInt16 xbFopen (
const xbString &sMode,
const xbString &sFileName, xbInt16 iShareMode );
+
+ 139 xbInt16 xbFputc ( xbInt32 c );
+ 140 xbInt16 xbFputc ( xbInt32 c, xbInt32 iNoTimes );
+ 141 xbInt16 xbFputs (
const xbString &s );
+ 142 xbInt16 xbFread (
void *ptr,
size_t size,
size_t nmemb );
+ 143 xbInt16 xbFgets (
size_t lSize,
xbString &sLine );
- 145 void xbFTurnOffFileBuffering();
- 146 xbInt16 xbFwrite (
const void *ptr,
size_t lSize,
size_t lNmemb );
+
+ 146 xbInt16 xbFseek ( xbInt64 llOffset, xbInt32 whence );
- 148 xbInt16 xbReadUntil (
const char cDelim,
xbString &sOut );
- 149 xbInt16 xbRemove (
const xbString &sFileName, xbInt16 iOption );
- 150 xbInt16 xbRemove (
const xbString &sFileName );
-
-
-
-
+ 148 void xbFTurnOffFileBuffering();
+ 149 xbInt16 xbFwrite (
const void *ptr,
size_t lSize,
size_t lNmemb );
+
+ 151 xbInt16 xbReadUntil (
const char cDelim,
xbString &sOut );
+ 152 xbInt16 xbRemove (
const xbString &sFileName, xbInt16 iOption );
+ 153 xbInt16 xbRemove (
const xbString &sFileName );
+
- 156 xbInt16 xbTruncate ( xbInt64 llSize );
- 157 xbInt16 NameSuffixMissing(
const xbString &sFileName, xbInt16 iOption )
const ;
+
+
- 159 #ifdef XB_DEBUG_SUPPORT
- 160 xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo,
size_t lBlockSize );
-
-
-
-
-
-
+ 159 xbInt16 xbTruncate ( xbInt64 llSize );
+ 160 xbInt16 NameSuffixMissing(
const xbString &sFileName, xbInt16 iOption )
const ;
+
+ 162 #ifdef XB_DEBUG_SUPPORT
+ 163 xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo,
size_t lBlockSize );
+ 164 xbInt16 DumpMemToDisk (
char *p,
size_t lBlockSize );
+
+
-
-
-
-
-
-
- 174 xbUInt32 ulBlockSize;
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ 178 xbUInt32 ulBlockSize;
- 180 #ifdef XB_LOCKING_SUPPORT
- 181 xbInt16 iLockRetries;
-
+
+
+
- 184 #ifdef HAVE_SETENDOFFILE_F
-
+ 184 #ifdef XB_LOCKING_SUPPORT
+ 185 xbInt16 iLockRetries;
-
-
-
-
-
-
+ 188 #ifdef HAVE_SETENDOFFILE_F
+
+
+
+
+
+
+
+
+
Class for handling low level file I/O.
Definition: xbfile.h:56
xbInt16 xbFopen(xbInt16 iOpenMode)
-xbXBase * xbase
Definition: xbfile.h:166
+xbXBase * xbase
Definition: xbfile.h:170
Class for handling shared system variables.
Definition: xbssv.h:59
Class for handling string data.
Definition: xbstring.h:50
xbXbase class.
Definition: xbxbase.h:123
diff --git a/docs/doxygen/html/xbfilter_8cpp.html b/docs/doxygen/html/xbfilter_8cpp.html
index c04e8ae..5af181c 100644
--- a/docs/doxygen/html/xbfilter_8cpp.html
+++ b/docs/doxygen/html/xbfilter_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbfilter.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfilter.cpp File Reference
diff --git a/docs/doxygen/html/xbfilter_8h.html b/docs/doxygen/html/xbfilter_8h.html
index 4b47ef8..211aada 100644
--- a/docs/doxygen/html/xbfilter_8h.html
+++ b/docs/doxygen/html/xbfilter_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbfilter.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbfilter.h File Reference
diff --git a/docs/doxygen/html/xbfilter_8h_source.html b/docs/doxygen/html/xbfilter_8h_source.html
index 0521f4e..854676f 100644
--- a/docs/doxygen/html/xbfilter_8h_source.html
+++ b/docs/doxygen/html/xbfilter_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbfilter.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbfilter.h Source File
@@ -109,20 +109,20 @@ $(function() {
37 class XBDLLEXPORT xbFilter {
-
+ 40 xbFilter(
xbDbf *dbf );
42 xbInt16 Set( xbString &sFilterExpression );
- 43 xbInt16 GetFirstRecord( xbInt16 iOpt = 1 );
- 44 xbInt16 GetNextRecord ( xbInt16 iOpt = 1 );
- 45 xbInt16 GetPrevRecord ( xbInt16 iOpt = 1 );
- 46 xbInt16 GetLastRecord ( xbInt16 iOpt = 1 );
- 47 void SetLimit( xbInt32 ulLimit );
- 48 xbInt32 GetLimit()
const ;
-
- 50 xbInt32 GetQryCnt()
const ;
-
- 52 #ifdef XB_INDEX_SUPPORT
-
+ 43 xbInt16 Set(
const char *sFilterExpression );
+ 44 xbInt16 GetFirstRecord( xbInt16 iOpt = 1 );
+ 45 xbInt16 GetNextRecord ( xbInt16 iOpt = 1 );
+ 46 xbInt16 GetPrevRecord ( xbInt16 iOpt = 1 );
+ 47 xbInt16 GetLastRecord ( xbInt16 iOpt = 1 );
+ 48 void SetLimit( xbInt32 ulLimit );
+ 49 xbInt32 GetLimit()
const ;
+
+ 51 xbInt32 GetQryCnt()
const ;
+
+ 53 #ifdef XB_INDEX_SUPPORT
54 xbInt16 GetFirstRecordIx( xbInt16 iOpt = 1 );
55 xbInt16 GetNextRecordIx ( xbInt16 iOpt = 1 );
56 xbInt16 GetPrevRecordIx ( xbInt16 iOpt = 1 );
@@ -131,7 +131,7 @@ $(function() {
-
+
@@ -149,7 +149,6 @@ $(function() {
Definition: xbdate.cpp:19
-class XBDLLEXPORT xbXBase
Definition: xbssv.h:27
class XBDLLEXPORT xbDbf
Definition: xbtblmgr.h:28
diff --git a/docs/doxygen/html/xbfuncs_8cpp.html b/docs/doxygen/html/xbfuncs_8cpp.html
index 2bf9e11..6cc894f 100644
--- a/docs/doxygen/html/xbfuncs_8cpp.html
+++ b/docs/doxygen/html/xbfuncs_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbfuncs.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbfuncs.cpp File Reference
diff --git a/docs/doxygen/html/xbindex_8h.html b/docs/doxygen/html/xbindex_8h.html
index e78a885..1181fa0 100644
--- a/docs/doxygen/html/xbindex_8h.html
+++ b/docs/doxygen/html/xbindex_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbindex.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbindex.h File Reference
diff --git a/docs/doxygen/html/xbindex_8h_source.html b/docs/doxygen/html/xbindex_8h_source.html
index ef3da6e..823e568 100644
--- a/docs/doxygen/html/xbindex_8h_source.html
+++ b/docs/doxygen/html/xbindex_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbindex.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbindex.h Source File
diff --git a/docs/doxygen/html/xbinsert_8cpp.html b/docs/doxygen/html/xbinsert_8cpp.html
index 5d22052..3dfc6a6 100644
--- a/docs/doxygen/html/xbinsert_8cpp.html
+++ b/docs/doxygen/html/xbinsert_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql/xbinsert.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbinsert.cpp File Reference
diff --git a/docs/doxygen/html/xbixbase_8cpp.html b/docs/doxygen/html/xbixbase_8cpp.html
index ec52c20..71f1dc6 100644
--- a/docs/doxygen/html/xbixbase_8cpp.html
+++ b/docs/doxygen/html/xbixbase_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbixbase.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbixbase.cpp File Reference
diff --git a/docs/doxygen/html/xbixmdx_8cpp.html b/docs/doxygen/html/xbixmdx_8cpp.html
index 89de78c..7d15f64 100644
--- a/docs/doxygen/html/xbixmdx_8cpp.html
+++ b/docs/doxygen/html/xbixmdx_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbixmdx.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbixmdx.cpp File Reference
diff --git a/docs/doxygen/html/xbixndx_8cpp.html b/docs/doxygen/html/xbixndx_8cpp.html
index b1bebfa..26fc15e 100644
--- a/docs/doxygen/html/xbixndx_8cpp.html
+++ b/docs/doxygen/html/xbixndx_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbixndx.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbixndx.cpp File Reference
diff --git a/docs/doxygen/html/xblnklst_8h.html b/docs/doxygen/html/xblnklst_8h.html
index 2b8d005..7d4be72 100644
--- a/docs/doxygen/html/xblnklst_8h.html
+++ b/docs/doxygen/html/xblnklst_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xblnklst.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnklst.h File Reference
diff --git a/docs/doxygen/html/xblnklst_8h_source.html b/docs/doxygen/html/xblnklst_8h_source.html
index d08082a..c8ed015 100644
--- a/docs/doxygen/html/xblnklst_8h_source.html
+++ b/docs/doxygen/html/xblnklst_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xblnklst.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnklst.h Source File
@@ -329,7 +329,7 @@ $(function() {
Definition: xbdate.cpp:19
#define XB_INVALID_NODELINK
Definition: xbretcod.h:28
-#define XB_NOT_FOUND
Definition: xbretcod.h:39
+#define XB_NOT_FOUND
Definition: xbretcod.h:40
#define XB_NO_ERROR
Definition: xbretcod.h:24
#define XB_NO_MEMORY
Definition: xbretcod.h:25
diff --git a/docs/doxygen/html/xblnklstord_8h.html b/docs/doxygen/html/xblnklstord_8h.html
index f68fe19..44e4332 100644
--- a/docs/doxygen/html/xblnklstord_8h.html
+++ b/docs/doxygen/html/xblnklstord_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xblnklstord.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnklstord.h File Reference
diff --git a/docs/doxygen/html/xblnklstord_8h_source.html b/docs/doxygen/html/xblnklstord_8h_source.html
index e955255..51c83ec 100644
--- a/docs/doxygen/html/xblnklstord_8h_source.html
+++ b/docs/doxygen/html/xblnklstord_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xblnklstord.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnklstord.h Source File
@@ -440,7 +440,7 @@ $(function() {
Definition: xbdate.cpp:19
short int xbBool
Definition: xbtypes.h:24
#define XB_INVALID_NODELINK
Definition: xbretcod.h:28
-#define XB_NOT_FOUND
Definition: xbretcod.h:39
+#define XB_NOT_FOUND
Definition: xbretcod.h:40
#define XB_NO_ERROR
Definition: xbretcod.h:24
#define XB_KEY_NOT_UNIQUE
Definition: xbretcod.h:29
#define XB_NO_MEMORY
Definition: xbretcod.h:25
diff --git a/docs/doxygen/html/xblnknod_8h.html b/docs/doxygen/html/xblnknod_8h.html
index bc75c3a..381c054 100644
--- a/docs/doxygen/html/xblnknod_8h.html
+++ b/docs/doxygen/html/xblnknod_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xblnknod.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnknod.h File Reference
diff --git a/docs/doxygen/html/xblnknod_8h_source.html b/docs/doxygen/html/xblnknod_8h_source.html
index a366dc3..db7f8d3 100644
--- a/docs/doxygen/html/xblnknod_8h_source.html
+++ b/docs/doxygen/html/xblnknod_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xblnknod.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblnknod.h Source File
diff --git a/docs/doxygen/html/xblog_8cpp.html b/docs/doxygen/html/xblog_8cpp.html
index 546a521..5114929 100644
--- a/docs/doxygen/html/xblog_8cpp.html
+++ b/docs/doxygen/html/xblog_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xblog.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xblog.cpp File Reference
diff --git a/docs/doxygen/html/xblog_8h.html b/docs/doxygen/html/xblog_8h.html
index 986b927..b53711a 100644
--- a/docs/doxygen/html/xblog_8h.html
+++ b/docs/doxygen/html/xblog_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xblog.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblog.h File Reference
diff --git a/docs/doxygen/html/xblog_8h_source.html b/docs/doxygen/html/xblog_8h_source.html
index 16bdee2..ef5ef49 100644
--- a/docs/doxygen/html/xblog_8h_source.html
+++ b/docs/doxygen/html/xblog_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xblog.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xblog.h Source File
diff --git a/docs/doxygen/html/xbmemo3_8cpp.html b/docs/doxygen/html/xbmemo3_8cpp.html
index a40475e..e1bdf62 100644
--- a/docs/doxygen/html/xbmemo3_8cpp.html
+++ b/docs/doxygen/html/xbmemo3_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbmemo3.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbmemo3.cpp File Reference
diff --git a/docs/doxygen/html/xbmemo4_8cpp.html b/docs/doxygen/html/xbmemo4_8cpp.html
index 034208e..99b2580 100644
--- a/docs/doxygen/html/xbmemo4_8cpp.html
+++ b/docs/doxygen/html/xbmemo4_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbmemo4.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbmemo4.cpp File Reference
diff --git a/docs/doxygen/html/xbmemo_8cpp.html b/docs/doxygen/html/xbmemo_8cpp.html
index e70c07f..706b54a 100644
--- a/docs/doxygen/html/xbmemo_8cpp.html
+++ b/docs/doxygen/html/xbmemo_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/core/xbmemo.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/core/xbmemo.cpp File Reference
diff --git a/docs/doxygen/html/xbmemo_8h.html b/docs/doxygen/html/xbmemo_8h.html
index d592586..409d3ce 100644
--- a/docs/doxygen/html/xbmemo_8h.html
+++ b/docs/doxygen/html/xbmemo_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbmemo.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbmemo.h File Reference
diff --git a/docs/doxygen/html/xbmemo_8h_source.html b/docs/doxygen/html/xbmemo_8h_source.html
index a163c3c..da8fab4 100644
--- a/docs/doxygen/html/xbmemo_8h_source.html
+++ b/docs/doxygen/html/xbmemo_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbmemo.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbmemo.h Source File
diff --git a/docs/doxygen/html/xbretcod_8h.html b/docs/doxygen/html/xbretcod_8h.html
index 7fbc99c..d5ac672 100644
--- a/docs/doxygen/html/xbretcod_8h.html
+++ b/docs/doxygen/html/xbretcod_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbretcod.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbretcod.h File Reference
@@ -95,6 +95,8 @@ Macros
#define XB_KEY_NOT_UNIQUE -121
+#define XB_MEMCPY_ERROR -122
+
#define XB_FILE_EXISTS -200
#define XB_ALREADY_OPEN -201
@@ -141,6 +143,10 @@ Macros
#define XB_LIMIT_REACHED -222
+#define XB_BLOCKREAD_NOT_ENABLED -223
+
+#define XB_DIRECTORY_ERROR -224
+
#define XB_INVALID_FIELD_TYPE -300
#define XB_INVALID_FIELD_NO -301
@@ -205,6 +211,20 @@ Macros
+
+
+
+◆ XB_BLOCKREAD_NOT_ENABLED
+
+
+
+
+
+ #define XB_BLOCKREAD_NOT_ENABLED -223
+
+
+
+
@@ -261,6 +281,20 @@ Macros
+
+
+
+◆ XB_DIRECTORY_ERROR
+
+
+
+
+
+ #define XB_DIRECTORY_ERROR -224
+
+
+
+
@@ -751,6 +785,20 @@ Macros
+
+
+
+◆ XB_MEMCPY_ERROR
+
+
+
+
+
+ #define XB_MEMCPY_ERROR -122
+
+
+
+
diff --git a/docs/doxygen/html/xbretcod_8h_source.html b/docs/doxygen/html/xbretcod_8h_source.html
index af195cb..95cf8c5 100644
--- a/docs/doxygen/html/xbretcod_8h_source.html
+++ b/docs/doxygen/html/xbretcod_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbretcod.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbretcod.h Source File
@@ -74,7 +74,7 @@ $(function() {
-
+
@@ -99,71 +99,74 @@ $(function() {
27 #define XB_DUP_TABLE_OR_ALIAS -110
28 #define XB_INVALID_NODELINK -120
29 #define XB_KEY_NOT_UNIQUE -121
-
- 31 #define XB_FILE_EXISTS -200
- 32 #define XB_ALREADY_OPEN -201
- 33 #define XB_DBF_FILE_NOT_OPEN -202
- 34 #define XB_FILE_NOT_FOUND -203
- 35 #define XB_FILE_TYPE_NOT_SUPPORTED -204
- 36 #define XB_RENAME_ERROR -205
- 37 #define XB_INVALID_OBJECT -206
- 38 #define XB_NOT_OPEN -207
- 39 #define XB_NOT_FOUND -208
- 40 #define XB_OPEN_ERROR -209
- 41 #define XB_CLOSE_ERROR -210
- 42 #define XB_SEEK_ERROR -211
- 43 #define XB_READ_ERROR -212
- 44 #define XB_WRITE_ERROR -213
-
-
- 47 #define XB_INVALID_BLOCK_SIZE -216
- 48 #define XB_INVALID_BLOCK_NO -217
- 49 #define XB_INVALID_RECORD -218
- 50 #define XB_DELETE_FAILED -219
- 51 #define XB_INVALID_TABLE_NAME -220
-
- 53 #define XB_LIMIT_REACHED -222
-
- 55 #define XB_INVALID_FIELD_TYPE -300
- 56 #define XB_INVALID_FIELD_NO -301
- 57 #define XB_INVALID_DATA -302
- 58 #define XB_INVALID_FIELD_NAME -303
- 59 #define XB_INVALID_MEMO_FIELD -304
- 60 #define XB_INVALID_FIELD -305
- 61 #define XB_INVALID_FIELD_LEN -306
- 62 #define XB_INVALID_DATE -307
-
- 64 #define XB_INVALID_LOCK_OPTION -400
- 65 #define XB_LOCK_FAILED -401
- 66 #define XB_TABLE_NOT_LOCKED -402
-
- 68 #define XB_PARSE_ERROR -500
- 69 #define XB_INVALID_FUNCTION -501
- 70 #define XB_INVALID_PARM -502
- 71 #define XB_INCONSISTENT_PARM_LENS -503
- 72 #define XB_INCOMPATIBLE_OPERANDS -504
- 73 #define XB_UNBALANCED_PARENS -505
- 74 #define XB_UNBALANCED_QUOTES -506
- 75 #define XB_INVALID_EXPRESSION -507
-
- 77 #define XB_INVALID_KEYNO -600
- 78 #define XB_INVALID_INDEX -601
- 79 #define XB_INVALID_TAG -602
- 80 #define XB_INVALID_PAGE -603
-
-
- 83 #define XB_SYNTAX_ERROR -700
+ 30 #define XB_MEMCPY_ERROR -122
+
+ 32 #define XB_FILE_EXISTS -200
+ 33 #define XB_ALREADY_OPEN -201
+ 34 #define XB_DBF_FILE_NOT_OPEN -202
+ 35 #define XB_FILE_NOT_FOUND -203
+ 36 #define XB_FILE_TYPE_NOT_SUPPORTED -204
+ 37 #define XB_RENAME_ERROR -205
+ 38 #define XB_INVALID_OBJECT -206
+ 39 #define XB_NOT_OPEN -207
+ 40 #define XB_NOT_FOUND -208
+ 41 #define XB_OPEN_ERROR -209
+ 42 #define XB_CLOSE_ERROR -210
+ 43 #define XB_SEEK_ERROR -211
+ 44 #define XB_READ_ERROR -212
+ 45 #define XB_WRITE_ERROR -213
+
+
+ 48 #define XB_INVALID_BLOCK_SIZE -216
+ 49 #define XB_INVALID_BLOCK_NO -217
+ 50 #define XB_INVALID_RECORD -218
+ 51 #define XB_DELETE_FAILED -219
+ 52 #define XB_INVALID_TABLE_NAME -220
+
+ 54 #define XB_LIMIT_REACHED -222
+ 55 #define XB_BLOCKREAD_NOT_ENABLED -223
+ 56 #define XB_DIRECTORY_ERROR -224
+
+ 58 #define XB_INVALID_FIELD_TYPE -300
+ 59 #define XB_INVALID_FIELD_NO -301
+ 60 #define XB_INVALID_DATA -302
+ 61 #define XB_INVALID_FIELD_NAME -303
+ 62 #define XB_INVALID_MEMO_FIELD -304
+ 63 #define XB_INVALID_FIELD -305
+ 64 #define XB_INVALID_FIELD_LEN -306
+ 65 #define XB_INVALID_DATE -307
+
+ 67 #define XB_INVALID_LOCK_OPTION -400
+ 68 #define XB_LOCK_FAILED -401
+ 69 #define XB_TABLE_NOT_LOCKED -402
+
+ 71 #define XB_PARSE_ERROR -500
+ 72 #define XB_INVALID_FUNCTION -501
+ 73 #define XB_INVALID_PARM -502
+ 74 #define XB_INCONSISTENT_PARM_LENS -503
+ 75 #define XB_INCOMPATIBLE_OPERANDS -504
+ 76 #define XB_UNBALANCED_PARENS -505
+ 77 #define XB_UNBALANCED_QUOTES -506
+ 78 #define XB_INVALID_EXPRESSION -507
+
+ 80 #define XB_INVALID_KEYNO -600
+ 81 #define XB_INVALID_INDEX -601
+ 82 #define XB_INVALID_TAG -602
+ 83 #define XB_INVALID_PAGE -603
- 86 #define XB_MAX_ERROR_NO -999
+ 86 #define XB_SYNTAX_ERROR -700
-
+ 89 #define XB_MAX_ERROR_NO -999
-
-
+
+
+
+
+
Definition: xbdate.cpp:19
diff --git a/docs/doxygen/html/xbselect_8cpp.html b/docs/doxygen/html/xbselect_8cpp.html
new file mode 100644
index 0000000..e21f0d9
--- /dev/null
+++ b/docs/doxygen/html/xbselect_8cpp.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbselect.cpp File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xbase64 4.0.1
+
+ C++ Library for handling Xbase (DBF) format type files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doxygen/html/xbset_8cpp.html b/docs/doxygen/html/xbset_8cpp.html
index 6d76230..7b8c360 100644
--- a/docs/doxygen/html/xbset_8cpp.html
+++ b/docs/doxygen/html/xbset_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql/xbset.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbset.cpp File Reference
diff --git a/docs/doxygen/html/xbsql_8cpp.html b/docs/doxygen/html/xbsql_8cpp.html
index b3dff71..334b5f0 100644
--- a/docs/doxygen/html/xbsql_8cpp.html
+++ b/docs/doxygen/html/xbsql_8cpp.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/sql/xbsql.cpp File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/sql/xbsql.cpp File Reference
diff --git a/docs/doxygen/html/xbsql_8h.html b/docs/doxygen/html/xbsql_8h.html
index 33f8b86..bae3261 100644
--- a/docs/doxygen/html/xbsql_8h.html
+++ b/docs/doxygen/html/xbsql_8h.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbsql.h File Reference
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbsql.h File Reference
diff --git a/docs/doxygen/html/xbsql_8h_source.html b/docs/doxygen/html/xbsql_8h_source.html
index 4f38716..d36d1b7 100644
--- a/docs/doxygen/html/xbsql_8h_source.html
+++ b/docs/doxygen/html/xbsql_8h_source.html
@@ -5,7 +5,7 @@
-Xbase64: /mnt/1Tdata/xbase/xbase64-4.0.3/src/include/xbsql.h Source File
+Xbase64: /mnt/1Tdata/xbase/xbase64-4.1.0/src/include/xbsql.h Source File
@@ -101,53 +101,139 @@ $(function() {
- 32 class XBDLLEXPORT xbSql :
public xbSsv {
-
-
-
-
-
- 38 xbInt16 ExecuteNonQuery(
const xbString &sCmdLine );
-
-
-
-
-
+ 32 struct XBDLLEXPORT xbSqlFld{
+
+
+
+
+
+
+
+
+
+
+
- 45 xbInt16 SqlAlterTable(
const xbString &sCmdLine );
+ 45 struct XBDLLEXPORT xbTblJoin {
- 47 xbInt16 SqlCreateTable(
const xbString &sCmdLine );
-
- 49 xbInt16 SqlDelete(
const xbString &sCmdLine );
-
- 51 xbInt16 SqlDropTable(
const xbString &sCmdLine );
-
-
- 54 #ifdef XB_INDEX_SUPPORT
- 55 xbInt16 SqlCreateIndex(
const xbString &sCmdLine );
- 56 xbInt16 SqlDropIndex(
const xbString &sCmdLine );
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
- 65 xbInt16 SqlInsert(
const xbString &sCmLine );
- 66 xbInt16 SqlSet(
const xbString &sCmdLine );
- 67 xbInt16 SqlUse(
const xbString &sCmdLine );
-
-
-
+
+ 60 xbLinkList<xbTblJoin *> llSubList;
+
+
+
+
+
+ 66 class XBDLLEXPORT xbStmt :
public xbSsv{
+
+
+
+
-
-
-
-
-
+ 72 #ifdef XB_DEBUG_SUPPORT
+ 73 xbInt16 DumpStmtInternals();
+
+
+
+ 77 xbInt16 ExecuteQuery(
const xbString &sCmdLine );
+
+
+
+
+
+
+
+
+
+
+
+ 89 xbInt16 AddQryTbl(
const xbString &sTable,
const xbString &sAlias,
const xbString &sExpression,
const char cJoinType );
+ 90 xbInt16 CvtSqlExp2DbaseExp(
const xbString &sExpIn, xbString &sExpOut );
+ 91 xbInt16 GetNextFromSeg(
const xbString &sLineIn, xbString &sFromSegOut );
+ 92 xbUInt32 GetNextToken(
const xbString &sCmdLineIn, xbString &sTokenOut, xbUInt32 ulStartPos );
+ 93 xbInt16 GetParenCnt(
const xbString &sToken );
+ 94 xbInt16 ParseFromStmt(
const xbString &sFromLine );
+ 95 xbInt16 ParseStmt(
const xbString &sCmdLine );
+ 96 xbInt16 ProcessFromSeg(
const xbString &sFromStmtSeg );
+ 97 xbInt16 UpdateJoinList(
char cType,
const xbString &sTableName,
const xbString &sAlias,
const xbString &sExp,
xbDbf *d, xbExp *e );
+
+
+
+
+ 102 xbTblJoin * pTblList;
+
+
+
+
+
+
+
+
+
+
+ 113 xbUInt32 ulOrderByPos;
+ 114 xbUInt32 ulGroupByPos;
+ 115 xbUInt32 ulHavingPos;
+
+
+
+
+
+ 121 class XBDLLEXPORT xbSql :
public xbSsv {
+
+
+
+
+
+ 127 xbInt16 ExecuteNonQuery(
const xbString &sCmdLine );
+
+
+
+
+
+
+ 134 xbInt16 SqlAlterTable(
const xbString &sCmdLine );
+ 135 xbInt16 SqlCreateTable(
const xbString &sCmdLine );
+ 136 xbInt16 SqlDelete(
const xbString &sCmdLine );
+ 137 xbInt16 SqlDropTable(
const xbString &sCmdLine );
+
+ 139 #ifdef XB_INDEX_SUPPORT
+ 140 xbInt16 SqlCreateIndex(
const xbString &sCmdLine );
+ 141 xbInt16 SqlDropIndex(
const xbString &sCmdLine );
+
+
+
+
+
+
+
+ 149 void SqlHelp()
const ;
+ 150 xbInt16 SqlInsert(
const xbString &sCmLine );
+ 151 xbInt16 SqlSet(
const xbString &sCmdLine );
+ 152 xbInt16 SqlUse(
const xbString &sCmdLine );
+
+
+
+
+
+
+
+
+
Definition: xbdate.cpp:19
class XBDLLEXPORT xbXBase
Definition: xbssv.h:27
+class XBDLLEXPORT xbDbf
Definition: xbtblmgr.h:28
Documentation Table Of Contents
Section 1 - Xbase Concepts
Section 2 - Classes and Objects
Section 3 - Appendices
diff --git a/docs/html/xbac.html b/docs/html/xbac.html
index 0b0fb0b..e022890 100755
--- a/docs/html/xbac.html
+++ b/docs/html/xbac.html
@@ -3,7 +3,7 @@
Xbase DBMS Appendix C
Library Build Compile Options
-Chapter Updated 12/09/22
+Chapter Updated 2/1/23
@@ -26,9 +26,10 @@
XB_EXPRESSION_SUPPORT Include Expression support? Prereq: XB_FUNCTION_SUPPORT and XB_LINKLIST_SUPPORT
XB_NDX_SUPPORT Include NDX Index support? Prereq: XB_EXPRESSION_SUPPORT
XB_MDX_SUPPORT Include MDX Index support? Prereq: XB_EXPRESSION_SUPPORT
-XB_SQL_SUPPORT Include SQL support? Prereq: XB_MEMO_SUPPORT and XB_DBF4_SUPPORT
+XB_SQL_SUPPORT Include SQL support? Prereq: XB_MEMO_SUPPORT and XB_DBF4_SUPPORT and XB_BLOCKREAD_SUPPORT and XB_EXPRESSION_SUPPORT
XB_INF_SUPPORT Include INF support (Provides auto open functions for NDX indices)
XB_FILTER_SUPPORT Include Filter support Prereq: XB_EXPRESSION_SUPPORT
+XB_BLOCKREAD_SUPPORT Include Block Read support
@@ -66,8 +67,10 @@ verify there is a CmakeLists.txt file. That file is the main librbary
Debug Support (Option: XB_DEBUG_SUPPORT)
-The following methods are included from the library when the XB_DEBUG_OPTION is turned on. They
-are mainly used for library debugging purposes and can be safely left turned off.
+The following methods are included in the build when the XB_DEBUG_OPTION is turned on and are mainly used for library debugging purposes.
+The option can be safely left turned off.
+The dump routines print output to sdtout or an open log file.
+
Method/Function Description
xbDate::Dump() Dump the xbDate object internals to stdout
@@ -77,6 +80,7 @@ are mainly used for library debugging purposes and can be safely left turned off
xbExp::DumpTree() Dump expression token tree
xbExpNode::DumpToken() Dump expression node values
xbFile::DumpBlockToDisk Dump specified block of data to a disk file
+xbFile::DumpMemToDisk Dump specified memory to a disk file
xbIx::DumpNode Dump index node header
xbIxMdx::DumpBlock Dump MDX index block
xbIxMdx::DumpFreeBlocks Dump MDX free block chain
@@ -93,6 +97,7 @@ are mainly used for library debugging purposes and can be safely left turned off
xbMemoDbt4::DumpMemoInternals() Dump V4 memo file internals
xbString::Dump() Dump string internals
xbString::DumpHex() Dump string internals in hex
+xbBlockRead::DumpReadBlockInternals Dump sequential read block internals
diff --git a/docs/html/xbae.html b/docs/html/xbae.html
index 5f1dce6..e860911 100755
--- a/docs/html/xbae.html
+++ b/docs/html/xbae.html
@@ -3,7 +3,7 @@
Xbase DBMS Appendix E
Eror Codes
-Chapter Updated 12/09/22
+Chapter Updated 1/31/23
Error Codes and Error Processing
@@ -55,11 +55,13 @@ Error codes are defined in the xbretcod.h file.
XB_BOF -215 file
XB_INVALID_BLOCK_SIZE -216 file
XB_INVALID_BLOCK_NO -217 file
- XB_INVALID_RECORD -218 file
+ XB_INVALID_RECORD -218 file
XB_DELETE_FAILED -219 file
XB_INVALID_TABLE_NAME -220 file
XB_EMPTY -221 file
XB_LIMIT_REACHED -222 file
+ XB_BLOCKREAD_NOT_ENABLED -223 file
+ XB_DIRECTORY_ERROR -224
XB_INVALID_FIELD_TYPE -300 field
XB_INVALID_FIELD_NO -301 field
XB_INVALID_DATA -302 field
diff --git a/docs/html/xbc15.html b/docs/html/xbc15.html
index 136724d..fde33b8 100755
--- a/docs/html/xbc15.html
+++ b/docs/html/xbc15.html
@@ -1,51 +1,96 @@
+
Xbase DBMS Chapter 15
-Class Inventory
-Chapter Updated 12/24/22
-
-Class Descriptions
-
-
-
-Class Description
-xbBcd Supports binary coded deciemal data
-xbDate Support date operations on a given date formatted as YYYYMMDD
-xbDbf Base class for DBF file handling. If you are adding support for a new file type, derive new file type class from this.
-xbDbf3 Derived from xbDbf, supports DBase V3 files
-xbDbf4 Derived from xbDbf, supports DBase V4 files
-xbExp Class for supporting expression logic
-xbExpNode Class definition of a single node, utilized by xbExp
-xbFile Main file class. If you are porting this library to another platform, start here
-xbFilter Supports filters
-xbIx Base class for index file support. If you are adding support for a new index type, derive new index type class from this.
-xbIxNdx Derived from xbIx, supports NDX style indices.
-xbIxMdx Derived from xbIx, supports MDX style indices
-xbLinkList Class supporting linked list functionality
-xbLinkListOrd Class supporting ordered linked list functionality
-xbLinkListNode Class defining one node, used by xbLinkList and xbLinkListOrd
-xbLog Class supporting general log file activity
-xbMemo Base class for supporting memo (.DBT) files. If you are adding support for a new memo type, derive new memo type class from this.
-xbMemoDbt3 Derived from xbMemo, supports V3 Memo files
-xbMemoDbt4 Derived from xbMemo, supports V3 Memo files
-xbSql Supports SQL access
-xbSsv Base class, shared system values
-xbString String handling class
-xbTag Class to support index tags
-xbTblMgr Class used internally in the library for managing multiple open files/tables
-xbUda Class for supporting fields for the xbSql functions. Stands for User data area
-xbXBase Class to tie everything together. Every application program starts with one of these
-
-
+Block Read Functionality
+Chapter Updated 2/1/23
-
-
-Fix me...
-
+
Block Reads
+
+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.
+
+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.
+
+The logic is all handled internally within the library, all that is needed is to enable it and the library handles the rest.
+
+One Caveat
+This functionality was originally designed with reporting in mind and doesn't currently have any auto locking associated with it.
+
+
+Sample Code
+See example code below for how to enable and disable the feature.
+
+
+
+
+#include "xbase.h"
+using namespace xb;
+
+int main(int ac,char** av)
+{
+ xbXBase x;
+ xbInt16 iRc;
+ x.EnableMsgLogging();
+ x.SetLogSize( 1000000L );
+
+ if (ac <= 1) {
+ std::cout << "Usage: xb_dumprecs filename..." << std::endl;
+ return 1;
+ }
+
+ xbDbf *MyFile = NULL;
+ if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;
+ x.DisplayError( iRc );
+ return 0;
+ }
+
+// std::cout << "Processing file sequentially from beginning..." << std::endl;
+
+
+
+ // turn on Block Read Processing
+ #ifdef XB_BLOCKREAD_SUPPORT
+ MyFile->EnableBlockReadProcessing();
+ #endif
+
+
+ xbUInt32 j = 0;
+ xbUInt32 ulRecCnt = 0;
+
+ iRc = MyFile->GetRecordCnt( ulRecCnt );
+
+ if( iRc < XB_NO_ERROR )
+ return iRc;
+ while( j < ulRecCnt ){
+ if( j == 0 )
+ iRc = MyFile->DumpRecord(++j, 2, 2 );
+ else
+ iRc = MyFile->DumpRecord(++j, 2, 1 );
+ if( iRc != XB_NO_ERROR ){
+ x.DisplayError( iRc );
+ return 1;
+ }
+ }
+ std::cout << j << " Records processed." << std::endl;
+
+
+ // optionally turn off Block Read Processing
+ #ifdef XB_BLOCKREAD_SUPPORT
+ MyFile->DisableBlockReadProcessing();
+ #endif
+
+ MyFile->Close();
+ return 0;
+}
+
+
-
+
diff --git a/docs/html/xbc16.html b/docs/html/xbc16.html
new file mode 100755
index 0000000..873264d
--- /dev/null
+++ b/docs/html/xbc16.html
@@ -0,0 +1,52 @@
+
+
+Xbase DBMS Chapter 16
+
+Class Inventory
+Chapter Updated 2/1/23
+
+Class Descriptions
+
+
+
+Class Description
+xbBcd Supports binary coded decimal data
+xbBlockRead Supports block read functionality for improved sequential file access performance.
+xbDate Support date operations on a given date formatted as YYYYMMDD
+xbDbf Base class for DBF file handling. If you are adding support for a new file type, derive new file type class from this.
+xbDbf3 Derived from xbDbf, supports DBase V3 files
+xbDbf4 Derived from xbDbf, supports DBase V4 files
+xbExp Class for supporting expression logic
+xbExpNode Class definition of a single node, utilized by xbExp
+xbFile Main file class. If you are porting this library to another platform, start here
+xbFilter Supports filters
+xbIx Base class for index file support. If you are adding support for a new index type, derive new index type class from this.
+xbIxNdx Derived from xbIx, supports NDX style indices.
+xbIxMdx Derived from xbIx, supports MDX style indices
+xbLinkList Class supporting linked list functionality
+xbLinkListOrd Class supporting ordered linked list functionality
+xbLinkListNode Class defining one node, used by xbLinkList and xbLinkListOrd
+xbLog Class supporting general log file activity
+xbMemo Base class for supporting memo (.DBT) files. If you are adding support for a new memo type, derive new memo type class from this.
+xbMemoDbt3 Derived from xbMemo, supports V3 Memo files
+xbMemoDbt4 Derived from xbMemo, supports V3 Memo files
+xbSql Supports SQL access
+xbSsv Base class, shared system values
+xbString String handling class
+xbTag Class to support index tags
+xbTblMgr Class used internally in the library for managing multiple open files/tables
+xbUda Class for supporting fields for the xbSql functions. Stands for User data area
+xbXBase Class to tie everything together. Every application program starts with one of these
+
+
+
+
+
+Fix me...
+
+
+
+
+
+
+
diff --git a/docs/html/xbc17.html b/docs/html/xbc17.html
new file mode 100755
index 0000000..c0b2208
--- /dev/null
+++ b/docs/html/xbc17.html
@@ -0,0 +1,219 @@
+
+
+Xbase DBMS Chapter 17
+
+Class xbSsv
+Chapter Updated 2/7/23
+
+Class xbSsv - Shared System Values.
+
+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.
+Additionally, there are a few other misc routines contained in this class that are available to all
+subordinate classes/objects.
+
+
+
+
+
+Method Description
+
+void BitDump( unsigned char c ) const void BitDump( char c ) const These routines dump the bits for a specified char field to stdout.
+xbBool BitSet( unsigned char c, xbInt16 iBitNo ) const This routine will set a specified bit in a char field.
+void DisplayError( xbInt16 ErrorCode ) const This routine prints a description for a specifed error to stdout.
+
+xbString& GetDataDirectory() const void SetDataDirectory( const xbString &sDataDirectory )
+ Get and Set the current directory where the library routines expect to find the .DBF, .DBT, .NDX and .MDX files.
+
+xbString& GetDefaultDateFormat() const void SetDefaultDateFormat( const xbString &sDefaultDateFormat )
+ Get and Set the current default date format used by the date formatting routines if no format specifier is provided.
+
+xbInt16 GetEndianType() const Returns the current Endian type of the machine the library is operating on.
+const char *GetErrorMessage( xbInt16 ErrorCode ) const Returns a pointer to an error message for a given error number.
+
+xbBool GetDefaultAutoCommit() const void SetDefaultAutoCommit( xbBool bDefaultAutoCommit )
+ 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.
+
+xbBool GetHomeDir( xbString &sHomeDirOut ) Get the home directory for the current user.
+
+xbString& GetLogDirectory() const void SetLogDirectory( const xbString &sLogDirectory )
+ Get and set the directory location for any system generated logfiles.
+xbString& GetLogFileName() const Returns the default log file name.
+
+
+xbBool GetMultiUser() const void SetMultiUser( xbBool bMultiUser )
+ Get and set multi user status. This turns the auto locking on and off. For better performance in single user applications, turn multuser off.
+
+xbInt16 GetUniqueKeyOpt() const xbInt16 SetUniqueKeyOpt( xbInt16 iUniqueKeyOpt )
+ 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).
+
+
+xbInt16 GetDefaultLockRetries() const void SetDefaultLockRetries( xbInt16 iRetryCount )
+ Get and Set the number of times to attempt a lock
+
+xbInt32 GetDefaultLockWait() const void SetDefaultLockWait( xbInt32 lRetryWait )
+ Get and Set the wait time between lock attempts.
+
+xbInt16 GetDefaultLockFlavor() const void SetDefaultLockFlavor( xbInt16 iLockFlavor )
+ For future use. With current versions, only DBase (TM) locking offsets are supported.
+
+xbBool GetDefaultAutoLock() const void SetDefaultAutoLock( xbBool bAutoLock ) void EnableDefaultAutoLock() void DisableDefaultAutoLock()
+ Set, Get or update Auto Lock Status
+
+
+xbInt16 GetCreateMdxBlockSize() const xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize )
+ Set or get MDX Index block size. Must be a multiple of 512.
+
+xbUInt32 GetDefaultBlockReadSize() const void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize )
+ Set or Get the default block size for Block Read functionality. Block reading is used to improve sequentential access performance.
+
+
+
+
+Example program using xbSsv methods
+
+
+/* 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;
+}
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/xbc18.html b/docs/html/xbc18.html
new file mode 100755
index 0000000..36f3b50
--- /dev/null
+++ b/docs/html/xbc18.html
@@ -0,0 +1,252 @@
+
+
+Xbase DBMS Chapter 18
+
+Class xbXBase
+Chapter Updated 2/7/23
+
+Class xbXBase - Core Level Class
+
+
+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.
+
+xbXBase x
+
+
+xbXBase is derived from base classes xbTblMgr and xbSsv.
+
+
+
+
+
+
+
+
+Method Description Category
+
+xbInt16 CloseAllTables() Close all open tables. Table
+
+xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf &dbf, int dummy ) Open highest version available for sTableName. Table
+xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf **dbf ) Open highest version available for sTableName. Table
+xbDbf * Open( const xbString &sTableName, xbInt16 &iRc ) Open the highest available version of the dbf file. Defaults to XB_READ_WRITE and XB_MULTI_USER mode. Table
+xbDbf * Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &iRc ) Open table. Table
+
+
+void DisableMsgLogging() Disable logging routines. Logging
+void EnableMsgLogging () Enable logging routines. Logging
+xbInt16 FlushLog() Flush any queued logfile updates to disk. Logging
+const xbString &GetLogDirectory () const Get the current logfile directory. Logging
+const xbString &GetLogFileName () const Get the current logfile name. Logging
+const xbString &GetLogFqFileName() const Get fully qualified logfile name. Logging
+xbBool GetLogStatus () const Get the logging status. Logging
+void SetLogDirectory( const xbString &sLogFileDirectory ) Set the log directory. Must be done while logging is off. Logging
+void SetLogFileName( const xbString &sLogFileName ) Set the log file name. Must be done while logging is off. Logging
+void SetLogSize( size_t lSize ) Set the logfile size. After the size is reached, the log file roll. Logging
+xbInt16 WriteLogBytes ( xbUInt32 lCnt, const char *p ) Write lCnt bytes pointed to by pointer p to the logfile. Logging
+xbInt16 WriteLogMessage( const xbString &sLogMessage, xbInt16 iOutputOpt = 0 ) Write a string to the logfile. Logging
+
+
+xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, xbString &sOptRqst, xbString &sParmOut )
+xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, const char *sOptRqst, xbString &sParmOut ) Parse command line values seeking given parameter info. Misc
+
+void xbSleep( xbInt32 lMillisecs ) Sleep command, used mainly in lock commands for waiting between retries. Misc
+
+
+xbInt16 ABS( xbDouble dIn, xbDouble &dOut ) Dbase ABS function. Expression
+xbInt16 ALLTRIM( const xbString &sIn, xbString &sOut ) Dbase ALLTRIM function. Expression
+xbInt16 ASC( const xbString &s, xbDouble &dAscOut ) Dbase ASC function. Expression
+xbInt16 AT( const xbString &sSrchFor, const xbString &sBase, xbDouble &dPos ) Dbase AT function. Expression
+xbInt16 CDOW( xbDate &dInDate, xbString &sOutDow ) Dbase CDOW function. Expression
+xbInt16 CHR( xbDouble dAsciCd, xbString &sOut ) Dbase CHR function. Expression
+xbInt16 CMONTH( xbDate &dInDate, xbString &sOutMonth ) Dbase CMONTH function. Expression
+xbInt16 CTOD( const xbString &sInDate, xbDate &dOutDate ) Dbase CTOD function. Expression
+xbInt16 DATE( xbDate &dOutDate ) Dbase DATE function. Expression
+xbInt16 DAY( const xbDate &dInDate, xbDouble &dOutDay ) Dbase DAY function. Expression
+xbInt16 DEL( xbDbf * d, xbString &sOut, xbInt16 iRecBufSw = 0 ) Dbase DEL function. Expression
+xbInt16 DELETED( xbDbf * d, xbBool &bOut, xbInt16 iRecBufSw = 0 ) Dbase DELETED function. Expression
+xbInt16 DESCEND( const xbString &sIn,xbString &sOut ) xbInt16 DESCEND( const xbDate &dInDate, xbDate &dOutDate ) xbInt16 DESCEND( const xbDouble dIn, xbDouble &dsOut ) Dbase DESCEND function. Expression
+xbInt16 DOW( const xbDate &sInDate, xbDouble &dDowOut ) Dbase DOW function. Expression
+xbInt16 DTOC( xbDate &dInDate, xbString &sOutFmtDate ) Dbase DTOC function. Expression
+xbInt16 DTOS( xbDate &dInDate, xbString &sOutFmtDate ) Dbase DTOS function. Expression
+xbInt16 EXP( xbDouble dIn, xbDouble &dOut ) Dbase EXP function. Expression
+xbInt16 IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult ) Dbase IIF function. Expression
+xbInt16 INT( xbDouble dIn, xbDouble &dOut ) Dbase INT function. Expression
+xbInt16 ISALPHA( const xbString &s, xbBool &bResult ) Dbase ISALPHA function. Expression
+xbInt16 ISLOWER( const xbString &s, xbBool &bResult ) Dbase ISLOWER function. Expression
+xbInt16 ISUPPER( const xbString &s, xbBool &bResult ) Dbase ISUPPER function. Expression
+xbInt16 LEFT( const xbString &sIn, xbUInt32 lCharCnt, xbString &sOut ) Dbase LEF function. Expression
+xbInt16 LEN( const xbString &sIn, xbDouble &dLen ) Dbase LEN function. Expression
+xbInt16 LOG( xbDouble dIn, xbDouble &dOut ) Dbase LOG function. Expression
+xbInt16 LOWER( const xbString &sIn, xbString &sOut ) Dbase LOWER function. Expression
+xbInt16 LTRIM( const xbString &sIn, xbString & sOut ) Dbase LTRIM function. Expression
+xbInt16 MAX( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut ) Dbase MAX function. Expression
+xbInt16 MIN( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut ) Dbase MIN function. Expression
+xbInt16 MONTH( xbDate &dInDate, xbDouble &dMonthOut ) Dbase MONTH function. Expression
+xbInt16 RECCOUNT( xbDbf * d, xbDouble &dRecOut ) Dbase RECCOUNT function. Expression
+xbInt16 RECNO( xbDbf * d, xbDouble &dRecOut ) Dbase RECNO function. Expression
+xbInt16 REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut ) Dbase REPLICATE function. Expression
+xbInt16 RIGHT( const xbString &sIn, xbUInt32 iCharCnt, xbString &sOut ) Dbase RIGHT function. Expression
+xbInt16 RTRIM( const xbString &sIn, xbString &sOut ) Dbase RTRIM function. Expression
+xbInt16 SPACE( xbInt32 lCnt, xbString &sOut ) Dbase SPACE function. Expression
+xbInt16 SQRT( xbDouble dBase, xbDouble &dSqrRt ) Dbase SQRT function. Expression
+xbInt16 STOD( const xbString &sIn, xbDate &sDateOut ) Dbase STOD function. Expression
+xbInt16 STR( xbDouble dIn, xbString &sOut ) Dbase function. Expression
+xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut )
+ xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )
+ xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut ) Dbase STR function. Expression
+xbInt16 STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut ) Dbase STRZERO function. Expression
+xbInt16 SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut ) Dbase SUBSTR function. Expression
+xbInt16 TRIM( const xbString &sIn, xbString &sOut ) Dbase TRIM function. Expression
+xbInt16 UPPER( const xbString &sIn, xbString &sOut ) Dbase UPPER function. Expression
+xbInt16 VAL( const xbString &sIn, xbDouble &dOut ) Dbase VAL function. Expression
+xbInt16 YEAR( xbDate &dInDate, xbDouble &dOutYear ) Dbase YEAR function. Expression
+
+
+
+
+
+Example program using xbXbase methods
+
+
+/* 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;
+}
+
+
+
+
+
+
+
+
+
diff --git a/docs/man/xb_cfg_chk.1.gz b/docs/man/xb_cfg_chk.1.gz
new file mode 100644
index 0000000..9dabd69
Binary files /dev/null and b/docs/man/xb_cfg_chk.1.gz differ
diff --git a/docs/man/xb_copydbf.1.gz b/docs/man/xb_copydbf.1.gz
new file mode 100644
index 0000000..410723d
Binary files /dev/null and b/docs/man/xb_copydbf.1.gz differ
diff --git a/docs/man/xb_dbfutil.1.gz b/docs/man/xb_dbfutil.1.gz
new file mode 100644
index 0000000..555bd83
Binary files /dev/null and b/docs/man/xb_dbfutil.1.gz differ
diff --git a/docs/man/xb_deletall.1.gz b/docs/man/xb_deletall.1.gz
new file mode 100644
index 0000000..8016f10
Binary files /dev/null and b/docs/man/xb_deletall.1.gz differ
diff --git a/docs/man/xb_dumpdbt.1.gz b/docs/man/xb_dumpdbt.1.gz
new file mode 100644
index 0000000..f0585b4
Binary files /dev/null and b/docs/man/xb_dumpdbt.1.gz differ
diff --git a/docs/man/xb_dumprecs.1.gz b/docs/man/xb_dumprecs.1.gz
new file mode 100644
index 0000000..f63c8b7
Binary files /dev/null and b/docs/man/xb_dumprecs.1.gz differ
diff --git a/docs/man/xb_pack.1.gz b/docs/man/xb_pack.1.gz
new file mode 100644
index 0000000..c5ec726
Binary files /dev/null and b/docs/man/xb_pack.1.gz differ
diff --git a/docs/man/xb_tblinfo.1.gz b/docs/man/xb_tblinfo.1.gz
new file mode 100644
index 0000000..ab7b26a
Binary files /dev/null and b/docs/man/xb_tblinfo.1.gz differ
diff --git a/docs/man/xb_undelall.1.gz b/docs/man/xb_undelall.1.gz
new file mode 100644
index 0000000..31cc868
Binary files /dev/null and b/docs/man/xb_undelall.1.gz differ
diff --git a/sql/jointest.sql b/sql/jointest.sql
new file mode 100755
index 0000000..de167b5
--- /dev/null
+++ b/sql/jointest.sql
@@ -0,0 +1,43 @@
+# HELP;
+
+USE /mnt/1Tdata/xbase/xbase64-4.1.1/data;
+
+DROP TABLE IF EXISTS MAIN0.DBF;
+DROP TABLE IF EXISTS LEFT0.DBF;
+DROP TABLE IF EXISTS LEFT1.DBF;
+DROP TABLE IF EXISTS LEFT2.DBF;
+DROP TABLE IF EXISTS LEFT3.DBF;
+DROP TABLE IF EXISTS INNER0.DBF;
+
+
+CREATE TABLE MAIN0 ( ID NUMERIC(6,0), LEFTFK0 CHAR(3), LEFTFK1 CHAR(3), LEFTFK2 CHAR(3), LEFTFK3 CHAR(3), RIGHTFK0 CHAR(3), RIGHTFK1 CHAR(3), RIGHTFK2 CHAR(3), INNERFK0 CHAR(3) );
+
+CREATE TABLE LEFT0.DBF ( ID NUMERIC(6,0), LEFTFK0 CHAR(3), CFLD CHAR(10) );
+CREATE TABLE LEFT1.DBF ( ID NUMERIC(6,0), LEFTFK1 CHAR(3), CFLD CHAR(10) );
+CREATE TABLE LEFT2.DBF ( ID NUMERIC(6,0), LEFTFK2 CHAR(3), CFLD CHAR(10) );
+CREATE TABLE LEFT3.DBF ( ID NUMERIC(6,0), LEFTFK3 CHAR(3), CFLD CHAR(10) );
+CREATE TABLE INNER0.DBF( ID NUMERIC(6,0), INNERFK0 CHAR(3), CFLD CHAR(10) );
+
+
+INSERT INTO MAIN0.DBF ( ID, LEFTFK0, LEFTFK1, LEFTFK2, LEFTFK3, RIGHTFK0, RIGHTFK1, RIGHTFK2, INNERFK0 ) VALUES ( 1, 'L01', 'L11', 'L21', 'L31', 'R01', 'R11', 'R21', 'I01' );
+INSERT INTO MAIN0.DBF ( ID, LEFTFK0, LEFTFK1, LEFTFK2, LEFTFK3, RIGHTFK0, RIGHTFK1, RIGHTFK2, INNERFK0 ) VALUES ( 2, 'L02', 'L12', 'L22', 'L32', 'R02', 'R12', 'R22', 'I02' );
+INSERT INTO MAIN0.DBF ( ID, LEFTFK0, LEFTFK1, LEFTFK2, LEFTFK3, RIGHTFK0, RIGHTFK1, RIGHTFK2, INNERFK0 ) VALUES ( 3, 'L03', 'L13', 'L23', 'L33', 'R03', 'R13', 'R23', 'I03' );
+
+INSERT INTO LEFT0.DBF ( ID, LEFTFK0, CFLD ) VALUES ( 1, 'L01', 'REC 1 data' );
+INSERT INTO LEFT0.DBF ( ID, LEFTFK0, CFLD ) VALUES ( 2, 'L02', 'REC 2 data' );
+
+INSERT INTO INNER0.DBF ( ID, INNERFK0, CFLD ) VALUES ( 1, 'I01', 'REC 1 data' );
+INSERT INTO INNER0.DBF ( ID, INNERFK0, CFLD ) VALUES ( 2, 'I03', 'REC 2 data' );
+
+
+
+#INSERT INTO TestSQL.DBF (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y');
+#CREATE UNIQUE INDEX TestSql1.NDX ON TestSql.DBF( CHRFLD ) ASSOCIATE;
+#DROP INDEX IF EXISTS TestSql1.NDX ON TestSql.DBF;
+
+
+
+#SELECT M.ID, M.LEFTFK0, L0.CFLD, L1.CFLD AS L1cfld
+#FROM MAIN0 M
+#LEFT JOIN LEFT0 L0 ON M.LEFTFK0 = L0.LEFTFK0
+#LEFT JOIN LEFT1 L1 ON M.LEFTFK1 = L1.LEFTFK1 AND L1.ID = L0.ID
\ No newline at end of file
diff --git a/src/core/xbbcd.cpp b/src/core/xbbcd.cpp
index ff64110..f86e74f 100755
--- a/src/core/xbbcd.cpp
+++ b/src/core/xbbcd.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.
@@ -268,7 +268,6 @@ xbInt16 xbBcd::Compare( const xbBcd &bcdIn ){
return -1;
}
-
/***********************************************************************/
unsigned char xbBcd::GetEncDigitsNoSign() const {
unsigned char c = bcd.cEncDigits << 1;
@@ -277,7 +276,7 @@ unsigned char xbBcd::GetEncDigitsNoSign() const {
/***********************************************************************/
unsigned xbBcd::GetSign() const {
//return bcd.Sign;
- return bcd.cEncDigits >> 7;
+ return (unsigned) bcd.cEncDigits >> 7;
}
/***********************************************************************/
unsigned xbBcd::GetSigDigits() const {
diff --git a/src/core/xbblockread.cpp b/src/core/xbblockread.cpp
new file mode 100755
index 0000000..09076b1
--- /dev/null
+++ b/src/core/xbblockread.cpp
@@ -0,0 +1,271 @@
+/* xbblockread.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This module handles block read methods. Block reading is used for performance improvement
+during sequential access processing.
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_BLOCKREAD_SUPPORT
+
+namespace xb{
+
+/************************************************************************/
+xbBlockRead::xbBlockRead( xbDbf * d ) {
+ pBlock = NULL;
+ ulBlkSize = 0;
+ ulFirstBlkRec = 0;
+ ulRecCnt = 0;
+ ulMaxRecs = 0;
+ bEof = xbFalse;
+ this->dbf = d;
+ tFmTime = 0;
+}
+/************************************************************************/
+xbBlockRead::~xbBlockRead(){
+ if( pBlock ){
+ free( pBlock );
+ pBlock = NULL;
+ }
+}
+
+/************************************************************************/
+//! @brief Dump read block internals to stdout.
+/*!
+ Dump the current read block internals to stdout.
+*/
+
+
+#ifdef XB_DEBUG_SUPPORT
+void xbBlockRead::DumpReadBlockInternals(){
+ std::cout << "------- DumpBlockInternals ---------" << std::endl;
+ std::cout << "Dflt Blk Size = [" << dbf->GetXbasePtr()->GetDefaultBlockReadSize()
+ << "]" << std::endl;
+ std::cout << "Dbf Record Count = [" << dbf->GetRecordCount() << "]" << std::endl;
+ std::cout << "Dbf Record Len = [" << dbf->GetRecordLen() << "]" << std::endl;
+ std::cout << "ulBlkSize = [" << ulBlkSize << "]" << std::endl;
+ std::cout << "ulMaxRecs = [" << ulMaxRecs << "]" << std::endl;
+ std::cout << "ulFirstBlkRec = [" << ulFirstBlkRec << "]" << std::endl;
+ std::cout << "ulRecCnt = [" << ulRecCnt << "]" << std::endl;
+ std::cout << "bEof = [" << bEof << "]" << std::endl;
+}
+#endif // XB_DEBUG_SUPPORT
+/************************************************************************/
+//! @brief Get the first record number in the current block.
+/*!
+ Retrieve the first record numer in the current block.
+
+ \returns First record number in the current block.
+*/
+
+xbUInt32 xbBlockRead::GetBlockFirstRecNo() const{
+ return ulFirstBlkRec;
+}
+/************************************************************************/
+//! @brief Get record for specified record number.
+/*!
+ Retrieve a record from read block buffer and copy it into the record buffer.
+ If the current record is not in the current block, the routine calls
+ GetBlockForRecNo to load the currect block from disk.
+ For performance reasons, this method assumes a valid record number has been
+ passed.
+
+ \param ulRecNo - Record number to retrieve.
+ \returns Return Codes
+*/
+
+xbInt16 xbBlockRead::GetRecord( xbUInt32 ulRecNo ){
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ // std::cout << "xbBlockRead::GetRecord( " << ulRecNo << ")\n";
+
+ try{
+ if( !( ulRecNo >= ulFirstBlkRec && ulRecNo < (ulFirstBlkRec + ulRecCnt))){
+ if(( iRc = GetBlockForRecNo( ulRecNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ char *s = pBlock;
+ s += (ulRecNo - ulFirstBlkRec) * dbf->GetRecordLen();
+ char *t = dbf->RecBuf;
+ xbUInt32 ulRecLen = dbf->GetRecordLen();
+ for( xbUInt32 l = 0; l < ulRecLen; l++ ){
+ *t = *s;
+ t++;
+ s++;
+ }
+ dbf->ulCurRec = ulRecNo;
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbBlockRead::GetBlockForRecNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Get record for specified record number.
+/*!
+ Retrieve a block containing specified record. This routine calculates the
+ correct block in the DBF file, updates the internal block fields and retrieves
+ the block of records from disk and loads into the block buffer.
+
+ \param ulRecNo - Record number to retrieve.
+ \returns Return Codes
+*/
+
+xbInt16 xbBlockRead::GetBlockForRecNo( xbUInt32 ulRecNo ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+ xbUInt32 ulDbfRecCnt = dbf->GetRecordCount();
+
+ // calc to determine block number for the requested record, 0 based offset
+ xbUInt32 ulBlockNo = (xbUInt32)(ulRecNo / ulMaxRecs);
+ if( ulRecNo % ulMaxRecs == 0 ) ulBlockNo--;
+
+ // calc the first record
+ ulFirstBlkRec = (ulBlockNo * ulMaxRecs);
+
+ // calc the record count
+ if(( ulFirstBlkRec + ulMaxRecs) > ulDbfRecCnt ){
+ ulRecCnt = ulDbfRecCnt - ulFirstBlkRec;
+ bEof = xbTrue;
+ } else {
+ ulRecCnt = ulMaxRecs;
+ bEof = xbFalse;
+ }
+
+ // position accordingly
+ xbInt64 ulStartPos = dbf->GetHeaderLen() + ((xbInt64) ulFirstBlkRec * dbf->GetRecordLen());
+ if(( dbf->xbFseek( ulStartPos, SEEK_SET )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ iRc = XB_SEEK_ERROR;
+ throw iRc;
+ }
+
+ if(( dbf->GetFileMtime( tFmTime )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+ // read it
+ if(( dbf->xbFread( (void *) pBlock, ulRecCnt * dbf->GetRecordLen(), 1 )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ ulFirstBlkRec++; // zero offset in the routine, regular record number from ths point forward
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbBlockRead::GetBlockForRecNo() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+
+/************************************************************************/
+//! @brief Get the current block size.
+/*!
+ Retrieve the current block size.
+
+ \returns Current Block Size.
+*/
+
+xbUInt32 xbBlockRead::GetBlockSize() const{
+ return ulBlkSize;
+}
+
+/************************************************************************/
+//! @brief Get the current block record count.
+/*!
+ Retrieve the current number of records loaded in the block.
+
+ \returns Current Block Size.
+*/
+
+xbUInt32 xbBlockRead::GetBlockRecCnt() const {
+ return ulRecCnt;
+}
+
+/************************************************************************/
+//! @brief Init the block processing for a iven DBF file.
+/*!
+ Initialize the settings for a given DBF file.
+ This routine may adjust the block size as needed to eliminate unused
+ memory or adjust it bigger if too small.
+
+ \param ulRecNo - ulBlockSize - Block size to allocate. If 0 or missing, it uses default block size of 32K.
+ \returns Return Codes
+*/
+
+xbInt16 xbBlockRead::Init(xbUInt32 ulBlockSize ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ // calculate the block size
+ if( ulBlockSize == 0 )
+ ulBlkSize = dbf->GetXbasePtr()->GetDefaultBlockReadSize();
+
+ // if not big enough to handle more than one record, bump it up to something meaningful
+ if( ulBlkSize < (xbUInt32)(dbf->GetRecordLen() * 2 ))
+ ulBlkSize = (xbUInt32) dbf->GetRecordLen() * 10;
+
+ ulMaxRecs = (xbUInt32) ulBlkSize / dbf->GetRecordLen();
+ ulBlkSize = ulMaxRecs * dbf->GetRecordLen();
+
+ // allocate memory for the block
+ if(( pBlock = (char *) calloc( 1, ulBlkSize )) == NULL ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbBlockRead::Init() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/************************************************************************/
+//! @brief Set the block size.
+/*!
+ St block size for this DBF file. .
+
+ \param ulBlkSize - Block Size.
+ \returns XB_NO_ERROR
+*/
+
+xbInt16 xbBlockRead::SetBlockSize( xbUInt32 ulBlkSize ){
+ this->ulBlkSize = ulBlkSize;
+ return XB_NO_ERROR;
+}
+
+/************************************************************************/
+} /* namespace */
+#endif /* XB_BLOCKREAD_SUPPORT */
\ No newline at end of file
diff --git a/src/core/xbdbf.cpp b/src/core/xbdbf.cpp
index 3d13369..4033ef9 100755
--- a/src/core/xbdbf.cpp
+++ b/src/core/xbdbf.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.
@@ -24,10 +24,16 @@ namespace xb{
\param x Pointer to xbXbase
*/
xbDbf::xbDbf( xbXBase * x ) : xbFile( x ){
- xbase = x;
- SchemaPtr = NULL;
- RecBuf = NULL;
- RecBuf2 = NULL;
+ xbase = x;
+ SchemaPtr = NULL;
+ RecBuf = NULL;
+ RecBuf2 = NULL;
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ pRb = NULL;
+ bBlockReadEnabled = xbFalse; // batch read switch, if xbTrue, then ON
+ #endif // XB_BLOCKREAD_SUPPORT
+
InitVars();
}
/************************************************************************/
@@ -77,7 +83,7 @@ void xbDbf::InitVars()
#ifdef XB_INF_SUPPORT
llInfData.Clear();
- #endif // XB_INF_SUPPORT
+ #endif // XB_INF_SUPPORT
}
/************************************************************************/
@@ -104,6 +110,16 @@ xbDbf::~xbDbf(){
free( RecBuf2 );
RecBuf2 = NULL;
}
+ if( RecBuf ){
+ free( RecBuf );
+ RecBuf = NULL;
+ }
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ if( bBlockReadEnabled )
+ DisableBlockReadProcessing();
+ #endif // XB_BLOCKREAD_SUPPORT
+
Close();
}
/************************************************************************/
@@ -1951,6 +1967,18 @@ xbInt16 xbDbf::GetFirstKey(){
return XB_INVALID_TAG;
}
+/************************************************************************/
+//! @brief GetHeaderLen for dbf
+/*!
+
+ Returns the length of the header portion of the dbf file
+ \returns Length of header protion of dbf file
+
+*/
+xbUInt16 xbDbf::GetHeaderLen() const {
+ return uiHeaderLen;
+}
+
/************************************************************************/
//! @brief GetLastKey for tag.
/*!
@@ -2053,6 +2081,32 @@ xbInt16 xbDbf::Find( xbDouble &dKey ){
#endif // XB_INDEX_SUPPORT
+/************************************************************************/
+//! @brief Return true if dbf file empty or positioned to the first record
+/*!
+ \returns Returns true if dbf file is empty or positioned on the first record.
+*/
+xbBool xbDbf::GetBof() {
+/*
+ if( GetRecordCount() == 0 || GetCurRecNo() == 1 )
+ return xbTrue;
+ else
+ */
+ return xbFalse;
+}
+/************************************************************************/
+//! @brief Return true if dbf file empty or positioned to the last record
+/*!
+ \returns Returns true if dbf file is empty or positioned on the last record.
+*/
+xbBool xbDbf::GetEof() {
+ xbUInt32 ulRecCnt = GetRecordCount();
+
+ if( ulRecCnt == 0 || GetCurRecNo() == ulRecCnt )
+ return xbTrue;
+ else
+ return xbFalse;
+}
/************************************************************************/
//! @brief Return the current record number.
/*!
@@ -2428,15 +2482,23 @@ xbInt16 xbDbf::GetRecord( xbUInt32 ulRecNo ){
iErrorStop = 120;
throw iRc;
}
- }
- }
+ }
+ }
+
+ // std::cout << "xbdbf::GetRecord: " << ulRecNo << " " << ulNoOfRecs << "\n";
if( ulRecNo > ulNoOfRecs || ulRecNo == 0L ){
iErrorStop = 130;
iRc = XB_INVALID_RECORD;
throw iRc;
}
+ #ifdef XB_BLOCKREAD_SUPPORT
+ if( bBlockReadEnabled )
+ return pRb->GetRecord( ulRecNo );
+ #endif // XB_BLOCK_READ_SUPPORT
+
+
if(( xbFseek( (uiHeaderLen+(( (xbInt64) ulRecNo-1L ) * uiRecordLen )), SEEK_SET )) != XB_NO_ERROR ){
iErrorStop = 140;
iRc = XB_SEEK_ERROR;
@@ -2475,9 +2537,6 @@ char * xbDbf::GetRecordBuf( xbInt16 iOpt ) const {
return RecBuf;
}
-
-
-
/************************************************************************/
//! @brief Get the current number of records in the dbf data file.
/*!
@@ -3211,12 +3270,12 @@ xbInt16 xbDbf::Open( const xbString & sTableName, const xbString & sAlias ){
xbLinkListNode * llN = llInfData.GetHeadNode();
for( xbUInt32 i = 0; i < llNodeCnt; i++ ){
s2 = llN->GetKey();
- #ifdef XB_NDX_SUPPORT
+ #ifdef XB_NDX_SUPPORT
if(( iRc = OpenIndex( "NDX", s2 )) != XB_NO_ERROR ){
iErrorStop = 120;
throw iRc ;
}
- #endif // XB_NDX_SUPPORT
+ #endif // XB_NDX_SUPPORT
llN = llN->GetNextNode();
}
}
@@ -3270,7 +3329,6 @@ xbInt16 xbDbf::OpenIndex( const xbString &sIxType, const xbString &sFileName ){
#ifdef XB_MDX_SUPPORT
} else if( sType == "MDX" ){
-
pIx = new xbIxMdx( this );
if(( iRc = pIx->Open( sFileName )) != XB_NO_ERROR ){
iErrorStop = 120;
@@ -4209,4 +4267,72 @@ xbInt16 xbDbf::Zap(){
return iRc;
}
/************************************************************************/
+#ifdef XB_BLOCKREAD_SUPPORT
+// block read processing is designed to provide a way to rapidly retrieve
+// all the records from a .DBF file in sequential order.
+
+// It is not designed for doing any read/write processing or data retrieval based on a tag sort.
+// It is designed for doing a fast sequentil block read out of a table
+
+
+xbInt16 xbDbf::DisableBlockReadProcessing(){
+
+ if( bBlockReadEnabled ){
+ bBlockReadEnabled = xbFalse;
+ delete pRb;
+ pRb = NULL;
+ }
+ return XB_NO_ERROR;
+}
+
+xbBool xbDbf::GetBlockReadStatus() const {
+ return bBlockReadEnabled;
+}
+
+xbInt16 xbDbf::EnableBlockReadProcessing(){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ if( !bBlockReadEnabled ){
+ if( iDbfStatus == XB_UPDATED ){
+ if( GetAutoCommit() == 1 ){
+ if(( iRc = Commit()) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ } else {
+ if(( iRc = Abort()) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ }
+ }
+ pRb = new xbBlockRead( this );
+ if( !pRb ){
+ iErrorStop = 120;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+ if(( iRc = pRb->Init()) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+
+ bBlockReadEnabled = xbTrue;
+ }
+
+ } catch( xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbdbf::EnableBlockReadProcessing() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+#endif // XB_BLOCKREAD_SUPPORT
+/************************************************************************/
} /* namespace */
\ No newline at end of file
diff --git a/src/core/xbdbf3.cpp b/src/core/xbdbf3.cpp
index 504542f..d57be3c 100755
--- a/src/core/xbdbf3.cpp
+++ b/src/core/xbdbf3.cpp
@@ -261,7 +261,7 @@ xbInt16 xbDbf3::CreateTable( const xbString & sTableName, const xbString & sAlia
catch( xbInt16 rc )
{
xbString sMsg;
- sMsg.Sprintf( "xbdbf3::CreateTable() Exception Caught Error Stop = %d rc = %d", iErrorStop, rc );
+ sMsg.Sprintf( "xbdbf3::CreateTable() Exception Caught Error Stop = [%d] rc = [%d]", iErrorStop, rc );
xbase->WriteLogMessage( sMsg );
xbase->WriteLogMessage( GetErrorMessage( rc ));
@@ -453,7 +453,7 @@ xbInt16 xbDbf3::Open( const xbString & sTableName, const xbString & sAlias,
catch ( xbInt16 iRc )
{
xbString sMsg;
- sMsg.Sprintf( "xbdbf3::Open() Exception Caught Error Stop = %d iRc = %d ShareMode = %d OpenMode = %d", iErrorStop, iRc, iShareMode, iOpenMode );
+ sMsg.Sprintf( "xbdbf3::Open() Exception Caught Error Stop = [%d] iRc = [%d] ShareMode = [%d] OpenMode = [%d]", iErrorStop, iRc, iShareMode, iOpenMode );
xbase->WriteLogMessage( sMsg );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
xbFclose();
@@ -623,14 +623,14 @@ xbInt16 xbDbf3::Rename( const xbString sNewName ){
xbTblList *tle = xbase->GetTblListEntry( this );
if( tle ){
// std::cout << "setting [" << GetFqFileName().Str() << "][" << sNewNameWoExt.Str() << "]\n";
- tle->psTblName->Set( GetFqFileName().Str());
+ tle->psFqTblName->Set( GetFqFileName().Str());
tle->psTblAlias->Set( sNewNameWoExt.Str());
}
}
catch ( xbInt16 iRc )
{
xbString sMsg;
- sMsg.Sprintf( "xbdbf3::Rename() Exception Caught Error Stop = %d iRc = %d", iErrorStop, iRc );
+ sMsg.Sprintf( "xbdbf3::Rename() Exception Caught Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
xbase->WriteLogMessage( sMsg );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
diff --git a/src/core/xbdbf4.cpp b/src/core/xbdbf4.cpp
index 2b49be9..59ba39a 100755
--- a/src/core/xbdbf4.cpp
+++ b/src/core/xbdbf4.cpp
@@ -180,10 +180,10 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
ulCurRec = 0L;
uiHeaderLen = 33 + iNoOfFields * 32;
xbDate d;
- cUpdateYY = (char) (d.YearOf() - 1900);
- cUpdateMM = (char) d.MonthOf();
- cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
-
+ cUpdateYY = (char) (d.YearOf() - 1900);
+ cUpdateMM = (char) d.MonthOf();
+ cUpdateDD = (char) d.DayOf( XB_FMT_MONTH );
+ cIndexFlag = 0;
// Default language driver to 0x1b
cLangDriver = 0x1b;
@@ -264,7 +264,7 @@ xbInt16 xbDbf4::CreateTable( const xbString &sTableName, const xbString &sAlias,
catch( xbInt16 rc )
{
xbString sMsg;
- sMsg.Sprintf( "xbdbf4::CreateTable() Exception Caught Error Stop = %d rc = %d", iErrorStop, rc );
+ sMsg.Sprintf( "xbdbf4::CreateTable() Exception Caught Error Stop = [%d] rc = [%d]", iErrorStop, rc );
xbase->WriteLogMessage( sMsg );
xbase->WriteLogMessage( GetErrorMessage( rc ));
@@ -452,6 +452,9 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
#endif
#ifdef XB_MDX_SUPPORT
+
+// printf( "cIndexFlag [%x]\n", cIndexFlag );
+
if( cIndexFlag ){
// create the file name
xbString sIxFileName = GetFqFileName();
@@ -471,7 +474,7 @@ xbInt16 xbDbf4::Open( const xbString & sTableName, const xbString & sAlias,
catch ( xbInt16 iRc )
{
xbString sMsg;
- sMsg.Sprintf( "xbdbf4::Open() Exception Caught Error Stop = %d iRc = %d ShareMode = %d OpenMode = %d", iErrorStop, iRc, iShareMode, iOpenMode );
+ sMsg.Sprintf( "xbdbf4::Open() Exception Caught Error Stop = [%d] iRc = [%d] ShareMode = [%d] OpenMode = [%d]", iErrorStop, iRc, iShareMode, iOpenMode );
xbase->WriteLogMessage( sMsg );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
xbFclose();
@@ -726,7 +729,7 @@ xbInt16 xbDbf4::Rename( const xbString sNewName ){
// rename the table in the table list
xbTblList *tle = xbase->GetTblListEntry( this );
if( tle ){
- tle->psTblName->Set( GetFqFileName().Str());
+ tle->psFqTblName->Set( GetFqFileName().Str());
tle->psTblAlias->Set( sNewNameWoExt.Str());
}
@@ -735,7 +738,7 @@ xbInt16 xbDbf4::Rename( const xbString sNewName ){
catch ( xbInt16 iRc )
{
xbString sMsg;
- sMsg.Sprintf( "xbdbf4::Rename() Exception Caught Error Stop = %d iRc = %d", iErrorStop, iRc );
+ sMsg.Sprintf( "xbdbf4::Rename() Exception Caught Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
xbase->WriteLogMessage( sMsg );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
diff --git a/src/core/xbexp.cpp b/src/core/xbexp.cpp
index 23bc7c6..deea53d 100755
--- a/src/core/xbexp.cpp
+++ b/src/core/xbexp.cpp
@@ -669,10 +669,22 @@ xbInt16 xbExp::GetTokenDatabaseField( xbExpToken &t ){
}
// look for ->
- // remove the field name from before the ->
+ // remove the table name from before the ->
if( strncmp( s, "->", 2 ) == 0 ){
ulTokenLen2+=2;
s+=2;
+
+/*
+ if( strncmp( s, "->", 2 ) == 0 || strncmp( s, ".", 1 ) == 0){
+ if( *s == '.' ){
+ ulTokenLen2+=1;
+ s+=1;
+ } else {
+ ulTokenLen2+=2;
+ s+=2;
+ }
+*/
+
// go past white space
while( *s && !IsTokenSeparator( *s ) && IsWhiteSpace( *s )) {
ulTokenLen2++;
@@ -1489,6 +1501,7 @@ xbInt16 xbExp::ParseExpressionField( xbExpToken &t, xbExpNode *n ){
try{
xbUInt32 lPos;
+
if(( lPos = t.sToken.Pos( "->" )) > 0 ){
// table name is part of the token
xbString sTableName = t.sToken;
@@ -1496,6 +1509,22 @@ xbInt16 xbExp::ParseExpressionField( xbExpToken &t, xbExpNode *n ){
sFieldName = t.sToken;
sFieldName.Mid( lPos + 2, t.sToken.Len() - lPos - 1 );
pDbf = (xbDbf *) xbase->GetDbfPtr( sTableName );
+
+
+/*
+ // updated 1/2/23 to support either table.field or table->field
+ if((( lPos = t.sToken.Pos( "->" )) > 0) || (( lPos = t.sToken.Pos( "." )) > 0) ){
+ // table name is part of the token
+ xbString sTableName = t.sToken;
+ sTableName.Left( lPos-1 );
+ sFieldName = t.sToken;
+ if( t.sToken[lPos] == '.' )
+ sFieldName.Mid( lPos + 1, t.sToken.Len() - lPos );
+ else // ->
+ sFieldName.Mid( lPos + 2, t.sToken.Len() - lPos - 1 );
+ pDbf = (xbDbf *) xbase->GetDbfPtr( sTableName );
+*/
+
} else {
// table name is not part of the token
pDbf = dbf;
diff --git a/src/core/xbfile.cpp b/src/core/xbfile.cpp
index 937c16f..3b798a2 100755
--- a/src/core/xbfile.cpp
+++ b/src/core/xbfile.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.
@@ -48,6 +48,119 @@ xbFile::~xbFile(){
xbFclose();
}
+/************************************************************************/
+//! @brief Create Home Folders.
+/*!
+ Create xbase64 log and data folders in the home directory for current usre.
+
+ \returns Return Codes
+*/
+
+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.
/*!
@@ -1445,7 +1558,7 @@ xbInt16 xbFile::xbFputs( const xbString & s ){
/*!
\param p Pointer to data to write
\param size size of write
- \param nmemb Number of times to write it
+ \param nmemb Number of times to read it
\returns Return Codes
*/
@@ -1899,69 +2012,39 @@ void xbFile::SetLockRetryCount( xbInt16 iLockRetries ) {
}
#endif
+
+
/***********************************************************************/
#ifdef XB_DEBUG_SUPPORT
-//! @brief Debugging routine - dump a block to the log file.
+//! @brief Debugging routine - dump mem to the log file.
/*!
- This routine dumps a block to a file in the log file. This is
+ This routine dumps data from meemory to the log file. This is
primarily used for debugging and analysis purposes.
- \param ulBlockNo Block number to write
+ \param p Pointer to data to write
\param lBlxkSize Size of block
\returns Return Codes
*/
-xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
+xbInt16 xbFile::DumpMemToDisk( char *p, size_t lSize ){
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
-
- xbUInt32 ulStartBlock;
- xbUInt32 ulEndBlock;
-
- char *p = 0x00;
-
xbString sDir;
xbString sFn;
- char *buf = NULL;
- FILE *fpd = NULL;
- try{
- iErrorStop = 100;
- if( ulBlockNo == 0 ){
- ulStartBlock = 0;
- xbUInt64 ullFileSizeulBlockNo;
- if(( iRc = GetFileSize( ullFileSizeulBlockNo )) != XB_NO_ERROR ){
- iErrorStop = 110;
- throw iRc;
- }
- ulEndBlock = (xbUInt32) (ullFileSizeulBlockNo / lBlkSize);
- } else {
- ulStartBlock = ulBlockNo;
- ulEndBlock = ulBlockNo;
- }
-
- if(( buf = (char *) malloc( lBlkSize )) == NULL ){
- iErrorStop = 120;
- iRc = XB_NO_MEMORY;
- throw iRc;
- }
-
- sDir = GetDefaultLogDirectory();
- char cLastChar = sDir[sDir.Len()];
+ FILE *fpd = NULL;
- for( xbUInt32 l = ulStartBlock; l < ulEndBlock; l++ ){
+ try{
- if(( iRc = ReadBlock( l, lBlkSize, buf )) != XB_NO_ERROR ){
- iErrorStop = 130;
- throw iRc;
- }
+ sDir = GetLogDirectory();
+ char cLastChar = sDir[sDir.Len()];
// build logfile name
if( cLastChar != '/' && cLastChar != '\\' )
- sFn.Sprintf( "%s/Blockdump.B%ld", sDir.Str(), l);
+ sFn.Sprintf( "%s/MemDump.txt", sDir.Str());
else
- sFn.Sprintf( "%sBlockDump.%ld", sDir.Str(), l);
+ sFn.Sprintf( "%sMemDump.txt", sDir.Str());
// open the dump file for append
#ifdef HAVE__FSOPEN_F
@@ -1969,17 +2052,17 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
#else
if(( fpd = fopen( sFn.Str(), "w+b")) == NULL ){
#endif
- iErrorStop = 140;
+ iErrorStop = 100;
iRc = XB_OPEN_ERROR;
throw iRc;
}
+ int i;
// dump the block to the file
- p = buf;
- for( size_t l = 0; l < lBlkSize; l++ ){
- //if( fputc( *p, fpd ) != *p ){
- if( fputc( *p, fpd ) == EOF ){
- iErrorStop = 150;
+ for( size_t l = 0; l < lSize; l++ ){
+ i = *p;
+ if( fputc( i, fpd ) == EOF ){
+ iErrorStop = 110;
iRc = XB_WRITE_ERROR;
throw iRc;
}
@@ -1988,6 +2071,103 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
// close the dump file
fclose( fpd );
}
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ if( fpd )
+ fclose( fpd );
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+//! @brief Debugging routine - dump a block to the log file.
+/*!
+ This routine dumps a block to the log file. This is
+ primarily used for debugging and analysis purposes.
+
+ \param ulBlockNo Block number to write
+ \param lBlxkSize Size of block
+ \returns Return Codes
+*/
+xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ xbUInt32 ulStartBlock;
+ xbUInt32 ulEndBlock;
+
+ char *p = 0x00;
+
+ xbString sDir;
+ xbString sFn;
+ char *buf = NULL;
+ FILE *fpd = NULL;
+ try{
+
+ if( ulBlockNo == 0 ){
+ ulStartBlock = 0;
+ xbUInt64 ullFileSizeulBlockNo;
+ if(( iRc = GetFileSize( ullFileSizeulBlockNo )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ ulEndBlock = (xbUInt32) (ullFileSizeulBlockNo / lBlkSize);
+ } else {
+ ulStartBlock = ulBlockNo;
+ ulEndBlock = ulBlockNo;
+ }
+
+ if(( buf = (char *) malloc( lBlkSize )) == NULL ){
+ iErrorStop = 110;
+ iRc = XB_NO_MEMORY;
+ throw iRc;
+ }
+
+ sDir = GetLogDirectory();
+ char cLastChar = sDir[sDir.Len()];
+
+ for( xbUInt32 l = ulStartBlock; l < ulEndBlock; l++ ){
+
+ if(( iRc = ReadBlock( l, lBlkSize, buf )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+ // build logfile name
+ if( cLastChar != '/' && cLastChar != '\\' )
+ sFn.Sprintf( "%s/BlockDump.B%ld", sDir.Str(), l);
+ else
+ sFn.Sprintf( "%sBlockDump.%ld", sDir.Str(), l);
+
+ // open the dump file for append
+ #ifdef HAVE__FSOPEN_F
+ if(( fpd = _fsopen( sFn.Str(), "w+b", 0x40 )) == NULL ){
+ #else
+ if(( fpd = fopen( sFn.Str(), "w+b")) == NULL ){
+ #endif
+ iErrorStop = 130;
+ iRc = XB_OPEN_ERROR;
+ throw iRc;
+ }
+
+ // dump the block to the file
+ p = buf;
+ for( size_t l = 0; l < lBlkSize; l++ ){
+ //if( fputc( *p, fpd ) != *p ){
+ if( fputc( *p, fpd ) == EOF ){
+ iErrorStop = 140;
+ iRc = XB_WRITE_ERROR;
+ throw iRc;
+ }
+ p++;
+ }
+ // close the dump file
+ fclose( fpd );
+ }
// free the buffer
if( buf )
@@ -1995,10 +2175,7 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
}
catch (xbInt16 iRc ){
xbString sMsg;
- if( iErrorStop == 160 )
- sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d] c=[%c][%x]", iErrorStop, iRc, *p, *p );
- else
- sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ sMsg.Sprintf( "xbFile::DumpBlockToDisk() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
if( buf )
@@ -2007,7 +2184,6 @@ xbInt16 xbFile::DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlkSize ){
fclose( fpd );
}
return iRc;
-
}
#endif
/***********************************************************************/
diff --git a/src/core/xbfilter.cpp b/src/core/xbfilter.cpp
index 507a9e7..0fb643d 100755
--- a/src/core/xbfilter.cpp
+++ b/src/core/xbfilter.cpp
@@ -26,8 +26,7 @@ This module handles uda (user data area) methods
namespace xb{
/************************************************************************/
-xbFilter::xbFilter( xbXBase *xbase, xbDbf *dbf ) {
- this->xbase = xbase;
+xbFilter::xbFilter( xbDbf *dbf ) {
this->dbf = dbf;
this->exp = NULL;
lLimit = 0; // max number of responses
@@ -62,6 +61,12 @@ void xbFilter::ResetQryCnt(){
this->lCurQryCnt = 0;
}
+/************************************************************************/
+xbInt16 xbFilter::Set( const char *sFilter ) {
+ xbString sFilt( sFilter );
+ return Set( sFilt );
+}
+
/************************************************************************/
xbInt16 xbFilter::Set( xbString &sFilter ) {
@@ -72,7 +77,7 @@ xbInt16 xbFilter::Set( xbString &sFilter ) {
if( exp )
delete exp;
- exp = new xbExp( xbase, dbf );
+ exp = new xbExp( dbf->GetXbasePtr(), dbf );
if(( iRc = exp->ParseExpression( sFilter.Str() )) != XB_NO_ERROR ){
iErrorStop = 100;
throw iRc;
@@ -88,8 +93,8 @@ xbInt16 xbFilter::Set( xbString &sFilter ) {
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbFilter::SetExpression() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( xbase->GetErrorMessage( iRc ));
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
}
return iRc;
}
@@ -141,8 +146,8 @@ xbInt16 xbFilter::GetFirstRecord( xbInt16 iOption ) {
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbFilter::GetFirstRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( xbase->GetErrorMessage( iRc ));
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
}
return iRc;
}
@@ -196,8 +201,8 @@ xbInt16 xbFilter::GetNextRecord( xbInt16 iOption ){
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbFilter::GetNextRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( xbase->GetErrorMessage( iRc ));
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
}
return iRc;
}
@@ -251,8 +256,8 @@ xbInt16 xbFilter::GetPrevRecord( xbInt16 iOption ){
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbFilter::GetPrevRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( xbase->GetErrorMessage( iRc ));
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
}
return iRc;
}
@@ -304,8 +309,8 @@ xbInt16 xbFilter::GetLastRecord( xbInt16 iOption ){
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbFilter::GetLastRecord() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( xbase->GetErrorMessage( iRc ));
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
}
return iRc;
}
@@ -363,8 +368,8 @@ xbInt16 xbFilter::GetFirstRecordIx( xbInt16 iOption ) {
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbFilter::GetFirstRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( xbase->GetErrorMessage( iRc ));
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
}
return iRc;
}
@@ -419,8 +424,8 @@ xbInt16 xbFilter::GetNextRecordIx( xbInt16 iOption ){
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbFilter::GetNextRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( xbase->GetErrorMessage( iRc ));
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
}
return iRc;
}
@@ -475,8 +480,8 @@ xbInt16 xbFilter::GetPrevRecordIx( xbInt16 iOption ){
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbFilter::GetPrevRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( xbase->GetErrorMessage( iRc ));
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
}
return iRc;
}
@@ -491,7 +496,6 @@ xbInt16 xbFilter::GetLastRecordIx( xbInt16 iOption ){
iErrorStop = 100;
throw iRc;
}
-
lCurQryCnt = 0;
if(( iRc = dbf->GetCurIx()->GetLastKey( dbf->GetCurTag(), iOption )) != XB_NO_ERROR ){
if( iRc == XB_EOF )
@@ -501,7 +505,6 @@ xbInt16 xbFilter::GetLastRecordIx( xbInt16 iOption ){
throw iRc;
}
}
-
xbBool bFound = xbFalse;
while( !bFound && iRc == XB_NO_ERROR ){
if(( iRc = exp->ProcessExpression()) != XB_NO_ERROR ){
@@ -528,12 +531,11 @@ xbInt16 xbFilter::GetLastRecordIx( xbInt16 iOption ){
catch (xbInt16 iRc ){
xbString sMsg;
sMsg.Sprintf( "xbFilter::GetLastRecordIx() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( xbase->GetErrorMessage( iRc ));
+ dbf->GetXbasePtr()->WriteLogMessage( sMsg.Str() );
+ dbf->GetXbasePtr()->WriteLogMessage( dbf->GetXbasePtr()->GetErrorMessage( iRc ));
}
return iRc;
}
-
#endif // XB_INDEX_SUPPORT
diff --git a/src/core/xbixmdx.cpp b/src/core/xbixmdx.cpp
index 95f342c..135cde8 100755
--- a/src/core/xbixmdx.cpp
+++ b/src/core/xbixmdx.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.
@@ -108,7 +108,7 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
} else {
// land here with a full leaf node
- //std::cout << "Section B begin split leaf node\n";
+ // std::cout << "Section B begin split leaf node\n";
iHeadNodeUpdateOpt = 1;
npRightNode = AllocateIxNode( npTag, GetBlockSize() + (xbUInt32) npTag->iKeyItemLen, npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor );
@@ -122,7 +122,7 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
ulNewRightChild = npRightNode->ulBlockNo * (xbUInt32) iBlockFactor;
}
- //std::cout << "ulNewRightChild = " << ulNewRightChild << "\n";
+ // std::cout << "ulNewRightChild = " << ulNewRightChild << "\n";
if(( iRc = xbIxMdx::SplitNodeL( npTag, npTag->npCurNode, npRightNode, npTag->npCurNode->iCurKeyNo, npTag->cpKeyBuf, ulRecNo )) != XB_NO_ERROR ){
iErrorStop = 130;
@@ -169,7 +169,8 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
// section D - if cur node is split root, create new root
if(( npTag->npCurNode->ulBlockNo * (xbUInt32) iBlockFactor ) == npTag->ulRootPage ){
- // std::cout << "Section D begin\n";
+
+ // std::cout << "Section D begin right node = " << npRightNode << "\n";
if(( iRc = AddKeyNewRoot( npTag, npTag->npCurNode, npRightNode )) != XB_NO_ERROR ){
iErrorStop = 160;
@@ -179,9 +180,10 @@ xbInt16 xbIxMdx::AddKey( void * vpTag, xbUInt32 ulRecNo ){
if( npRightNode )
npRightNode = FreeNodeChain( npRightNode );
- //std::cout << "Section D end\n";
+ // std::cout << "Section D end\n";
} else {
+
// std::cout << "Section E, put key in parent\n";
if(( iRc = InsertNodeI( (void *) vpTag, (xbIxNode *) npParent, (xbInt16) npParent->iCurKeyNo, BlockToPage( npRightNode->ulBlockNo ))) != XB_NO_ERROR ){
iErrorStop = 170;
@@ -284,8 +286,8 @@ xbInt16 xbIxMdx::AddKeyNewRoot( xbMdxTag *npTag, xbIxNode *npLeft, xbIxNode *np
// std::cout << "AddKeyNewRoot - LeftBlock = " << npLeft->ulBlockNo << "\n";
// std::cout << "AddKeyNewRoot - RightBlock = " << npRight->ulBlockNo << "\n";
- pLastKey = (char *) malloc( (size_t) npTag->iKeyLen );
+ pLastKey = (char *) malloc( (size_t) npTag->iKeyLen );
if(( iRc = GetLastKeyForBlockNo( npTag, npLeft->ulBlockNo, pLastKey )) != XB_NO_ERROR ){
iErrorStop = 110;
throw iRc;
@@ -301,10 +303,17 @@ 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->iKeyLen);
+ // pTrg+= (npTag->iKeyItemLen)-4;
+
+ pTrg+= npTag->iKeyItemLen - 4;
+
+ //pTrg-=4;
+
ePutUInt32( pTrg, npRight->ulBlockNo * (xbUInt32) iBlockFactor );
// write out the new block
@@ -598,15 +607,17 @@ xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
iErrorStop = 100;
throw iRc;
}
- bLocked = xbTrue;
+ bLocked = xbTrue;
}
#endif
memset( npTag->cpKeyBuf2, 0x00, (size_t) npTag->iKeyLen );
+ // memset( npTag->cpKeyBuf2, 0x00, (size_t) npTag->iKeyItemLen );
cKeyType = GetKeyType( vpTag );
pPrevKeyBuf = (char *) calloc( 1, (size_t) npTag->iKeyLen );
iRc = GetFirstKey( vpTag, 0 );
+
memcpy( pPrevKeyBuf, GetKeyData( npTag->npCurNode, npTag->npCurNode->iCurKeyNo, npTag->iKeyItemLen ), (size_t) npTag->iKeyLen );
// for each key in the index, make sure it is trending in the right direction
@@ -719,7 +730,7 @@ xbInt16 xbIxMdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
free( pPrevKeyBuf );
if( iErrorStop == 160 ){
- sMsg.Sprintf( "xbIxNdx::CheckTagIntegrity() Missing index entry for record [%d]", ulThisRecNo );
+ sMsg.Sprintf( "xbIxMdx::CheckTagIntegrity() Missing index entry for record [%d]", ulThisRecNo );
xbase->WriteLogMessage( sMsg, iOpt );
}
}
@@ -1171,8 +1182,13 @@ xbInt16 xbIxMdx::CreateTag( const xbString &sName, const xbString &sKey, const
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 );
@@ -2657,6 +2673,7 @@ xbInt16 xbIxMdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw = 0 ){
// convert the tag pointer to mdx tag pointer
xbMdxTag * mpTag = (xbMdxTag *) vpTag;
+
try{
// clear out any history
if( mpTag->npNodeChain ){
@@ -2668,6 +2685,7 @@ xbInt16 xbIxMdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw = 0 ){
iErrorStop = 100;
throw iRc;
}
+
// lRootPage is available
if(( iRc = GetBlock( vpTag, (mpTag->ulRootPage / (xbUInt32) iBlockFactor), 1 )) != XB_NO_ERROR ){
iErrorStop = 110;
@@ -2683,8 +2701,7 @@ xbInt16 xbIxMdx::GetFirstKey( void *vpTag, xbInt16 iRetrieveSw = 0 ){
return iRc;
}
- while( !IsLeaf( vpTag, mpTag->npCurNode )) // go down the chain looking for a leaf node
- {
+ while( !IsLeaf( vpTag, mpTag->npCurNode )){ // go down the chain looking for a leaf node
if(( iRc = GetKeyPtr( vpTag, 0, mpTag->npCurNode, ulKeyPtr )) != XB_NO_ERROR ){
iErrorStop = 120;
throw iRc;
@@ -2878,7 +2895,7 @@ xbInt16 xbIxMdx::GetLastKey( xbUInt32 ulBlockNo, void *vpTag, xbInt16 iRetrieveS
}
mpTag->npCurNode->iCurKeyNo = ulNoOfKeys;
- ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
+ ulNoOfKeys = eGetUInt32( mpTag->npCurNode->cpBlockData );
xbUInt32 ulKeyPtr = 0;
while( !IsLeaf( vpTag, mpTag->npCurNode )){ // go down the chain looking for a leaf node
@@ -3559,6 +3576,11 @@ xbInt16 xbIxMdx::InsertNodeI( void *vpTag, xbIxNode *npNode, xbInt16 iSlotNo, xb
pSrc = pLastKey;
for( xbInt16 i = 0; i < npTag->iKeyLen; i++ )
*pTrg++ = *pSrc++;
+
+ pTrg = pNewKeyPos;
+ //pTrg+= npTag->iKeyItemLen - 4;
+ pTrg+= npTag->iKeyItemLen;
+
ePutUInt32( pTrg, ulPtr);
ePutInt32( npNode->cpBlockData, ++lKeyCnt );
@@ -4683,7 +4705,7 @@ xbInt16 xbIxMdx::SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
}
catch (xbInt16 iRc ){
xbString sMsg;
- sMsg.Sprintf( "xbIxNdx::SplitNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
+ sMsg.Sprintf( "xbIxMdx::SplitNodeI() Exception Caught. Error Stop = [%d] iRc = [%d]", iErrorStop, iRc );
xbase->WriteLogMessage( sMsg );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
@@ -4712,7 +4734,7 @@ xbInt16 xbIxMdx::SplitNodeI( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
\returns Return Codes
*/
-xbInt16 xbIxMdx::SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
+xbInt16 xbIxMdx::SplitNodeL( void *vpTag, xbIxNode * npLeft, xbIxNode *npRight,
xbInt16 iSlotNo, char * cpKeyBuf, xbUInt32 ulPtr ){
xbInt16 iRc = XB_NO_ERROR;
diff --git a/src/core/xbixndx.cpp b/src/core/xbixndx.cpp
index dcec5f9..9d946dd 100755
--- a/src/core/xbixndx.cpp
+++ b/src/core/xbixndx.cpp
@@ -342,7 +342,7 @@ xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
iErrorStop = 100;
throw iRc;
}
- bLocked = xbTrue;
+ bLocked = xbTrue;
}
#endif
@@ -425,7 +425,6 @@ xbInt16 xbIxNdx::CheckTagIntegrity( void *vpTag, xbInt16 iOpt ){
sMsg.Sprintf( "CheckTagIntegrity() Index entry count [%ld] matches dbf record count [%ld]", ulIxCnt, ulDbfCnt );
xbase->WriteLogMessage( sMsg, iOpt );
}
-
if( pPrevKeyBuf )
free( pPrevKeyBuf );
diff --git a/src/core/xblog.cpp b/src/core/xblog.cpp
index ea7c9d6..6031c9e 100755
--- a/src/core/xblog.cpp
+++ b/src/core/xblog.cpp
@@ -25,8 +25,8 @@ namespace xb{
//! @brief Constructor.
xbLog::xbLog() : xbFile( NULL ){
- SetDirectory( GetDefaultLogDirectory());
- SetFileName ( GetDefaultLogFileName());
+ SetDirectory( GetLogDirectory());
+ SetFileName ( GetLogFileName());
bLoggingStatus = xbFalse;
lLogSize = 50000;
diff --git a/src/core/xbssv.cpp b/src/core/xbssv.cpp
index 252daab..d3e1070 100755
--- a/src/core/xbssv.cpp
+++ b/src/core/xbssv.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.
@@ -15,8 +15,6 @@ Email Contact:
#include "xbase.h"
-
-
namespace xb{
const xbErrorMessage xbErrorMessages[] = {
@@ -26,6 +24,7 @@ const xbErrorMessage xbErrorMessages[] = {
{ XB_DUP_TABLE_OR_ALIAS, "Duplicate Alias/Table Name" },
{ XB_INVALID_NODELINK, "Invalid Node Link" },
{ XB_KEY_NOT_UNIQUE, "Key Not Unique" },
+ { XB_MEMCPY_ERROR, "Memory copy failure" },
{ XB_FILE_EXISTS, "File Already Exists" },
{ XB_ALREADY_OPEN, "Database already open" },
{ XB_DBF_FILE_NOT_OPEN, "DBF File Not Open" },
@@ -49,6 +48,8 @@ const xbErrorMessage xbErrorMessages[] = {
{ XB_INVALID_TABLE_NAME, "Invalid Table Name" },
{ XB_EMPTY, "Empty Table or Index" },
{ XB_LIMIT_REACHED, "Limit Reached" },
+ { XB_BLOCKREAD_NOT_ENABLED, "Block Read Mode is not enabled" },
+ { XB_DIRECTORY_ERROR, "Directory Read/Write error" },
{ XB_INVALID_FIELD_TYPE, "Unknown Field Type" },
{ XB_INVALID_FIELD_NO, "Invalid Field Number" },
{ XB_INVALID_DATA, "Invalid Data" },
@@ -89,12 +90,13 @@ xbBool xbSsv::bDefaultAutoCommit = xbTrue;
xbString xbSsv::sDataDirectory = PROJECT_DATA_DIR;
#else
xbString xbSsv::sDataDirectory = PROJECT_DATA_DIR;
-#endif
+#endif //
#ifdef XB_LOGGING_SUPPORT
-xbString xbSsv::sDefaultLogDirectory = PROJECT_LOG_DIR;
-xbString xbSsv::sDefaultLogFileName = PROJECT_DFLT_LOGFILE;
-#endif
+xbString xbSsv::sLogDirectory = PROJECT_LOG_DIR;
+//xbString xbSsv::sLogDirectory = "";
+xbString xbSsv::sLogFileName = PROJECT_DFLT_LOGFILE;
+#endif // XB_LOGGING_SUPPORT
#ifdef XB_LOCKING_SUPPORT
xbInt32 xbSsv::lDefaultLockWait = 100;
@@ -104,18 +106,21 @@ xbInt16 xbSsv::iDefaultLockFlavor = 1;
xbBool xbSsv::bMultiUser = xbTrue;
#else
xbBool xbSsv::bMultiUser = xbFalse;
-#endif
+#endif // XB_LOCKING_SUPPORT
#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
xbInt16 xbSsv::iUniqueKeyOpt = XB_HALT_ON_DUPKEY;
// is one of XB_HALT_ON_DUPKEY || XB_EMULATE_DBASE
-#endif
+#endif // defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
#ifdef XB_MDX_SUPPORT
xbInt16 xbSsv::iCreateMdxBlockSize = 1024; // 1024 is DBase 7 default size for MDX index blocks
-#endif
+#endif // XB_MDX_SUPPORT
+#ifdef XB_BLOCKREAD_SUPPORT
+xbUInt32 xbSsv::ulDefaultBlockReadSize = 32768; // 32K buffer for block DBF datafile reads
+#endif // XB_BLOCKREAD_SUPPORT
/*************************************************************************/
//! @brief Class Constructor.
@@ -139,7 +144,6 @@ void xbSsv::BitDump( char c ) const {
xbBool xbSsv::BitSet( unsigned char c, xbInt16 iBitNo ) const {
return c & 1 << iBitNo;
}
-
/*************************************************************************/
//! @brief Display error message on console for a given error number.
/*!
@@ -164,7 +168,6 @@ void xbSsv::DisplayError( xbInt16 iErrorCode ) const {
xbBool xbSsv::GetDefaultAutoCommit() const {
return bDefaultAutoCommit;
}
-
/*************************************************************************/
//! @brief Get the current data directory.
/*!
@@ -184,19 +187,6 @@ xbString &xbSsv::GetDataDirectory() const {
xbString & xbSsv::GetDefaultDateFormat() const {
return sDefaultDateFormat;
}
-
-/*************************************************************************/
-// @brief Get the default file format version.
-/*
- \returns 3 - Dbase III file format
- 4 - Dbase IV file format
-*/
-
-/*
-xbInt16 xbSsv::GetDefaultFileVersion() const {
- return iDefaultFileVersion;
-}
-*/
/*************************************************************************/
//! @brief Get the Endian type.
/*!
@@ -206,7 +196,6 @@ xbInt16 xbSsv::GetDefaultFileVersion() const {
xbInt16 xbSsv::GetEndianType() const {
return iEndianType;
}
-
/*************************************************************************/
//! @brief Get an error message.
/*!
@@ -230,7 +219,25 @@ const char * xbSsv::GetErrorMessage( xbInt16 iErrorCode ) const{
}
return "";
}
+/*************************************************************************/
+//! @brief Get home directory.
+/*!
+ \param sHomeDirOut - Output home directory for current user.
+ \returns void
+*/
+
+void xbSsv::GetHomeDir( xbString &sHomeDirOut ){
+ #ifdef WIN32
+ sHomeDirOut.Sprintf( "%s%s", getenv( "HOMEDRIVE" ), getenv( "HOMEPATH" ));
+ #else
+ sHomeDirOut.Sprintf( "%s", getenv( "HOME" ));
+ sHomeDirOut.Trim();
+ if( sHomeDirOut == "" )
+ sHomeDirOut.Sprintf( "%s", getpwuid( getuid())->pw_dir );
+ #endif
+ sHomeDirOut.Trim();
+}
/*************************************************************************/
//! @brief Set the data directory.
/*!
@@ -240,7 +247,6 @@ const char * xbSsv::GetErrorMessage( xbInt16 iErrorCode ) const{
void xbSsv::SetDataDirectory( const xbString &sDataDirectory ){
this->sDataDirectory = sDataDirectory;
-
#ifdef WIN32
this->sDataDirectory.SwapChars( '/', '\\' );
#else
@@ -302,57 +308,53 @@ void xbSsv::SetEndianType() {
/*!
\returns Returns the log file name.
*/
-xbString & xbSsv::GetDefaultLogFileName() const {
- return sDefaultLogFileName;
+xbString & xbSsv::GetLogFileName() const {
+ return sLogFileName;
}
-
/*************************************************************************/
//! @brief Get the default log directory.
/*!
\returns Returns the log directory.
*/
-xbString & xbSsv::GetDefaultLogDirectory() const {
- return sDefaultLogDirectory;
+xbString & xbSsv::GetLogDirectory() const {
+ return sLogDirectory;
}
/*************************************************************************/
//! @brief Set the default log directory name.
/*!
- \param sDefaultLogDirectory Name of desired log directory.
+ \param sLogDirectory Name of desired log directory.
*/
-void xbSsv::SetDefaultLogDirectory( const xbString &sDefaultLogDirectory ){
-
- this->sDefaultLogDirectory = sDefaultLogDirectory;
+void xbSsv::SetLogDirectory( const xbString &sLogDirectoryIn ){
+ this->sLogDirectory = sLogDirectoryIn;
#ifdef WIN32
- this->sDefaultLogDirectory.SwapChars( '/', '\\' );
+ this->sLogDirectory.SwapChars( '/', '\\' );
#else
- this->sDefaultLogDirectory.SwapChars( '\\', '/' );
+ this->sLogDirectory.SwapChars( '\\', '/' );
#endif
-
}
#else
-xbString & xbSsv::GetDefaultLogFileName() const {
+xbString & xbSsv::GetLogFileName() const {
return sNullString;
}
-xbString & xbSsv::GetDefaultLogDirectory() const {
+xbString & xbSsv::GetLogDirectory() const {
return sNullString;
}
-void xbSsv::SetDefaultLogDirectory( const xbString &sDefaultLogDirectory ){
+void xbSsv::SetLogDirectory( const xbString &sLogDirectory ){
return;
}
#endif
-
/*************************************************************************/
#ifdef XB_LOCKING_SUPPORT
@@ -541,6 +543,29 @@ xbInt16 xbSsv::SetUniqueKeyOpt( xbInt16 iOpt ){
}
#endif
/************************************************************************/
+#ifdef XB_BLOCKREAD_SUPPORT
+
+//! @brief Get Default Read Block Size
+/*!
+ This routine returns the default read block size used when allocating
+ buffer space for block reads of table data. Initial setting is 32768 bytes.
+*/
+xbUInt32 xbSsv::GetDefaultBlockReadSize() const {
+ return ulDefaultBlockReadSize;
+}
+
+
+//! @brief Set Default Read Block Size
+/*!
+ This routine sets the default read block size used when allocating
+ buffer space for block reads of table data. Initial setting is 32768 bytes.
+*/
+void xbSsv::SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize ){
+ ulDefaultBlockReadSize = ulDfltBlockReadSize;
+}
+
+#endif // XB_BLOCKREAD_SUPPORT
+/************************************************************************/
diff --git a/src/core/xbstring.cpp b/src/core/xbstring.cpp
index 81e67b8..701e50e 100755
--- a/src/core/xbstring.cpp
+++ b/src/core/xbstring.cpp
@@ -1263,6 +1263,45 @@ xbString &xbString::PadRight( char c, xbUInt32 ulNewLen ){
return *this;
}
+/************************************************************************/
+//! @brief Determine position of a given character
+/*!
+ \param c Seek character
+ \param ulStartPos starting position for search, first position is 1
+ \returns Position within string. Returns 0 if not found.
+*/
+xbUInt32 xbString::Pos(char c, xbUInt32 ulStartPos ) const {
+
+ if (data == NULL)
+ return 0;
+ char *p = data;
+
+ if( ulStartPos >= size )
+ return 0;
+
+ xbUInt32 iPos = 0;
+ while( (iPos+1) < ulStartPos ){
+ p++;
+ iPos++;
+ }
+ xbBool bFound = 0;
+ while( *p && !bFound && iPos < ( size - 1 )){
+ if( *p == c )
+ bFound = 1;
+ else {
+ iPos++;
+ p++;
+ }
+ }
+
+ if( bFound )
+ return iPos + 1;
+ else
+ return 0;
+}
+
+
+
/************************************************************************/
//! @brief Determine position of a given character
/*!
@@ -1375,41 +1414,51 @@ xbString &xbString::Replace( const char *sReplace, const char *sReplaceWith, xbI
xbBool bDone = xbFalse;
xbUInt32 ulPos;
- xbUInt32 ulNewSize;
+ xbUInt32 ulNewLen;
+ xbUInt32 ulReplaceWithLen;
+ xbUInt32 ulRsLen; // size of right side of string after replaced data
xbUInt32 ulSp2;
char *sBuf2;
+ const char *s; // source ptr
+ char *t; // target ptr
+
while( !bDone ){
ulPos = Pos( sReplace );
if( ulPos == 0 ){
bDone = xbTrue;
} else {
- ulNewSize = this->size + sizeof( sReplaceWith ) - sizeof( sReplace );
- sBuf2 = (char *) calloc( 1, ulNewSize );
+ ulReplaceWithLen = (xbUInt32) strlen( sReplaceWith );
+ ulNewLen = this->size + ulReplaceWithLen - (xbUInt32) strlen( sReplace );
+ sBuf2 = (char *) calloc( 1, ulNewLen );
// copy part1
+ t = sBuf2;
+ s = data;
for( xbUInt32 ul = 0; ul < ulPos-1; ul++ )
- sBuf2[ul] = data[ul];
+ *t++ = *s++;
// copy part2
- strcat( sBuf2, sReplaceWith );
+ s = sReplaceWith;
+ for( xbUInt32 ul = 0; ul < ulReplaceWithLen; ul++ )
+ *t++ = *s++;
// copy part3
- ulSp2 = ulPos + strlen( sReplace );
- char *p = data;
- p+= (ulSp2 - 1);
- strcat( sBuf2, p );
+ ulSp2 = ulPos + (xbUInt32) strlen( sReplace );
+ s = data;
+ s+= (ulSp2 - 1);
+ ulRsLen = (xbUInt32) strlen( s );
+ for( xbUInt32 ul = 0; ul < ulRsLen; ul++ )
+ *t++ = *s++;
if( iOption )
bDone = xbTrue;
free(data);
data = sBuf2;
-
}
}
-
return *this;
}
diff --git a/src/core/xbtblmgr.cpp b/src/core/xbtblmgr.cpp
index f154dc6..2fe6a8c 100755
--- a/src/core/xbtblmgr.cpp
+++ b/src/core/xbtblmgr.cpp
@@ -22,20 +22,19 @@ Email Contact:
namespace xb{
/*************************************************************************/
-
xbTblMgr::xbTblMgr(){
TblList = NULL;
iOpenTableCount = 0;
}
/*************************************************************************/
-
xbTblMgr::~xbTblMgr(){
xbTblList *l;
if( TblList ){
while( TblList ){
l = TblList;
TblList = TblList->pNext;
+ delete l->psFqTblName;
delete l->psTblName;
delete l->psTblAlias;
free( l );
@@ -44,47 +43,74 @@ xbTblMgr::~xbTblMgr(){
}
/*************************************************************************/
-
-xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sTblName ){
- return AddTblToTblList( d, sTblName, "" );
+xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sFqTblName ){
+ return AddTblToTblList( d, sFqTblName, "" );
}
/*************************************************************************/
+xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sFqTblName, const xbString & sTblAlias ) {
+
+ // Set the Fq (fully qualified name)
+ // Pull the table name from the FQ name
+ // Set the Alias to the table name if the alias name is not provided
-xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sTblName, const xbString & sTblAlias ) {
xbTblList *i, *s, *t;
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
+ xbString sTblName;
xbString sAlias;
+ xbString sTemp;
+ xbString sFqTemp;
+ xbUInt32 iSlashPos;
+
+ // std::cout << "AddTblToTblList fq in = [" << sFqTblName.Str() << "] alias in =[" << sTblAlias.Str() << "]\n";
try{
- if( sTblName.Len() == 0 ){
+ if( sFqTblName.Len() == 0 ){
iErrorStop = 100;
iRc = XB_INVALID_TABLE_NAME;
throw iRc;
}
- if( sTblAlias.Len() == 0 ){
+ sTblName = sFqTblName;
+ sTblName.SwapChars( '\\', '/' );
+ iSlashPos = sTblName.GetLastPos( '/' );
+
+ // std::cout << "slashpos = " << iSlashPos << "\n";
+
+
+ if( iSlashPos > 0 ){
+ sTblName.Ltrunc( iSlashPos ); // remove the directory part from the table name
+ sFqTemp = sFqTblName;
+ } else{
+ sFqTemp.Sprintf( "%s%s", GetDataDirectory().Str(), sFqTblName.Str()); // add the dir part to the FQ name
+ }
+
+ xbUInt32 iDbfPos = sFqTemp.Pos( ".DBF" );
+ if( iDbfPos == 0 )
+ sFqTemp += ".DBF";
+ else
+ sTblName.Resize( sTblName.Len() - 3 );
+
+ if( sTblAlias.Len() == 0 )
sAlias = sTblName;
- sAlias.SwapChars( '\\', '/' );
- xbUInt32 iPos = sAlias.GetLastPos( '/' );
- if( iPos > 0 ) /* get rid of the directory part of the name */
- sAlias.Ltrunc( iPos );
- } else {
+ else
sAlias = sTblAlias;
- }
+
+ //std::cout << "fq=[" << sFqTemp.Str() << "] tblname = [" << sTblName.Str() << "] alias = [" << sAlias.Str() << "]\n";
if((i = (xbTblList *) calloc(1, sizeof(xbTblList))) == NULL){
iErrorStop = 110;
iRc = XB_NO_MEMORY;
throw iRc;
}
- i->psTblName = new xbString( sTblName );
- i->psTblAlias = new xbString( sAlias );
- i->pDbf = d;
- i->pNext = NULL;
+ i->psFqTblName = new xbString( sFqTemp );
+ i->psTblName = new xbString( sTblName );
+ i->psTblAlias = new xbString( sAlias );
+ i->pDbf = d;
+ i->pNext = NULL;
// insert new table into the list of open tables, sorted by table name
s = NULL;
@@ -97,7 +123,7 @@ xbInt16 xbTblMgr::AddTblToTblList( xbDbf *d, const xbString & sTblName, const xb
if( t && (strcmp( t->psTblAlias->Str(), sAlias.Str()) == 0 )){
iErrorStop = 120;
- delete i->psTblName;
+ delete i->psFqTblName;
delete i->psTblAlias;
free( i );
iRc = XB_DUP_TABLE_OR_ALIAS;
@@ -131,7 +157,7 @@ xbInt16 xbTblMgr::DisplayTableList() const {
else{
while( l ){
iTblCnt++;
- std::cout << iTblCnt << " Table=[" << l->psTblName->Str() << "] Alias=[" << l->psTblAlias->Str() << "]" << std::endl;
+ std::cout << iTblCnt << " FqFileName=[" << l->psFqTblName->Str() << "] TableName=[" << l->psTblName->Str() << "] Alias=[" << l->psTblAlias->Str() << "]" << std::endl;
l = l->pNext;
}
}
@@ -149,6 +175,7 @@ xbInt16 xbTblMgr::DisplayTableList() const {
xbDbf *xbTblMgr::GetDbfPtr(const xbString& sTblAlias) const {
+
xbTblList *t;
t = TblList;
xbString s;
@@ -159,14 +186,26 @@ xbDbf *xbTblMgr::GetDbfPtr(const xbString& sTblAlias) const {
s.Set( sTblAlias );
while( t ){
- if( s == t->psTblAlias->Str())
+ if( s == t->psTblAlias->Str()){
+ return t->pDbf;
+ }
+ t = t->pNext;
+ }
+
+ t = TblList;
+ while( t ){
+ std::cout << "s = [" << s.Str() << "] tbl name = [" << t->psTblName->Str() << "]\n";
+ if( s == t->psTblName->Str()){
+ std::cout << "found\n";
return t->pDbf;
+ }
t = t->pNext;
}
+
t = TblList;
while( t ){
- if( sTblAlias == t->psTblName->Str())
+ if( sTblAlias == t->psFqTblName->Str())
return t->pDbf;
t = t->pNext;
}
@@ -227,6 +266,7 @@ xbInt16 xbTblMgr::RemoveTblFromTblList( const xbString & sTblAlias ) {
else
TblList = i->pNext;
+ delete i->psFqTblName;
delete i->psTblName;
delete i->psTblAlias;
free( i );
@@ -254,6 +294,7 @@ xbInt16 xbTblMgr::RemoveTblFromTblList( xbDbf *pTbl ) {
else
TblList = i->pNext;
+ delete i->psFqTblName;
delete i->psTblName;
delete i->psTblAlias;
free( i );
diff --git a/src/core/xbxbase.cpp b/src/core/xbxbase.cpp
index 7443b26..20b7fcc 100755
--- a/src/core/xbxbase.cpp
+++ b/src/core/xbxbase.cpp
@@ -24,6 +24,10 @@ xbXBase::xbXBase() {
#ifdef XB_LOGGING_SUPPORT
xLog = new xbLog();
#endif
+
+ xbFile f( this );
+ f.SetHomeFolders();
+
}
/*************************************************************************/
//! @brief Class Deconstructor.
@@ -69,6 +73,53 @@ xbInt16 xbXBase::CloseAllTables(){
}
return iRc;
}
+
+
+
+/*************************************************************************/
+//! @brief Parse commmand line options for a given parm request
+/*!
+ \param lArgc Value passed from main( argc, argv[] )
+ \param sArgv Valued passed from main
+ \param sOptRqst Option to search for in the arguments list
+ \param sParmOut String token immediately to the right of the the option request, if found
+ \returns 0 - paramater request not found 1 - Parameter found
+*/
+
+xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, const char *sOptRqst, xbString &sParmOut ){
+ xbString sOpt( sOptRqst );
+ return GetCmdLineOpt( lArgc, sArgv, sOpt, sParmOut );
+}
+
+/*************************************************************************/
+//! @brief Parse commmand line options for a given parm request
+/*!
+ \param lArgc Value passed from main( argc, argv[] )
+ \param sArgv Valued passed from main
+ \param sOptRqst Option to search for in the arguments list
+ \param sParmOut String token immediately to the right of the the option request, if found
+ \returns 0 - paramater request not found 1 - Parameter found
+*/
+
+xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, xbString &sOptRqst, xbString &sParmOut ){
+
+ xbInt16 iFound = 0;
+ sParmOut = "";
+ if( lArgc < 2 ) // first string is the program name
+ return iFound;
+
+ xbInt32 i = 1;
+ while( iFound == 0 && i < lArgc ){
+ if( sOptRqst == sArgv[i] ){
+ iFound = 1;
+ if( i < (lArgc-1))
+ sParmOut = sArgv[i+1];
+ }
+ i++;
+ }
+ return iFound;
+}
+
/*************************************************************************/
#ifdef XB_LOGGING_SUPPORT
//! @brief Get fully qualified log file name.
@@ -109,6 +160,7 @@ xbBool xbXBase::GetLogStatus() const {
\return void
*/
void xbXBase::SetLogFileName( const xbString & sLogFileName ){
+
xLog->SetFileName( sLogFileName );
}
@@ -550,7 +602,7 @@ xbDbf* xbXBase::Open( const xbString &sTableName, xbInt16 &iRc ){
\param iOpenMode - XB_READ_WRITE or XB_READ
\param iShareMode - XB_SINGLE_USER or XB_MULTI_USER
\param iRequestVersion 0 - Highest available
- 4 - Version four dbf
+ 4 - Version four dbf
3 - Version three dbf
\param iRc - Return code from open request
\returns param dbf - Output pointer to dbf file opened or null if error
diff --git a/src/examples/xb_ex_expression.cpp b/src/examples/xb_ex_expression.cpp
index dc6d7e6..840e9c6 100755
--- a/src/examples/xb_ex_expression.cpp
+++ b/src/examples/xb_ex_expression.cpp
@@ -65,7 +65,9 @@ void PrintResult( xbString *sExpression, xbExp *exp ){
}
//*********************************************************************************************************************************
-int main( int ac, char ** av ){
+//int main( int ac, char ** av ){
+
+int main(){
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
diff --git a/src/examples/xb_ex_ssv.cpp b/src/examples/xb_ex_ssv.cpp
new file mode 100755
index 0000000..a78345f
--- /dev/null
+++ b/src/examples/xb_ex_ssv.cpp
@@ -0,0 +1,134 @@
+/* xb_ex_ssv.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+This program demonstrates using functionality of the xbSsv class (Shared system values)
+
+*/
+
+#include "xbase.h"
+
+using namespace xb;
+
+int main( int ac, char ** av ){
+
+ xbXBase x; // set up xbase for business
+ xbString sMsg; // a message string
+
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ std::cout << sMsg.Str() << std::endl;
+
+
+ // example code to set up log file usage
+ #ifdef XB_LOGGING_SUPPORT
+ char cSeperator; // is this a unix (/) or windows (\) file system
+ xbString sLog; // general string for log file activities
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl;
+
+ cSeperator = sLog.GetPathSeparator(); // get the seperator from
+ std::cout << "Path seperator = [" << cSeperator << "]" << std::endl;
+
+ sLog.Sprintf( "..%c", cSeperator );
+ x.SetLogDirectory( sLog );
+ std::cout << "sLog = [" << sLog.Str() << "]\n";
+
+ sLog = x.GetLogFqFileName().Str(); // get the system default log file name
+ std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl;
+
+ // turn on logging after file name set
+ x.EnableMsgLogging();
+ #endif // XB_LOGGING_SUPPORT
+
+ // const char *GetErrorMessage( xbInt16 ErrorCode ) const;
+ // void DisplayError( xbInt16 ErrorCode ) const;
+ std::cout << "DisplayError( -100 ) - ";
+ x.DisplayError( -100 );
+ // << "]" << std::endl;
+
+ // void SetDefaultDateFormat( const xbString &sDefaultDateFormat );
+ // xbString& GetDefaultDateFormat() const;
+ std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat().Str() << std::endl;
+
+
+ // void SetDataDirectory ( const xbString &sDataDirectory );
+ // xbString& GetDataDirectory() const;
+ std::cout << "GetDataDirectory() - " << x.GetDataDirectory().Str() << std::endl;
+
+ // xbInt16 GetEndianType() const;
+ if( x.GetEndianType() == 'L' )
+ std::cout << "Little Endian Architecture." << std::endl;
+ else
+ std::cout << "Bid Endian Architecture." << std::endl;
+
+ //xbBool GetDefaultAutoCommit() const;
+ //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit );
+ if( x.GetDefaultAutoCommit())
+ std::cout << "AutoCommit is on." << std::endl;
+ else
+ std::cout << "AutoCommit is off." << std::endl;
+
+ //xbBool GetMultiUser () const;
+ //void SetMultiUser ( xbBool bMultiUser );
+ if( x.GetMultiUser())
+ std::cout << "Multi user (locking) is enabled." << std::endl;
+ else
+ std::cout << "Multi user (locking) not enabled." << std::endl;
+
+ #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+ // xbInt16 GetUniqueKeyOpt () const;
+ // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
+ // XB_HALT_ON_DUPKEY
+ // XB_EMULATE_DBASE
+ if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY )
+ std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl;
+ else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE )
+ std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl;
+ #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
+
+ #ifdef XB_LOCKING_SUPPORT
+ //xbInt16 GetDefaultLockRetries () const;
+ //void SetDefaultLockRetries ( xbInt16 iRetryCount );
+ //xbInt32 GetDefaultLockWait () const;
+ //void SetDefaultLockWait ( xbInt32 lRetryWait );
+ //xbInt16 GetDefaultLockFlavor () const;
+ //void SetDefaultLockFlavor ( xbInt16 iLockFlavor );
+ //xbBool GetDefaultAutoLock () const;
+ //void SetDefaultAutoLock ( xbBool bAutoLock );
+ //void EnableDefaultAutoLock ();
+ //void DisableDefaultAutoLock ();
+
+ std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl;
+ std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl;
+ std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl;
+ #endif // XB_LOCKING_SUPPORT
+
+ #ifdef XB_MDX_SUPPORT
+ // xbInt16 GetCreateMdxBlockSize() const;
+ // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
+ std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl;
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ // xbUInt32 GetDefaultBlockReadSize() const;
+ // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
+ std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+ //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const;
+ //void BitDump ( unsigned char c ) const;
+ //void BitDump ( char c ) const;
+ std::cout << "BitDump( 'A' ) - ";
+ x.BitDump( 'A' );
+
+ return 0;
+}
diff --git a/src/examples/xb_ex_v4_upd_dbf.cpp b/src/examples/xb_ex_v4_upd_dbf.cpp
index 96b6bdf..75d0641 100755
--- a/src/examples/xb_ex_v4_upd_dbf.cpp
+++ b/src/examples/xb_ex_v4_upd_dbf.cpp
@@ -258,15 +258,15 @@ int main()
throw iRc;
}
-
// example code to loop through the table
- for( xbUInt32 ulTuple = 1; ulTuple <= MyTable->GetRecordCount(); ulTuple++ ){
- if(( iRc = MyTable->GetRecord( ulTuple ) != XB_NO_ERROR )){
+ for( xbUInt32 ul = 1; ul <= MyTable->GetRecordCount(); ul++ ){
+ if(( iRc = MyTable->GetRecord( ul )) != XB_NO_ERROR ){
iErrorStop = 430;
throw iRc;
}
// do something with the record here
std::cout << "Tuple = " << MyTable->GetCurRecNo() << std::endl;
+
}
/* Close database and associated indexes */
diff --git a/src/include/xbase.h b/src/include/xbase.h
index 480d716..4ab8892 100755
--- a/src/include/xbase.h
+++ b/src/include/xbase.h
@@ -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
@@ -41,6 +41,10 @@ Email Contact:
#include
#endif
+#ifdef HAVE_PWD_H
+#include
+#endif
+
#ifdef HAVE_STDARG_H
#include
#endif
@@ -89,6 +93,7 @@ Email Contact:
#include
#include
+#include
#include /* dbf base class */
#include /* index base class */
#include
diff --git a/src/include/xbblkread.h b/src/include/xbblkread.h
new file mode 100755
index 0000000..353c618
--- /dev/null
+++ b/src/include/xbblkread.h
@@ -0,0 +1,70 @@
+/* xbblkread.h
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#ifndef __XB_BLKREAD_H__
+#define __XB_BLKREAD_H__
+
+namespace xb{
+#ifdef XB_BLOCKREAD_SUPPORT
+
+
+
+//! @brief xbBlockRead class.
+/*!
+The xbBlockRead class can be used to read blocks of records at one time
+rather than one record at a time for perfomance improvements when reading a DBF file sequentially.
+
+*/
+
+
+class XBDLLEXPORT xbBlockRead {
+
+ public:
+ xbBlockRead( xbDbf * d );
+ ~xbBlockRead();
+
+ #ifdef XB_DEBUG_SUPPORT
+ void DumpReadBlockInternals();
+ #endif
+
+ xbInt16 Init( xbUInt32 ulBlkSize = 0 );
+
+ xbUInt32 GetBlockFirstRecNo() const;
+ xbUInt32 GetBlockRecCnt() const;
+ xbUInt32 GetBlockSize() const;
+
+ xbInt16 GetRecord( xbUInt32 ulRecNo ); // retrieve a data record from a block to RecBuf
+ xbInt16 SetBlockSize( xbUInt32 ulBlkSize );
+
+
+ private:
+
+ xbInt16 GetBlockForRecNo( xbUInt32 ulRecNo ); // retrieve block from disk for a given record number
+
+ char *pBlock; // block pointer
+ xbUInt32 ulBlkSize; // block size in bytes
+ xbUInt32 ulFirstBlkRec; // first recod number in the block
+ xbUInt32 ulRecCnt; // number of records in block
+ xbUInt32 ulMaxRecs; // max number of records block can handle
+ xbBool bEof; // EOF flag
+ xbDbf *dbf; // reference to associated dbf file
+// xbXBase *xbase; // reference to main xbXBase structure
+ time_t tFmTime; // file modify time at time of block read
+
+};
+
+#endif // XB_BLOCKREAD
+} /* namespace */
+#endif /* __XB_BLOCKREAD_H__ */
diff --git a/src/include/xbconfig.h.in b/src/include/xbconfig.h.in
index 969b761..f0d475a 100755
--- a/src/include/xbconfig.h.in
+++ b/src/include/xbconfig.h.in
@@ -51,6 +51,7 @@
#cmakedefine HAVE_DOS_H
#cmakedefine HAVE_FCNTL_H
#cmakedefine HAVE_INTTYPES_H
+#cmakedefine HAVE_PWD_H
#cmakedefine HAVE_STDARG_H
#cmakedefine HAVE_STDARGS_H
#cmakedefine HAVE_STRING_H
@@ -100,6 +101,7 @@
#cmakedefine XB_SQL_SUPPORT
#cmakedefine XB_INF_SUPPORT
#cmakedefine XB_FILTER_SUPPORT
+#cmakedefine XB_BLOCKREAD_SUPPORT
#cmakedefine XB_UTILS_SUPPORT
#cmakedefine XB_EXAMPLES_SUPPORT
diff --git a/src/include/xbdate.h b/src/include/xbdate.h
index 5406cbb..8dff463 100755
--- a/src/include/xbdate.h
+++ b/src/include/xbdate.h
@@ -92,7 +92,6 @@ class XBDLLEXPORT xbDate : public xbSsv {
xbBool DateIsValid ( const xbString &sDate8 ) const;
xbInt16 DayOf( xbInt16 iFormat ) const;
xbInt16 CTOD( const xbString &sCtodInDate );
-// xbInt16 FormatDate( const char *sFmtIn, xbString &sFmtOut );
xbInt16 FormatDate( const xbString &sFmtIn, xbString &sFmtOut );
const char *Str() const;
xbBool IsLeapYear( xbInt16 iYear ) const;
diff --git a/src/include/xbdbf.h b/src/include/xbdbf.h
index c0842cb..16799f2 100755
--- a/src/include/xbdbf.h
+++ b/src/include/xbdbf.h
@@ -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.
@@ -168,11 +168,14 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbInt16 DumpRecord ( xbUInt32 ulRecNo, xbInt16 iOutputDest = 0, xbInt16 iOutputFmt = 0 );
virtual xbInt16 GetAutoCommit () const;
virtual xbInt16 GetAutoCommit ( xbInt16 iOption ) const;
+ virtual xbBool GetBof ();
virtual xbUInt32 GetCurRecNo () const;
virtual xbInt16 GetDbfStatus () const;
+ virtual xbBool GetEof ();
virtual xbInt32 GetFieldCnt () const;
virtual xbInt16 GetFirstRecord ();
virtual xbInt16 GetFirstRecord ( xbInt16 iOption );
+ virtual xbUInt16 GetHeaderLen () const;
virtual xbInt16 GetLastRecord ();
virtual xbInt16 GetLastRecord ( xbInt16 iOption );
@@ -360,7 +363,11 @@ class XBDLLEXPORT xbDbf : public xbFile {
//virtual xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
//#endif
-
+ #ifdef XB_BLOCKREAD_SUPPORT
+ xbInt16 DisableBlockReadProcessing();
+ xbInt16 EnableBlockReadProcessing();
+ xbBool GetBlockReadStatus() const;
+ #endif // XB_BLOCKREAD_SUPPORT
protected:
#ifdef XB_INDEX_SUPPORT
@@ -378,6 +385,10 @@ class XBDLLEXPORT xbDbf : public xbFile {
virtual xbInt16 GetInfFileName( xbString &sNdxIdxFileName );
#endif // XB_INF_SUPPORT
+ #ifdef XB_BLOCKREAD_SUPPORT
+ friend class xbBlockRead;
+ #endif // XB_BLOCKREAD_SUPPORT
+
#ifdef XB_LOCKING_SUPPORT
void SetHeaderLocked ( xbBool bTableLocked );
@@ -426,7 +437,7 @@ class XBDLLEXPORT xbDbf : public xbFile {
xbSchemaRec *SchemaPtr; // Pointer to field data
char *RecBuf; // Pointer to record buffer
- char *RecBuf2; // Pointer to original rec buf
+ char *RecBuf2; // Pointer to original rec buf allocation
/* Next several variables are database header fields, up through dbase V */
@@ -448,28 +459,32 @@ class XBDLLEXPORT xbDbf : public xbFile {
void ResetNoOfRecords();
-#ifdef XB_LOCKING_SUPPORT
+ #ifdef XB_LOCKING_SUPPORT
xbInt16 iAutoLock; // 0 - autolock off, 1 - autolock on
xbInt16 iLockFlavor;
xbBool bTableLocked; // is the table locked
xbBool bHeaderLocked; // is the header locked
xbUInt32 ulAppendLocked; // record number of the new record for the append lock operation
xbLinkListOrd lloRecLocks; // ordered link list of locked records
-#endif
-
+ #endif
-#ifdef XB_INDEX_SUPPORT
+ #ifdef XB_INDEX_SUPPORT
xbIxList *ixList; // pointer to a list of indices associated with the table
xbIx *pCurIx; // Pointer to current index class
void *vpCurIxTag; // Pointer to current tag
xbString sCurIxType; // Current index type
xbLinkList llTags; // linked list of open tags
+ #endif // XB_INDEX_SUPPORT
-#endif // XB_INDEX_SUPPORT
+ #ifdef XB_INF_SUPPORT
+ xbLinkList llInfData; // linked list of strings containing ndx file entries
+ #endif // XB_INF_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ xbBlockRead *pRb;
+ xbBool bBlockReadEnabled; // if true, then block read mode is on
+ #endif
-#ifdef XB_INF_SUPPORT
- xbLinkList llInfData; // linked list of strings containing ndx file entries
-#endif // XB_INF_SUPPORT
};
diff --git a/src/include/xbfile.h b/src/include/xbfile.h
index ffbda06..af04e98 100755
--- a/src/include/xbfile.h
+++ b/src/include/xbfile.h
@@ -60,6 +60,9 @@ class XBDLLEXPORT xbFile : public xbSsv {
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 );
@@ -158,6 +161,7 @@ class XBDLLEXPORT xbFile : public xbSsv {
#ifdef XB_DEBUG_SUPPORT
xbInt16 DumpBlockToDisk( xbUInt32 ulBlockNo, size_t lBlockSize );
+ xbInt16 DumpMemToDisk ( char *p, size_t lBlockSize );
#endif
diff --git a/src/include/xbfilter.h b/src/include/xbfilter.h
index 8722256..635d117 100755
--- a/src/include/xbfilter.h
+++ b/src/include/xbfilter.h
@@ -37,9 +37,10 @@ namespace xb{
class XBDLLEXPORT xbFilter {
public:
- xbFilter( xbXBase *xbase, xbDbf *dbf );
+ xbFilter( xbDbf *dbf );
~xbFilter();
xbInt16 Set( xbString &sFilterExpression );
+ xbInt16 Set( const char *sFilterExpression );
xbInt16 GetFirstRecord( xbInt16 iOpt = 1 );
xbInt16 GetNextRecord ( xbInt16 iOpt = 1 );
xbInt16 GetPrevRecord ( xbInt16 iOpt = 1 );
@@ -50,7 +51,6 @@ class XBDLLEXPORT xbFilter {
xbInt32 GetQryCnt() const;
#ifdef XB_INDEX_SUPPORT
-// void Set( xbIx *pIx, void *vpTag );
xbInt16 GetFirstRecordIx( xbInt16 iOpt = 1 );
xbInt16 GetNextRecordIx ( xbInt16 iOpt = 1 );
xbInt16 GetPrevRecordIx ( xbInt16 iOpt = 1 );
@@ -59,7 +59,7 @@ class XBDLLEXPORT xbFilter {
private:
- xbXBase *xbase;
+// xbXBase *xbase;
xbDbf *dbf;
xbExp *exp;
diff --git a/src/include/xbretcod.h b/src/include/xbretcod.h
index 6b73527..ec1f91b 100755
--- a/src/include/xbretcod.h
+++ b/src/include/xbretcod.h
@@ -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.
@@ -27,6 +27,7 @@ namespace xb{
#define XB_DUP_TABLE_OR_ALIAS -110 // table manager
#define XB_INVALID_NODELINK -120 // linklist
#define XB_KEY_NOT_UNIQUE -121 // linklist
+ #define XB_MEMCPY_ERROR -122 // memcpy failure
#define XB_FILE_EXISTS -200 // file
#define XB_ALREADY_OPEN -201 // file
@@ -51,6 +52,8 @@ namespace xb{
#define XB_INVALID_TABLE_NAME -220 // file
#define XB_EMPTY -221 // file
#define XB_LIMIT_REACHED -222 // file
+ #define XB_BLOCKREAD_NOT_ENABLED -223 // file
+ #define XB_DIRECTORY_ERROR -224 // file
#define XB_INVALID_FIELD_TYPE -300 // field
#define XB_INVALID_FIELD_NO -301 // field
diff --git a/src/include/xbsql.h b/src/include/xbsql.h
index 653096c..07ffb70 100755
--- a/src/include/xbsql.h
+++ b/src/include/xbsql.h
@@ -39,7 +39,83 @@ struct XBDLLEXPORT xbSqlFld{
xbSqlFld * Next; // Next field in list
};
+class xbStmt;
+
+
+struct XBDLLEXPORT xbTblJoin { // structure for defining joined tables in the query
+
+ xbString sTableName;
+ xbString sAlias;
+ xbString sJoinExp; // table join expression
+ xbDbf *pDbf; // pointer the the dbf structure for this table
+ xbTag *pTag; // pointer to relevant tag for this table, null for record order
+ xbExp *pLinkExp; // pointer to parsed linkage expression
+ char cJoinType; // M - Master
+ // L - Left or Full Left
+ // R - Right or Full Right
+ // I - Inner
+ // O - Outer or Full Outer Outer
+
+ xbTblJoin *pMaster; // pointer to master table, null if this is the primary master
+ xbLinkList llSubList; // linked list of subordinate tables
+// xbStmt *pSubQuery; // pointer to sub query
+ xbTblJoin *next; // next tbl
+};
+
+
+class XBDLLEXPORT xbStmt : public xbSsv{
+
+ public:
+ xbStmt( xbXBase *x );
+ ~xbStmt();
+
+ #ifdef XB_DEBUG_SUPPORT
+ xbInt16 DumpStmtInternals();
+ xbInt16 Test();
+ #endif
+
+ xbInt16 ExecuteQuery( const xbString &sCmdLine );
+
+// xbInt16 FetchFirst();
+// xbInt16 FetchNext();
+// xbInt16 FetchPrev();
+// xbInt16 FetchLast();
+// xbString &GetField( const xbString sFldName );
+ protected:
+
+ private:
+
+ xbInt16 AddQryTbl( const xbString &sTable, const xbString &sAlias, const xbString &sExpression, const char cJoinType );
+ xbInt16 CvtSqlExp2DbaseExp( const xbString &sExpIn, xbString &sExpOut );
+ xbInt16 GetNextFromSeg( const xbString &sLineIn, xbString &sFromSegOut );
+ xbUInt32 GetNextToken( const xbString &sCmdLineIn, xbString &sTokenOut, xbUInt32 ulStartPos );
+ xbInt16 GetParenCnt( const xbString &sToken );
+ xbInt16 ParseFromStmt( const xbString &sFromLine );
+ xbInt16 ParseStmt( const xbString &sCmdLine );
+ xbInt16 ProcessFromSeg( const xbString &sFromStmtSeg );
+ xbInt16 UpdateJoinList( char cType, const xbString &sTableName, const xbString &sAlias, const xbString &sExp, xbDbf *d, xbExp *e ); //, xbTag *t);
+
+ xbXBase *xbase; // pointer to xbase structure
+
+
+ xbTblJoin * pTblList;
+ xbSqlFld *fl; // field list in sql select statement
+ xbString sStmt; // complete query statment
+ xbString sFields; // list of fields
+ xbString sFrom; // from statment
+ xbString sWhere; // where clause
+ xbString sOrderBy; // sort order
+ xbString sGroupBy; // group by
+ xbString sHaving; // having
+ xbUInt32 ulFromPos;
+ xbUInt32 ulWherePos;
+ xbUInt32 ulOrderByPos;
+ xbUInt32 ulGroupByPos;
+ xbUInt32 ulHavingPos;
+
+
+};
class XBDLLEXPORT xbSql : public xbSsv {
@@ -68,7 +144,7 @@ class XBDLLEXPORT xbSql : public xbSsv {
// xbInt16 SqlCreateView( const xbString &sCmdLine );
// xbInt16 SqlDropView( const xbString &sCmdLine );
// xbInt16 SqlUpdate( const xbString &sCmdLine );
- xbInt16 SqlSelect( const xbString &sCmdLine );
+// xbInt16 SqlSelect( const xbString &sCmdLine );
void SqlHelp() const;
xbInt16 SqlInsert( const xbString &sCmLine );
diff --git a/src/include/xbssv.h b/src/include/xbssv.h
index b9345fd..d050bcb 100755
--- a/src/include/xbssv.h
+++ b/src/include/xbssv.h
@@ -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.
@@ -77,9 +77,11 @@ class XBDLLEXPORT xbSsv{
xbBool GetDefaultAutoCommit () const;
void SetDefaultAutoCommit ( xbBool bDefaultAutoCommit );
- xbString& GetDefaultLogDirectory () const;
- xbString& GetDefaultLogFileName () const;
- void SetDefaultLogDirectory ( const xbString &sDefaultLogDirectory );
+ void GetHomeDir ( xbString &sHomeDirOut );
+
+ xbString& GetLogDirectory () const;
+ xbString& GetLogFileName () const;
+ void SetLogDirectory ( const xbString &sLogDirectory );
xbBool GetMultiUser () const;
void SetMultiUser ( xbBool bMultiUser );
@@ -87,7 +89,7 @@ class XBDLLEXPORT xbSsv{
#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
xbInt16 GetUniqueKeyOpt () const;
xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt );
- #endif
+ #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
#ifdef XB_LOCKING_SUPPORT
xbInt16 GetDefaultLockRetries () const;
@@ -100,12 +102,18 @@ class XBDLLEXPORT xbSsv{
void SetDefaultAutoLock ( xbBool bAutoLock );
void EnableDefaultAutoLock ();
void DisableDefaultAutoLock ();
- #endif
+ #endif // XB_LOCKING_SUPPORT
#ifdef XB_MDX_SUPPORT
xbInt16 GetCreateMdxBlockSize() const;
xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize );
- #endif
+ #endif // XB_MDX_SUPPORT
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ xbUInt32 GetDefaultBlockReadSize() const;
+ void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize );
+ #endif // XB_BLOCKREAD_SUPPORT
+
protected:
@@ -121,8 +129,8 @@ class XBDLLEXPORT xbSsv{
static xbString sDataDirectory; //Data file directory
#ifdef XB_LOGGING_SUPPORT
- static xbString sDefaultLogDirectory; //Default location to store log files
- static xbString sDefaultLogFileName; //Default LogFileName
+ static xbString sLogDirectory; //Default location to store log files
+ static xbString sLogFileName; //Default LogFileName
#endif
static xbInt16 iDefaultFileVersion; // 3 = DBase 3
@@ -150,7 +158,6 @@ class XBDLLEXPORT xbSsv{
#endif
-
#if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT)
static xbInt16 iUniqueKeyOpt;
@@ -167,6 +174,10 @@ class XBDLLEXPORT xbSsv{
#endif // XB_MDX_SUPPORT
+#ifdef XB_BLOCKREAD_SUPPORT
+ static xbUInt32 ulDefaultBlockReadSize;
+#endif // XB_BLOCKREAD_SUPPORT
+
};
diff --git a/src/include/xbstring.h b/src/include/xbstring.h
index f5a22da..3e70acc 100755
--- a/src/include/xbstring.h
+++ b/src/include/xbstring.h
@@ -131,6 +131,8 @@ class XBDLLEXPORT xbString {
xbString &Mid(xbUInt32 ulPos, xbUInt32 lLen );
xbString &PadLeft( char c, xbUInt32 ulLen );
xbString &PadRight( char c, xbUInt32 ulLen );
+
+ xbUInt32 Pos(char c, xbUInt32 ulStartPos ) const;
xbUInt32 Pos(char c) const;
xbUInt32 Pos(const char *s) const;
xbString &PutAt(xbUInt32 ulPos, char c);
diff --git a/src/include/xbtblmgr.h b/src/include/xbtblmgr.h
index 150026b..2c31e45 100755
--- a/src/include/xbtblmgr.h
+++ b/src/include/xbtblmgr.h
@@ -30,8 +30,9 @@ class XBDLLEXPORT xbDbf;
/* this structure is a linked list of open tables */
struct XBDLLEXPORT xbTblList{
xbTblList *pNext;
- xbString *psTblName; /* Name of table - same table can be opened multiple times, but must have unique alias */
- xbString *psTblAlias; /* TblAliasName must be unique */
+ xbString *psFqTblName; // Fully qualified name of table - same table can be opened multiple times, but must have unique alias
+ xbString *psTblName; // Table name without path, without extension
+ xbString *psTblAlias; // TblAliasName must be unique, same as TblNAme if Alias not provided
xbDbf *pDbf;
};
@@ -39,8 +40,8 @@ class XBDLLEXPORT xbTblMgr : public xbSsv {
public:
xbTblMgr();
~xbTblMgr();
- xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sTblName );
- xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sTblName, const xbString &sTblAlias );
+ xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sFqTblName );
+ xbInt16 AddTblToTblList ( xbDbf *d, const xbString &sFqTblName, const xbString &sTblAlias );
xbInt16 DisplayTableList () const;
xbDbf * GetDbfPtr ( const xbString &sTblAlias ) const;
xbDbf * GetDbfPtr ( xbInt16 sItemNo ) const;
diff --git a/src/include/xbuda.h b/src/include/xbuda.h
index 84eccee..e5c0e91 100755
--- a/src/include/xbuda.h
+++ b/src/include/xbuda.h
@@ -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.
@@ -34,7 +34,7 @@ class XBDLLEXPORT xbUda {
public:
xbUda();
~xbUda();
-
+
xbInt16 AddTokenForKey( const xbString &sKey, const xbString &sToken );
void Clear();
xbInt16 DelTokenForKey( const xbString &sKey );
@@ -42,7 +42,7 @@ class XBDLLEXPORT xbUda {
xbInt16 GetTokenForKey( const xbString &sKey, xbString &sData );
xbInt16 UpdTokenForKey( const xbString &sKey, const xbString &sToken );
void DumpUda() const;
-
+
private:
xbLinkListOrd llOrd;
diff --git a/src/include/xbxbase.h b/src/include/xbxbase.h
index 204e744..fe1f323 100755
--- a/src/include/xbxbase.h
+++ b/src/include/xbxbase.h
@@ -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.
@@ -148,6 +148,9 @@ class XBDLLEXPORT xbXBase : public xbTblMgr{
void xbSleep ( xbInt32 lMillisecs );
+ xbInt16 GetCmdLineOpt ( xbInt32 lArgc, char **argv, const char *sOptRqst, xbString &sParmOut );
+ xbInt16 GetCmdLineOpt ( xbInt32 lArgc, char **argv, xbString &sOptRqst, xbString &sParmOut );
+
/* xbase functions */
#ifdef XB_FUNCTION_SUPPORT
@@ -207,6 +210,11 @@ class XBDLLEXPORT xbXBase : public xbTblMgr{
friend class xbBcd;
friend class xbExp;
+ #ifdef XB_BLOCKREAD_SUPPORT
+ friend class xbBlockRead;
+ #endif // XB_BLOCKREAD_SUPPORT
+
+
xbInt16 GetFunctionInfo( const xbString &sExpLine, char &cReturnType, xbInt16 &iReturnLenCalc, xbInt32 &lReturnLenVal ) const;
static xbInt16 xbMemcmp( const unsigned char *s1, const unsigned char *s2, size_t n );
diff --git a/src/sql/xbalttbl.cpp b/src/sql/xbalttbl.cpp
index 576eab7..8a36b46 100755
--- a/src/sql/xbalttbl.cpp
+++ b/src/sql/xbalttbl.cpp
@@ -79,17 +79,12 @@ xbInt16 xbSql::SqlAlterTable( const xbString &sCmdLine ){
sTrgTbl.ExtractElement( sCmd, ' ', 4, 0 );
sTrgTbl.Trim();
- std::cout << "source table name = " << sSrcTbl.Str() << "\n";
+// std::cout << "source table name = " << sSrcTbl.Str() << "\n";
// std::cout << "target table name = " << sTrgTbl.Str() << "\n";
// if not open, attempt to open it
dbf = xbase->GetDbfPtr( sSrcTbl );
- if( dbf )
- std::cout << "dbf valued\n";
- else
- std::cout << "dbf not valued\n";
-
if( !dbf ){
if(( iRc = xbase->OpenHighestVersion( sSrcTbl, "", &dbf )) != XB_NO_ERROR ){
iErrorStop = 120;
diff --git a/src/sql/xbcrix.cpp b/src/sql/xbcrix.cpp
index 8dc6f62..6a391f7 100755
--- a/src/sql/xbcrix.cpp
+++ b/src/sql/xbcrix.cpp
@@ -147,13 +147,13 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
}
}
if( dbf == NULL ){
- iErrorStop = 50;
+ iErrorStop = 130;
iRc = XB_FILE_NOT_FOUND;
throw iRc;
}
sCmd.Ltrunc( ulPos );
- std::cout << "cp1 ulPos = " << ulPos << " sCmd = [" << sCmd << "]\n";
+ // std::cout << "cp1 ulPos = " << ulPos << " sCmd = [" << sCmd << "]\n";
//ulPos = sCmd.GetLastPos( ')' );
xbString sKeyExpression;
@@ -180,7 +180,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
lPos++;
}
- std::cout << "Key Expression =[" << sKeyExpression << "]\n";
+ // std::cout << "Key Expression =[" << sKeyExpression << "]\n";
sCmd.Ltrunc( lPos );
sCmd.Trim();
@@ -216,7 +216,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
#ifdef XB_LOCKING_SUPPORT
if(( iRc = dbf->LockTable( XB_LOCK )) != XB_NO_ERROR ){
- iErrorStop = 130;
+ iErrorStop = 140;
throw iRc;
}
#endif // XB_LOCKING_SUPPORT
@@ -227,7 +227,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
void *vpTag;
if(( iRc = dbf->CreateTag( sIxType, sIxName, sKeyExpression, sFilter, bDesc, bUnique, xbFalse, &pIx, &vpTag )) != XB_NO_ERROR ){
- iErrorStop = 140;
+ iErrorStop = 150;
throw iRc;
}
// std::cout << "SqlCreateIndex() - back from tag create\n";
@@ -239,7 +239,7 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
sCmd.ToUpperCase();
if( sCmd.Pos( "ASSOCIATE" )){
if(( iRc = dbf->AssociateIndex( "NDX", sIxName, 0 )) != XB_NO_ERROR ){
- iErrorStop = 150;
+ iErrorStop = 160;
throw iRc;
}
}
@@ -255,14 +255,14 @@ xbInt16 xbSql::SqlCreateIndex( const xbString &sCmdLine ){
if(( iRc = pIx->Reindex( &vpTag )) != XB_NO_ERROR ){
- iErrorStop = 160;
+ iErrorStop = 170;
throw iRc;
}
#ifdef XB_LOCKING_SUPPORT
if(( iRc = dbf->LockTable( XB_UNLOCK )) != XB_NO_ERROR ){
- iErrorStop = 140;
+ iErrorStop = 180;
throw iRc;
}
#endif // XB_LOCKING_SUPPORT
diff --git a/src/sql/xbcrtbl.cpp b/src/sql/xbcrtbl.cpp
index 7f6b8fa..dfb3403 100755
--- a/src/sql/xbcrtbl.cpp
+++ b/src/sql/xbcrtbl.cpp
@@ -29,7 +29,7 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
// expected format:
// CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... )
- // supported fields types
+ // supported field types
//
// SQL TYPE XBASE Field Type
// -------- ----------------
@@ -61,6 +61,7 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
xbLinkList ll;
xbSchema *schema = NULL;
xbString sMsg;
+ xbString sWork;
try{
// retrieve table name
@@ -75,7 +76,7 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
xbFile f( xbase );
f.SetFileName( sTableName );
if( f.FileExists() ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_FILE_EXISTS;
throw iRc;
}
@@ -90,8 +91,6 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
s.Remove( s.Len(), 1 );
s.Trim();
- //std::cout << "s = [" << s << "]\n";
-
xbBool bDone = xbFalse;
xbInt16 iLoop = 0;
@@ -129,7 +128,7 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
else if( sDataType == "SMALLINT" || sDataType == "INTEGER" || sDataType == "DATE" || sDataType == "VARCHAR" || sDataType == "LOGICAL" )
iAttribCnt = 0;
else{
- iErrorStop = 20;
+ iErrorStop = 110;
iRc = XB_INVALID_FIELD_TYPE;
throw iRc;
}
@@ -143,25 +142,37 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
} else if( iAttribCnt > 0 ){
lPos = s.Pos( '(' );
if( lPos <= 0 ){
- iErrorStop = 30;
+ iErrorStop = 120;
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 );
+ lPos = s.Pos( ')' );
+ if( lPos <= 0 ){
+ iErrorStop = 130;
+ iRc = XB_INVALID_FIELD_LEN;
+ throw iRc;
}
+ sWork.Assign( s, 1, lPos - 1);
+ sWork.Trim();
+
+ if( iAttribCnt == 1 ){
+ sAttrib1 = sWork;
+ } else {
+ lCmPos = sWork.Pos( ',' );
+ if( lCmPos <= 0 ){
+ iErrorStop = 140;
+ iRc = XB_INVALID_FIELD_LEN;
+ throw iRc;
+ }
+ sAttrib1.Assign( sWork, 1, lCmPos - 1);
+ sAttrib1.Trim();
+ sWork.Ltrunc( lCmPos );
+ sAttrib2 = sWork;
+ sAttrib2.Trim();
+ }
+ s.Ltrunc( lPos );
}
s.Ltrim();
@@ -229,7 +240,7 @@ xbInt16 xbSql::SqlCreateTable( const xbString &sCmdLine ){
dbf = new xbDbf3( xbase );
#endif
if(( iRc = dbf->CreateTable( sTableName, "", schema, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 150;
throw iRc;
}
diff --git a/src/sql/xbcrtbl.save.cpp b/src/sql/xbcrtbl.save.cpp
new file mode 100755
index 0000000..445ad56
--- /dev/null
+++ b/src/sql/xbcrtbl.save.cpp
@@ -0,0 +1,256 @@
+/* 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 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 * 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 157b281..82b4937 100755
--- a/src/sql/xbdelete.cpp
+++ b/src/sql/xbdelete.cpp
@@ -95,7 +95,7 @@ xbInt16 xbSql::SqlDelete( const xbString &sCmdLine ){
}
} else {
- xbFilter f( dbf->GetXbasePtr(), dbf );
+ xbFilter f( dbf );
if(( iRc = f.Set( sFilter )) != XB_NO_ERROR ){
iErrorStop = 150;
throw iRc;
diff --git a/src/sql/xbdrptbl.cpp b/src/sql/xbdrptbl.cpp
index e2cfa9d..b03ee8f 100755
--- a/src/sql/xbdrptbl.cpp
+++ b/src/sql/xbdrptbl.cpp
@@ -61,7 +61,7 @@ xbInt16 xbSql::SqlDropTable( const xbString &sCmdLine ){
sNode.Trim();
sNode.ToUpperCase();
if( sNode != "EXISTS" ){
- iErrorStop = 10;
+ iErrorStop = 100;
iRc = XB_SYNTAX_ERROR;
throw iRc;
} else {
@@ -91,22 +91,21 @@ xbInt16 xbSql::SqlDropTable( const xbString &sCmdLine ){
if( iRc == XB_FILE_NOT_FOUND && bIfExists ){
return XB_NO_ERROR;
} else {
- iErrorStop = 20;
+ iErrorStop = 110;
throw iRc;
}
}
}
if( dbf == NULL ){
- iErrorStop = 40;
+ iErrorStop = 120;
iRc = XB_OPEN_ERROR;
throw iRc;
}
if(( dbf->DeleteTable()) != XB_NO_ERROR ){
- iErrorStop = 50;
+ iErrorStop = 130;
throw iRc;
}
-
}
catch (xbInt16 iRc ){
diff --git a/src/sql/xbselect.cpp b/src/sql/xbselect.cpp
index 91c0485..7f12e99 100755
--- a/src/sql/xbselect.cpp
+++ b/src/sql/xbselect.cpp
@@ -21,18 +21,23 @@ namespace xb{
/***********************************************************************/
-xbInt16 xbSql::SqlSelect( const xbString &sCmdLine ){
+xbInt16 xbStmt::ExecuteQuery( const xbString &sCmdLine ){
- std::cout << "SELECT [" << sCmdLine << "]\n";
+ std::cout << "xbStmt::ExecuteQuery() - SELECT [" << sCmdLine << "]\n";
// expected format:
// SELECT
xbInt16 iRc = 0;
xbInt16 iErrorStop = 0;
- xbUInt32 ulPos;
+ // xbUInt32 ulPos;
try{
+ if(( iRc = ParseStmt( sCmdLine )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+
/*
xbString sCmd = sCmdLine;
sCmd.Trim();
@@ -63,12 +68,12 @@ xbInt16 xbSql::SqlSelect( const xbString &sCmdLine ){
if( sToken == '^' ){
if(( iRc = uda.DelTokenForKey( sKey )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
} else {
if(( iRc = uda.UpdTokenForKey( sKey, sToken )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 110;
throw iRc;
}
}
@@ -78,7 +83,7 @@ xbInt16 xbSql::SqlSelect( const xbString &sCmdLine ){
}
catch (xbInt16 iRc ){
xbString sMsg;
- sMsg.Sprintf( "xbSql::SqlSelect() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ sMsg.Sprintf( "xbStmt::ExecuteQuery() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
xbase->WriteLogMessage( sMsg.Str() );
xbase->WriteLogMessage( GetErrorMessage( iRc ));
}
diff --git a/src/sql/xbset.cpp b/src/sql/xbset.cpp
index 98de309..d0e8821 100755
--- a/src/sql/xbset.cpp
+++ b/src/sql/xbset.cpp
@@ -63,17 +63,16 @@ xbInt16 xbSql::SqlSet( const xbString &sCmdLine ){
if( sToken == '^' ){
if(( iRc = uda.DelTokenForKey( sKey )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 100;
throw iRc;
}
} else {
if(( iRc = uda.UpdTokenForKey( sKey, sToken )) != XB_NO_ERROR ){
- iErrorStop = 10;
+ iErrorStop = 110;
throw iRc;
}
}
}
-
}
catch (xbInt16 iRc ){
xbString sMsg;
diff --git a/src/sql/xbsql.cpp b/src/sql/xbsql.cpp
index 5261b1a..12d3379 100755
--- a/src/sql/xbsql.cpp
+++ b/src/sql/xbsql.cpp
@@ -123,9 +123,6 @@ xbInt16 xbSql::ExecuteNonQuery( const xbString &sCmdLine ) {
else if( sNode1 == "USE" )
iRc = SqlUse( sCmd );
- else if( sNode1 == "SELECT" )
- iRc = SqlSelect( sCmd );
-
else if( sNode1 == "SET" )
iRc = SqlSet( sCmd );
diff --git a/src/sql/xbstmt.cpp b/src/sql/xbstmt.cpp
new file mode 100755
index 0000000..61c84fd
--- /dev/null
+++ b/src/sql/xbstmt.cpp
@@ -0,0 +1,679 @@
+/* xbsql.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+#include "xbase.h"
+
+#ifdef XB_SQL_SUPPORT
+
+namespace xb{
+
+/***********************************************************************/
+xbStmt::xbStmt( xbXBase *x ){
+ xbase = x;
+ pTblList = NULL;
+ fl = NULL;
+ ulFromPos = 0;
+ ulWherePos = 0;
+ ulOrderByPos = 0;
+ ulGroupByPos = 0;
+ ulHavingPos = 0;
+}
+
+/***********************************************************************/
+xbStmt::~xbStmt(){
+
+ std::cout << "xbStmt::~xbStmt() - need to release all allocated structures and memory here\n";
+
+}
+
+/***********************************************************************/
+xbInt16 xbStmt::CvtSqlExp2DbaseExp( const xbString &sExpIn, xbString &sExpOut ){
+
+ // convert Ansi SQL expression to a DBase compatible expression
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+
+ try{
+
+ // convert tablename.fieldname to tablename->fieldname
+ sExpOut = sExpIn[1];
+ xbUInt32 ulPos = 2;
+ while( ulPos < sExpIn.Len() ){
+ if( sExpIn[ulPos] == '.' && sExpIn[ulPos-1] != ' ' && sExpIn[ulPos+1] != ' ' )
+ sExpOut += "->";
+ else
+ sExpOut += sExpIn[ulPos];
+ ulPos++;
+ }
+ sExpOut += sExpIn[ulPos];
+
+ sExpOut.Replace( " AND ", " .AND. ", 0 );
+ sExpOut.Replace( " and ", " .AND. ", 0 );
+ sExpOut.Replace( " OR ", " .OR. ", 0 );
+ sExpOut.Replace( " or ", " .OR. ", 0 );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::CvtSqlExp2DbaseExp() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+
+/***********************************************************************/
+#ifdef XB_DEBUG_SUPPORT
+xbInt16 xbStmt::DumpStmtInternals(){
+
+ std::cout << "************** Dump Statment Internals ***************" << std::endl;
+ std::cout << "Statement [" << sStmt << "]\n";
+ std::cout << "Fields [" << sFields << "]\n";
+ std::cout << "From [" << sFrom << "]\n";
+ std::cout << "Where [" << sWhere << "]\n";
+ std::cout << "Order By [" << sOrderBy << "]\n";
+ std::cout << "Group By [" << sGroupBy << "]\n";
+ std::cout << "Having [" << sHaving << "]\n";
+
+ xbTblJoin *p = pTblList;
+ if( p ){
+ std::cout << "Tbl List\n";
+ std::cout << "Type,Name,Alias,Exp\n";
+ while( p ){
+ std::cout << p->cJoinType << "," << p->sTableName.Str() << "," << p->sAlias.Str() << "," << p->sJoinExp.Str() << "\n";
+ p = p->next;
+ }
+ }
+ std::cout << "*************** End of Internals ************" << std::endl;
+ return 0;
+}
+
+xbInt16 xbStmt::Test(){
+ xbString s;
+
+ s = "(ABC)";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "(ABC) )";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "(";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "( (";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "aaa)";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+ s = "aaa";
+ std::cout << "[" << s.Str() << "][" << GetParenCnt( s ) << "]\n";
+
+ return 0;
+
+}
+#endif // XB_DEBUG_SUPPORT
+
+
+/***********************************************************************/
+xbInt16 xbStmt::GetNextFromSeg( const xbString &sLineIn, xbString &sFromSegOut ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iParenCtr = 0;
+ xbUInt32 ulPos = 1;
+ xbUInt32 ulTsp = 0; // token start position
+ xbBool bDone = xbFalse;
+ xbString sToken;
+
+ try{
+ sFromSegOut = "";
+ while( !bDone ){
+ ulTsp = GetNextToken( sLineIn, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+
+ } else {
+ iParenCtr += GetParenCnt( sToken );
+ if( iParenCtr == 0 && ulPos > 1 ){
+ sToken.ToUpperCase();
+ if( sToken == "LEFT" || sToken == "RIGHT" || sToken == "FULL" ||
+ sToken == "INNER" || sToken == "OUTER" || sToken[1] == '(' ){
+ bDone = xbTrue;
+ }
+ }
+ }
+ ulPos += (sToken.Len() + 1);
+ }
+ if( ulTsp > 1 )
+ sFromSegOut.Assign( sLineIn, 1, ulTsp - 2 );
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::GetNextFromSeg() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+
+xbUInt32 xbStmt::GetNextToken( const xbString &sCmdLineIn, xbString &sTokenOut, xbUInt32 ulStartPos ){
+
+ // input
+ // sCmdLine - Entire Command line
+ // ulStartPos - Where to start searching for the next token
+ // returns the position of the beginning of the token in the main command line
+
+ xbUInt32 ul = ulStartPos;
+ xbUInt32 ulTokenStartPos = 0;
+ sTokenOut = "";
+
+ while( ul <= sCmdLineIn.Len() && sCmdLineIn[ul] == ' ' )
+ ul++;
+ ulTokenStartPos = ul;
+
+ while( ul <= sCmdLineIn.Len() && sCmdLineIn[ul] != ' ' ){
+ sTokenOut += sCmdLineIn[ul];
+ ul++;
+ }
+
+ return ulTokenStartPos;
+}
+/***********************************************************************/
+xbInt16 xbStmt::GetParenCnt( const xbString &sToken ){
+
+ xbInt16 iParenCnt = 0;
+
+ for( xbUInt32 i = 1; i <= sToken.Len(); i++ ){
+ if( sToken[i] == '(' )
+ iParenCnt++;
+ else if( sToken[i] == ')' )
+ iParenCnt--;
+ }
+ return iParenCnt;
+}
+
+
+/***********************************************************************/
+xbInt16 xbStmt::ParseFromStmt( const xbString &sFromLine ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbBool bDone = xbFalse;
+ xbString sFromSeg;
+ xbString sLine = sFromLine;
+
+ try{
+ std::cout << "ParseFromSeg [" << sFromLine.Str() << "]\n";
+
+ while( !bDone ){
+ if(( iRc = GetNextFromSeg( sLine, sFromSeg)) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ if( sFromSeg.Len() == 0 ){
+ bDone = xbTrue;
+ } else {
+ if(( iRc = ProcessFromSeg( sFromSeg )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+ sLine.Ltrunc( sFromSeg.Len() );
+ sLine.Ltrim();
+ }
+ }
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::ParseFromSeg() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+/***********************************************************************/
+xbInt16 xbStmt::ParseStmt( const xbString &sCmdLine ){
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ xbInt16 iParenCnt = 0;
+ xbUInt32 ulStartPos = 7;
+ xbUInt32 ulLen = 0;
+
+
+ xbBool bFromFound = xbFalse;
+ xbBool bWhereFound = xbFalse;
+ xbBool bOrderByFound = xbFalse;
+ xbBool bGroupByFound = xbFalse;
+ xbBool bHavingFound = xbFalse;
+ xbBool bDone = xbFalse;
+
+ xbString sToken;
+
+ sStmt.Set( sCmdLine );
+ sStmt.Trim();
+
+ try{
+
+ std::cout << "ParseStmt - [" << sStmt << "]\n";
+
+ xbUInt32 ulPos = ulStartPos;
+
+ while( !bFromFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "FROM" ){
+ bFromFound = xbTrue;
+ ulFromPos = ulPos;
+ sFrom.Assign( sStmt, ulFromPos );
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+ // look for the where clause
+ if( bFromFound )
+ ulPos = ulFromPos + 5;
+ else
+ ulPos = ulStartPos;
+
+ bDone = xbFalse;
+ while( !bWhereFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "WHERE" ){
+ bWhereFound = xbTrue;
+ ulWherePos = ulPos;
+ sWhere.Assign( sStmt, ulWherePos+6 );
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+
+ // look for the order clause
+ if( bWhereFound )
+ ulPos = ulWherePos + 6;
+ else if( bFromFound )
+ ulPos = ulFromPos + 5;
+ else
+ ulPos = ulStartPos;
+
+ bDone = xbFalse;
+ while( !bOrderByFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "ORDER" ){
+ xbString sToken2;
+ xbUInt32 ulPos2 = GetNextToken( sStmt, sToken2, ulPos + 6 );
+ if( sToken2 != "" ){
+ sToken2.ToUpperCase();
+ if( sToken2 == "BY" ){
+ bOrderByFound = xbTrue;
+ ulOrderByPos = ulPos;
+ sOrderBy.Assign( sStmt, ulPos2 + 3 );
+ }
+ }
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+
+ bDone = xbFalse;
+ while( !bGroupByFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "GROUP" ){
+ xbString sToken2;
+ xbUInt32 ulPos2 = GetNextToken( sStmt, sToken2, ulPos + 6 );
+ if( sToken2 != "" ){
+ sToken2.ToUpperCase();
+ if( sToken2 == "BY" ){
+ bGroupByFound = xbTrue;
+ ulGroupByPos = ulPos;
+ sGroupBy.Assign( sStmt, ulPos2 + 3 );
+ }
+ }
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+ bDone = xbFalse;
+ while( !bHavingFound && !bDone ){
+ ulPos = GetNextToken( sStmt, sToken, ulPos );
+ if( sToken == "" ){
+ bDone = xbTrue;
+ } else {
+ iParenCnt += GetParenCnt( sToken );
+ if( iParenCnt == 0 ){
+ sToken.ToUpperCase();
+ if( sToken == "HAVING" ){
+ bHavingFound = xbTrue;
+ ulHavingPos = ulPos;
+ sHaving.Assign( sStmt, ulHavingPos + 7 );
+ }
+ }
+ ulPos += sToken.Len() + 1;
+ }
+ }
+
+
+ // do the fields part
+ if( bFromFound )
+ ulLen = ulFromPos - 7;
+ else if( bWhereFound )
+ ulLen = ulWherePos - 7;
+ else if( bOrderByFound )
+ ulLen = ulOrderByPos - 7;
+ else if( bGroupByFound )
+ ulLen = ulGroupByPos - 7;
+ else if( bHavingFound )
+ ulLen = ulHavingPos - 7;
+ else
+ ulLen = sStmt.Len() - 7;
+ sFields.Assign( sStmt, 7, ulLen );
+ sFields.Trim();
+
+ // do the FROM part
+ if( bFromFound ){
+ if( bWhereFound )
+ ulLen = ulWherePos - ulFromPos;
+ else if( bOrderByFound )
+ ulLen = ulOrderByPos - ulFromPos;
+ else if( bGroupByFound )
+ ulLen = ulGroupByPos - ulFromPos;
+ else if( bHavingFound )
+ ulLen = ulHavingPos - ulFromPos;
+ else
+ ulLen = sStmt.Len() - ulFromPos;
+ sFrom.Resize( ulLen );
+ sFrom.Trim();
+
+ }
+
+
+ // do the WHERE part
+ if( bWhereFound ){
+ ulLen = 0;
+ if( bOrderByFound )
+ ulLen = ulOrderByPos - ulWherePos - 6;
+ else if( bGroupByFound )
+ ulLen = ulGroupByPos - ulWherePos - 6;
+ else if( bHavingFound )
+ ulLen = ulHavingPos - ulWherePos - 6;
+
+ if( ulLen > 0 )
+ sWhere.Resize( ulLen );
+ sWhere.Trim();
+ }
+
+ // FIXME if there is more than one space between ORDER and BY then this doesn't work quite right
+ // do the ORDER BY part
+ if( bOrderByFound ){
+ if( bGroupByFound )
+ ulLen = ulGroupByPos - ulOrderByPos - 9;
+ else if( bHavingFound )
+ ulLen = ulHavingPos - ulOrderByPos - 9;
+ else
+ ulLen = sStmt.Len() - ulOrderByPos - 9;
+ sOrderBy.Resize( ulLen );
+ sOrderBy.Trim();
+ }
+
+ // FIXME if there is more than one space between ORDER and BY then this doesn't work quite right
+ // do the GROUP BY part
+ if( bGroupByFound ){
+ if( bHavingFound )
+ ulLen = ulHavingPos - ulGroupByPos - 9;
+ else
+ ulLen = sStmt.Len() - ulGroupByPos - 9;
+ sGroupBy.Resize( ulLen );
+ sGroupBy.Trim();
+ }
+
+ if( bFromFound ){
+ if(( iRc = ParseFromStmt( sFrom )) != XB_NO_ERROR ){
+ iErrorStop = 100;
+ throw iRc;
+ }
+ }
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::ParseStmt() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+
+ return iRc;
+}
+
+/***********************************************************************/
+xbInt16 xbStmt::ProcessFromSeg( const xbString &sFromSeg ){
+
+
+ xbInt16 iRc = 0;
+ xbInt16 iErrorStop = 0;
+ char cType = ' ';
+ xbString sToken;
+ xbString sTable;
+ xbString sAlias;
+ xbString sWork;
+ xbString sExp;
+ xbUInt32 iPos;
+ xbBool bDone;
+ xbExp * pJoinExp = NULL;
+
+ try{
+
+ std::cout << "ProcessFromSeg for segment [" << sFromSeg.Str() << "]\n";
+
+ GetNextToken( sFromSeg, sToken, 1 );
+ sToken.ToUpperCase();
+
+ std::cout << "sToken1 = [" << sToken.Str() << "]\n";
+
+ if( sToken == "FROM" ){
+ // FROM has to be the first statement, and exist only once
+ if( pTblList ){
+ iErrorStop = 100;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ cType = 'M';
+ } else if( sToken == "LEFT" )
+ cType = 'L';
+ else if( sToken == "RIGHT" )
+ cType = 'R';
+ else if( sToken == "RIGHT" )
+ cType = 'R';
+ else if( sToken == "INNER" )
+ cType = 'I';
+ else if( sToken == "OUTER" || sToken == "FULL" )
+ cType = 'O';
+ else if( sToken[1] == '(' )
+ cType = 'Q';
+ else{
+ iErrorStop = 100;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+
+
+ if( cType == 'M' ){
+ // expecting "FROM table" or "FROM table alias"
+ iPos = GetNextToken( sFromSeg, sToken, 5 );
+ sTable = sToken;
+
+ iPos = GetNextToken( sFromSeg, sToken, iPos + sToken.Len() + 1 );
+ if( sToken.Len() > 0 )
+ sAlias = sToken;
+ else
+ sAlias = "";
+
+ sWork = sToken;
+ sWork.ToUpperCase();
+ iPos = sWork.Pos( ".DBF" );
+ if( iPos == 0 )
+ sTable += ".DBF";
+
+ // std::cout << "table = [" << sTable.Str() << "] alias = [" << sAlias.Str() << "]\n";
+
+ } else if( cType != 'Q' ){
+ sWork = sFromSeg;
+ sWork.ToUpperCase();
+ iPos = sWork.Pos( " ON " );
+ if( iPos == 0 ){
+ iErrorStop = 110;
+ iRc = XB_PARSE_ERROR;
+ throw iRc;
+ }
+ bDone = xbFalse;
+
+ sWork.Assign( sFromSeg, iPos + 4 );
+ CvtSqlExp2DbaseExp( sWork, sExp );
+ sExp.Trim();
+ std::cout << "ON = [" << sExp.Str() << "]\n";
+
+
+ // need to get past the keywords LEFT, FULL, OUTER, RIGHT, INNER and get the table name here
+ iPos = sToken.Len() + 1;
+ while( !bDone ){
+ iPos = GetNextToken( sFromSeg, sToken, iPos );
+ sWork = sToken;
+ sWork.ToUpperCase();
+ if( sWork != "LEFT" && sWork != "RIGHT" && sWork != "INNER" && sWork != "OUTER" && sWork != "FULL" && sWork != "JOIN" )
+ bDone = xbTrue;
+ else
+ iPos += (sWork.Len() + 1);
+ }
+
+ sTable = sToken;
+ GetNextToken( sFromSeg, sAlias, iPos + sTable.Len() + 1 );
+ sWork.ToUpperCase();
+ iPos = sWork.Pos( ".DBF" );
+ if( iPos == 0 )
+ sTable += ".DBF";
+ sWork = sAlias;
+ sWork.ToUpperCase();
+ if( sWork == "ON" )
+ sAlias = "";
+ }
+
+
+ // open table
+ //std::cout << "attempting to open table " << sTable.Str() << "\n";
+ xbDbf *d = NULL;
+ if(( iRc = xbase->OpenHighestVersion( sTable, sAlias, &d )) != XB_NO_ERROR ){
+ iErrorStop = 120;
+ throw iRc;
+ }
+
+
+
+ // build out table linkage expression
+ if( cType == 'M' )
+ sExp = "MASTER";
+ else if( cType == 'L' ){
+ pJoinExp = new xbExp( xbase );
+
+ // std::cout << "Parsing expression [" << sExp.Str() << "]\n";
+ if(( iRc = pJoinExp->ParseExpression( d, sExp )) != XB_NO_ERROR ){
+ iErrorStop = 130;
+ throw iRc;
+ }
+ }
+
+
+ // attach to correct location in list
+
+
+ // update the UpdateJoinList routine as appropriate
+// if(( iRc = UpdateJoinList( cType, sTable, sAlias, NULL, NULL, NULL, NULL )) != XB_NO_ERROR ){
+
+ if(( iRc = UpdateJoinList( cType, sTable, sAlias, sExp, d, pJoinExp )) != XB_NO_ERROR ){
+ iErrorStop = 110;
+ throw iRc;
+ }
+
+
+ }
+ catch (xbInt16 iRc ){
+ xbString sMsg;
+ sMsg.Sprintf( "xbStmt::ProcessFromSeg() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, iRc );
+ xbase->WriteLogMessage( sMsg.Str() );
+ xbase->WriteLogMessage( GetErrorMessage( iRc ));
+ }
+ return iRc;
+}
+
+/***********************************************************************/
+xbInt16 xbStmt::UpdateJoinList( char cType, const xbString &sTableName, const xbString &sAlias, const xbString &sExp, xbDbf *d, xbExp *e ){
+// xbTag *t ){
+
+
+ std::cout << "Update join list for table " << sTableName.Str() << "\n";
+
+ xbTblJoin *pTj;
+ if(( pTj = (xbTblJoin *) calloc( 1, sizeof( xbTblJoin ))) == NULL )
+ return XB_NO_MEMORY;
+
+ pTj->cJoinType = cType;
+ pTj->sTableName.Set( sTableName );
+ pTj->sAlias.Set( sAlias );
+ pTj->sJoinExp.Set( sExp );
+ pTj->pDbf = d;
+ pTj->pLinkExp = e;
+
+/*
+
+ pTj->pTag = t;
+*/
+
+ if( cType == 'M' )
+ pTblList = pTj;
+
+ return 0;
+}
+/***********************************************************************/
+} /* namespace */
+#endif /* XB_SQL_SUPPORT */
+
diff --git a/src/tests/xb_test_bcd.cpp b/src/tests/xb_test_bcd.cpp
index 1eab20f..f735935 100755
--- a/src/tests/xb_test_bcd.cpp
+++ b/src/tests/xb_test_bcd.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.
@@ -45,6 +45,7 @@ int main( int argCnt, char **av )
xbXBase x;
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( iPo ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -55,8 +56,6 @@ int main( int argCnt, char **av )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
-
if( iPo > 0 ){
std::cout << "XBase bcd testing program.." << std::endl;
diff --git a/src/tests/xb_test_blockread.cpp b/src/tests/xb_test_blockread.cpp
new file mode 100755
index 0000000..ff55d23
--- /dev/null
+++ b/src/tests/xb_test_blockread.cpp
@@ -0,0 +1,168 @@
+/* xb_test_blockread.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel
+
+The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ XDB-devel@lists.sourceforge.net
+ XDB-users@lists.sourceforge.net
+
+*/
+
+// This program tests the class xbBlockRead
+// usage: xb_test_blockread QUITE|NORMAL|VERBOSE
+
+
+#include "xbase.h"
+
+using namespace xb;
+
+#include "tstfuncs.cpp"
+
+ xbSchema MyDbfRec[] =
+ {
+ { "NFLD", XB_NUMERIC_FLD, 10, 0 },
+ { "CFLD", XB_CHAR_FLD, 89, 0 },
+ { "",0,0,0 }
+ };
+
+
+int main( int argCnt, char **av )
+{
+ xbInt16 iRc = 0;
+ xbInt16 iRc2 = 0;
+ int iPo = 1; /* print option */
+ /* 0 - QUIET */
+ /* 1 - NORMAL */
+ /* 2 - VERBOSE */
+
+ if( argCnt > 1 ) {
+ if( av[1][0] == 'Q' )
+ iPo = 0;
+ else if( av[1][0] == 'V' )
+ iPo = 2;
+ }
+
+ xbXBase x;
+ x.SetDataDirectory( PROJECT_DATA_DIR );
+
+ xbDbf4 dbf( &x );
+
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+ x.EnableMsgLogging();
+ if( iPo ){
+ std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
+ }
+ xbString sMsg;
+ sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+
+ InitTime();
+
+
+ iRc2 = dbf.CreateTable( "BLOCKRD.DBF", "BlockRead", MyDbfRec, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+ // fill the file with several blocks of data
+ for( xbInt32 i = 0; i < 50; i++ ){
+ iRc2 = dbf.BlankRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "BlankRecord()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = dbf.PutLongField( 0, i+1 );
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "PutLongField()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = dbf.AppendRecord();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "AppendRecord()", (xbInt32) iRc2, XB_NO_ERROR );
+
+ iRc2 = dbf.Commit();
+ if( iRc2 != XB_NO_ERROR )
+ iRc += TestMethod( iPo, "Commit()", (xbInt32) iRc2, XB_NO_ERROR );
+ }
+
+
+ dbf.SetDefaultBlockReadSize( 2000 );
+
+ // enable block read for this table
+ iRc += TestMethod( iPo, "EnableBlockReadProcessing()", dbf.EnableBlockReadProcessing(), XB_NO_ERROR );
+
+ xbUInt32 ulFld = 0;
+ xbUInt32 ulCtr = 1;
+
+ iRc2 = XB_NO_ERROR;
+ while( iRc2 == XB_NO_ERROR ){
+ // std::cout << ulCtr << "\n";
+ iRc2 += dbf.GetRecord( ulCtr );
+ if( iRc2 != XB_NO_ERROR && iRc != XB_INVALID_RECORD )
+ TestMethod( iPo, "GetRecord()", iRc, XB_NO_ERROR );
+
+ if( iRc2 == XB_NO_ERROR ){
+ dbf.GetULongField( "NFLD", ulFld );
+ if( ulFld != ulCtr ){
+ std::cout << "ulFld = " << ulFld << " ulCtr = " << ulCtr << "\n";
+ iRc += TestMethod( iPo, "Field Compare", (xbDouble) ulFld, (xbDouble) ulCtr );
+ }
+ }
+ ulCtr++;
+ }
+
+ // std::cout << "**********Delete every other record\n";
+ iRc2 = dbf.GetFirstRecord();
+ while( iRc2 == XB_NO_ERROR ){
+ if( (dbf.GetCurRecNo() % 2) != 0 ){
+ dbf.DeleteRecord();
+ dbf.Commit();
+ }
+ iRc2 = dbf.GetNextRecord();
+ }
+
+
+ // test filter for deleted records
+ #ifdef XB_FILTER_SUPPORT
+ xbFilter f( &dbf );
+ xbString sFilt = ".NOT. DELETED()";
+ f.Set( sFilt );
+ iRc2 = f.GetFirstRecord();
+ while( iRc2 == XB_NO_ERROR ){
+ dbf.GetULongField( "NFLD", ulFld );
+ if( (ulFld % 2) != 0 ){
+ iRc += TestMethod( iPo, "Filter GetNextRecord()", ulFld % 2, 0 );
+ }
+ iRc2 = f.GetNextRecord();
+ }
+ #endif // XB_FILTER_SUPPORT
+
+
+ iRc += TestMethod( iPo, "DisableBlockReadProcessing()", dbf.DisableBlockReadProcessing(), XB_NO_ERROR );
+ //iRc2 = dbf.DeleteTable();
+
+ iRc2 = dbf.Close();
+ iRc += TestMethod( iPo, "Close()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+ #ifdef XB_LOGGING_SUPPORT
+ sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
+ x.WriteLogMessage( sMsg );
+ #endif
+
+
+ if( iPo > 0 || iRc < 0 )
+ fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
+
+ return iRc;
+}
+
diff --git a/src/tests/xb_test_date.cpp b/src/tests/xb_test_date.cpp
index 1d9b523..7aee584 100755
--- a/src/tests/xb_test_date.cpp
+++ b/src/tests/xb_test_date.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.
@@ -40,8 +40,9 @@ int main( int argCnt, char **av )
po = 2;
}
-#ifdef XB_LOGGING_SUPPORT
xbXBase x;
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -49,7 +50,7 @@ int main( int argCnt, char **av )
xbString sMsg;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
InitTime();
xbDate d1;
diff --git a/src/tests/xb_test_dbf_v3_memos.cpp b/src/tests/xb_test_dbf_v3_memos.cpp
index ad3e8e0..e42edb1 100755
--- a/src/tests/xb_test_dbf_v3_memos.cpp
+++ b/src/tests/xb_test_dbf_v3_memos.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.
@@ -55,6 +55,7 @@ int main( int argCnt, char **av )
xbXBase x;
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -65,7 +66,6 @@ int main( int argCnt, char **av )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
#ifdef XB_LOCKING_SUPPORT
x.DisableDefaultAutoLock();
diff --git a/src/tests/xb_test_dbf_v3_nomemos.cpp b/src/tests/xb_test_dbf_v3_nomemos.cpp
index e5adc48..2dfeb7e 100755
--- a/src/tests/xb_test_dbf_v3_nomemos.cpp
+++ b/src/tests/xb_test_dbf_v3_nomemos.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.
@@ -59,7 +59,8 @@ int main( int argCnt, char **av )
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -67,10 +68,9 @@ int main( int argCnt, char **av )
xbString sMsg;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
#ifdef XB_LOCKING_SUPPORT
x.DisableDefaultAutoLock();
@@ -97,7 +97,7 @@ int main( int argCnt, char **av )
xbDbf3 V3Dbf2( &x );
// next occurrence should error as a dup
- x.WriteLogMessage( "Second create attempt" );
+ x.WriteLogMessage( "Second create attempt, should generate an error." );
iRc2 = V3Dbf2.CreateTable( "TestV3.DBF", "TestV3", MyV3Record, XB_DONTOVERLAY, XB_MULTI_USER );
iRc += TestMethod( po, "CreateTable()", iRc2, XB_FILE_EXISTS );
if( iRc2 != XB_FILE_EXISTS ){
diff --git a/src/tests/xb_test_dbf_v4_memos.cpp b/src/tests/xb_test_dbf_v4_memos.cpp
index 2b0e09c..47a9053 100755
--- a/src/tests/xb_test_dbf_v4_memos.cpp
+++ b/src/tests/xb_test_dbf_v4_memos.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,8 +47,8 @@ int main( int argCnt, char **av )
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
-
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -56,11 +56,9 @@ int main( int argCnt, char **av )
xbString sMsg;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-
-#endif
+ #endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
#ifdef XB_LOCKING_SUPPORT
x.DisableDefaultAutoLock();
diff --git a/src/tests/xb_test_dbf_v4_nomemos.cpp b/src/tests/xb_test_dbf_v4_nomemos.cpp
index 4036588..984eb63 100755
--- a/src/tests/xb_test_dbf_v4_nomemos.cpp
+++ b/src/tests/xb_test_dbf_v4_nomemos.cpp
@@ -2,7 +2,7 @@
XBase 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.
@@ -56,9 +56,19 @@ int main( int argCnt, char **av )
{ "",0,0,0 }
};
+ xbSchema MyV4ZipRecord[] =
+ {
+ { "ZIPCODE", XB_NUMERIC_FLD, 5, 0 },
+ { "CITY", XB_CHAR_FLD, 30, 0 },
+ { "STATE", XB_CHAR_FLD, 2, 0 },
+ { "",0,0,0 }
+ };
+
+
xbXBase x;
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -69,7 +79,6 @@ int main( int argCnt, char **av )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
#ifdef XB_LOCKING_SUPPORT
x.DisableDefaultAutoLock();
@@ -318,10 +327,26 @@ int main( int argCnt, char **av )
rc += TestMethod( po, "GetField()", V4Dbf.GetField( fldAMT, sf ), XB_NO_ERROR );
rc += TestMethod( po, "GetField()", sf, " 432.55", 9 );
+
+ xbDbf4 V4DbfZ( &x ); // version 4 dbf file
+ rc2 = V4DbfZ.CreateTable( "TestV4Zip.DBF", "TestV4Zip", MyV4ZipRecord, XB_OVERLAY, XB_MULTI_USER );
+ rc += TestMethod( po, "CreateTable()", (xbInt32) rc2, XB_NO_ERROR );
+ if( rc2 )
+ x.DisplayError( rc2 );
+
+
+
rc += TestMethod( po, "Close()", V4Dbf.Close(), XB_NO_ERROR );
if( po == 2 )
x.DisplayTableList();
+
+ rc += TestMethod( po, "Close()", V4DbfZ.Close(), XB_NO_ERROR );
+ if( po == 2 )
+ x.DisplayTableList();
+
+
+
if( po > 0 || rc < 0 )
fprintf( stdout, "Total Errors = %d\n", rc * -1 );
diff --git a/src/tests/xb_test_expnode.cpp b/src/tests/xb_test_expnode.cpp
index 3fb716d..cbd79c9 100755
--- a/src/tests/xb_test_expnode.cpp
+++ b/src/tests/xb_test_expnode.cpp
@@ -2,7 +2,7 @@
XBase 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.
@@ -42,6 +42,7 @@ int main( int argCnt, char **av )
xbXBase x;
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -52,7 +53,6 @@ int main( int argCnt, char **av )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
InitTime();
if( po > 0 ){
diff --git a/src/tests/xb_test_expression.cpp b/src/tests/xb_test_expression.cpp
index 75ed3e5..ac1cde7 100755
--- a/src/tests/xb_test_expression.cpp
+++ b/src/tests/xb_test_expression.cpp
@@ -2,7 +2,7 @@
XBase 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.
@@ -67,7 +67,7 @@ xbInt16 DevTester( xbXBase * xb, xbDbf * dbf, const char * sExpIn ){
if( iRc == XB_NO_ERROR ){
#ifdef XB_DEBUG_SUPPORT
exp.DumpTree( xbTrue );
- #endif // XB_DEBUG_SUPPORT
+ #endif // XB_DEBUG_SUPPORT
std::cout << "dump nodes\n";
n = exp.GetNextNodeTest( NULL );
if( !n ){
@@ -86,7 +86,6 @@ xbInt16 DevTester( xbXBase * xb, xbDbf * dbf, const char * sExpIn ){
std::cout << "Parse Error [" << iRc << "]\n";
return -1;
}
- return 0;
}
/**************************************************************************/
@@ -394,6 +393,7 @@ int main( int argCnt, char **av )
xbDate d;
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -404,7 +404,6 @@ int main( int argCnt, char **av )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
InitTime();
if( po > 0 ){
diff --git a/src/tests/xb_test_file.cpp b/src/tests/xb_test_file.cpp
index 4614805..cf835c2 100755
--- a/src/tests/xb_test_file.cpp
+++ b/src/tests/xb_test_file.cpp
@@ -1,6 +1,6 @@
/* xb_test_file.cpp
-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.
@@ -42,6 +42,7 @@ int main( int argCnt, char **av )
xbXBase x;
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
diff --git a/src/tests/xb_test_filter.cpp b/src/tests/xb_test_filter.cpp
index ac4b896..000e196 100755
--- a/src/tests/xb_test_filter.cpp
+++ b/src/tests/xb_test_filter.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2020,2022 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2020,2022,2023 Gary A Kunkel
The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
@@ -41,7 +41,6 @@ int main( int argCnt, char **av )
iPo = 2;
}
-
xbSchema MyV4Record[] =
{
{ "CFLD", XB_CHAR_FLD, 6, 0 },
@@ -50,9 +49,9 @@ int main( int argCnt, char **av )
{ "",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;
@@ -64,7 +63,6 @@ int main( int argCnt, char **av )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
char c;
xbString s;
@@ -114,7 +112,7 @@ int main( int argCnt, char **av )
iRc += TestMethod( iPo, "SetCurTag()", MyFile->SetCurTag( "" ), XB_NO_ERROR );
#endif // XB_INDEX_SUPPORT
- xbFilter f1( &x, MyFile );
+ xbFilter f1( MyFile );
xbString sMyFilterExpression = "LEFT( CFLD, 2 ) = 'YY'";
iRc += TestMethod( iPo, "Set()", f1.Set( sMyFilterExpression ), XB_NO_ERROR );
diff --git a/src/tests/xb_test_funcs.cpp b/src/tests/xb_test_funcs.cpp
index e8b73b0..c7bf0d3 100755
--- a/src/tests/xb_test_funcs.cpp
+++ b/src/tests/xb_test_funcs.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.
@@ -61,6 +61,7 @@ int main( int argCnt, char **av )
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
diff --git a/src/tests/xb_test_linklist.cpp b/src/tests/xb_test_linklist.cpp
index dc253af..288ee99 100755
--- a/src/tests/xb_test_linklist.cpp
+++ b/src/tests/xb_test_linklist.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.
@@ -42,7 +42,8 @@ int main( int argCnt, char **av )
}
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -50,7 +51,8 @@ int main( int argCnt, char **av )
xbString sMsg;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
+
InitTime();
xbLinkList ll;
diff --git a/src/tests/xb_test_lock.cpp b/src/tests/xb_test_lock.cpp
index 7e9865b..39332ad 100755
--- a/src/tests/xb_test_lock.cpp
+++ b/src/tests/xb_test_lock.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.
@@ -59,6 +59,7 @@ int main( int argCnt, char **av )
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po > 0 ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -69,7 +70,6 @@ int main( int argCnt, char **av )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
InitTime();
#ifdef XB_DBF4_SUPPORT
MyFile = new xbDbf4( &x ); /* version 4 dbf file */
diff --git a/src/tests/xb_test_lock2.cpp b/src/tests/xb_test_lock2.cpp
index 3dd4b57..d5534ec 100755
--- a/src/tests/xb_test_lock2.cpp
+++ b/src/tests/xb_test_lock2.cpp
@@ -2,7 +2,7 @@
XBase 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.
@@ -57,8 +57,8 @@ int main( int argCnt, char **av )
}
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
xbString sLogFileName = x.GetLogFqFileName().Str();
-
sLogFileName.Resize( sLogFileName.Len() - 3 );
sLogFileName += "_l2.txt";
x.SetLogFileName( sLogFileName );
@@ -72,7 +72,6 @@ int main( int argCnt, char **av )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
InitTime();
#ifdef XB_DBF4_SUPPORT
diff --git a/src/tests/xb_test_log.cpp b/src/tests/xb_test_log.cpp
index 613b7dd..28ae552 100755
--- a/src/tests/xb_test_log.cpp
+++ b/src/tests/xb_test_log.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,18 +21,13 @@ Email Contact:
#include "xbase.h"
using namespace xb;
-
#include "tstfuncs.cpp"
-
-
int main( int argCnt, char **av )
{
int rc = 0;
-#ifdef XB_LOGGING_SUPPORT
-
-
+ #ifdef XB_LOGGING_SUPPORT
int po = 1; /* print option */
/* 0 - QUIET */
/* 1 - NORMAL */
@@ -46,6 +41,7 @@ int main( int argCnt, char **av )
}
xbXBase x;
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
InitTime();
if( po ){
@@ -55,21 +51,18 @@ 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 );
-
x.DisableMsgLogging();
rc += TestMethod( po, "Set/Get Log Status()", x.GetLogStatus(), xbFalse );
x.SetLogFileName( sNewLogFileName );
- x.EnableMsgLogging();
+ x.EnableMsgLogging();
rc += TestMethod( po, "Set/Get Log Status()", x.GetLogStatus(), 1 );
rc += TestMethod( po,"WriteLogMessage()", x.WriteLogMessage( "Test log message........" ), XB_NO_ERROR );
-
sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], rc * -1 );
x.WriteLogMessage( sMsg );
diff --git a/src/tests/xb_test_mdx.cpp b/src/tests/xb_test_mdx.cpp
index af191ad..2ef5ffb 100755
--- a/src/tests/xb_test_mdx.cpp
+++ b/src/tests/xb_test_mdx.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.
@@ -55,20 +55,28 @@ int main( int argCnt, char **av )
};
+ xbSchema MyV4Record2[] =
+ {
+ { "CHAR1", XB_CHAR_FLD, 1, 0 },
+ { "CHAR27", XB_CHAR_FLD, 27, 0 },
+ { "",0,0,0 }
+ };
+
+
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
+ #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
+ #endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
- x.SetMultiUser( false );
+ x.SetMultiUser( xbFalse );
InitTime();
if( iPo > 0 )
@@ -92,6 +100,7 @@ int main( int argCnt, char **av )
xbInt16 iDescending, xbInt16 iUnique, xbInt16 iOverLay, xbIx **xbIxOut, void **vpTagOut );
*/
+
iRc2 = V4DbfX1->CreateTag( "MDX", "CITY_TAGA", "CITY", "", 0, 0, XB_OVERLAY, &pIx, &pTag );
iRc += TestMethod( iPo, "CreateTag(1)", iRc2, 0 );
@@ -109,8 +118,6 @@ int main( int argCnt, char **av )
// std::cout << iRc2 << "\n";
-// something in th following block of code causing issues
-
xbInt32 uZip = 10000;
for( xbUInt16 i = 0; i < 35; i++ ){
for( xbUInt16 j = 0; j < 14; j++ ){
@@ -147,7 +154,7 @@ int main( int argCnt, char **av )
}
- iRc += TestMethod( iPo, "CheckTagIntegrity()", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(1)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
// attempt to add a dup key, should fail with XB_KEY_NOT_UNIQUE
iRc2 = V4DbfX1->BlankRecord();
@@ -177,7 +184,7 @@ int main( int argCnt, char **av )
iRc += TestMethod( iPo, "Abort()", iRc2, XB_NO_ERROR );
iRc += TestMethod( iPo, "DeleteTag()", V4DbfX1->DeleteTag( "MDX", "CITY_TAGA" ), XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity()", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(2)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
iRc2 = V4DbfX1->CreateTag( "MDX", "CITY_TAGF", "CITY", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag );
iRc += TestMethod( iPo, "CreateTag(4)", iRc2, 0 );
@@ -186,27 +193,29 @@ int main( int argCnt, char **av )
iRc += TestMethod( iPo, "SetCurTag()", iRc2, XB_NO_ERROR );
iRc += TestMethod( iPo, "GetCurTagName()", V4DbfX1->GetCurTagName().Str(), "CITY_TAGF", 9 );
- iRc += TestMethod( iPo, "CheckTagIntegrity()", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_INVALID_INDEX );
+ // next check throws an error message on the display, that is what it is testing, don't need to debug it
+ iRc += TestMethod( iPo, "CheckTagIntegrity(3)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_INVALID_INDEX );
+
iRc2 = V4DbfX1->Reindex( 0 );
iRc += TestMethod( iPo, "Reindex( 0 )", iRc2, XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity()", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(4)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
iRc += TestMethod( iPo, "GetCurTagName()", V4DbfX1->GetCurTagName().Str(), "CITY_TAGF", 9 );
iRc2 = V4DbfX1->Reindex( 1 );
iRc += TestMethod( iPo, "Reindex( 1 )", iRc2, XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity()", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(5)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
// delete everything, all keys should be removed from the filtered index
iRc += TestMethod( iPo, "DeleteAll(0)", V4DbfX1->DeleteAll( 0 ), XB_NO_ERROR );
iRc += TestMethod( iPo, "Commit()", V4DbfX1->Commit(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity()", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(6)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
// undelete everything, all keys should be added back into the filtered index
iRc += TestMethod( iPo, "DeleteAll(1)", V4DbfX1->DeleteAll( 1 ), XB_NO_ERROR );
iRc += TestMethod( iPo, "Commit()", V4DbfX1->Commit(), XB_NO_ERROR );
- iRc += TestMethod( iPo, "CheckTagIntegrity()", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+ iRc += TestMethod( iPo, "CheckTagIntegrity(7)", V4DbfX1->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
// std::cout << "Cur Tag Name = " << V4DbfX1->GetCurTagName().Str() << "\n";
sKey = "abc";
@@ -239,8 +248,41 @@ int main( int argCnt, char **av )
iRc += TestMethod( iPo, "Rename()", V4DbfX1->Rename( "TestMdxR.DBF" ), XB_NO_ERROR );
+ xbDbf *V4DbfX2 = new xbDbf4( &x );
+ iRc2 = V4DbfX2->CreateTable( "TMDXDB02.DBF", "TestMdxX4", MyV4Record2, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( iPo, "CreateTable(2)", iRc2, 0 );
+
+
+ iRc2 = V4DbfX2->CreateTag( "MDX", "TAG1", "CHAR27", ".NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag );
+// iRc2 = V4DbfX2->CreateTag( "MDX", "TAG2", "CHAR1", "CHAR1 = 'O' .AND. .NOT. DELETED()", 0, 0, XB_OVERLAY, &pIx, &pTag );
+ iRc += TestMethod( iPo, "CreateTag(4)", iRc2, 0 );
+
+
+
+ for( xbUInt32 ul = 0; ul < 500 && iRc2 == XB_NO_ERROR; ul++ ){
+ c = 'O';
+ V4DbfX2->BlankRecord();
+ iRc2 = V4DbfX2->PutField( 1, c );
+ if( iRc2 != XB_NO_ERROR ){
+ iRc += TestMethod( iPo, "PutField()", iRc2, XB_NO_ERROR );
+ } else {
+ iRc2 = V4DbfX2->AppendRecord();
+ if( iRc2 != XB_NO_ERROR ){
+ iRc += TestMethod( iPo, "AppendRecord()", iRc2, XB_NO_ERROR );
+ } else {
+ iRc2 = V4DbfX2->Commit();
+ if( iRc2 != XB_NO_ERROR ){
+ iRc += TestMethod( iPo, "Commit()", iRc2, XB_NO_ERROR );
+ }
+ }
+ }
+ }
+
+ iRc += TestMethod( iPo, "CheckTagIntegrity(7)", V4DbfX2->CheckTagIntegrity( 1, 2 ), XB_NO_ERROR );
+
x.CloseAllTables();
delete V4DbfX1;
+ delete V4DbfX2;
if( iPo > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
diff --git a/src/tests/xb_test_ndx.cpp b/src/tests/xb_test_ndx.cpp
index b8b97f6..34496b6 100755
--- a/src/tests/xb_test_ndx.cpp
+++ b/src/tests/xb_test_ndx.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.
@@ -57,6 +57,7 @@ int main( int argCnt, char **av )
xbString sMsg;
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( iPo ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -67,11 +68,7 @@ int main( int argCnt, char **av )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
-
- #ifdef XB_LOCKING_SUPPORT
- x.DisableDefaultAutoLock();
- #endif
+ x.SetMultiUser( xbFalse );
InitTime();
@@ -386,11 +383,13 @@ int main( int argCnt, char **av )
//ix->GetTagName( 0, sTagName );
sMsg.Sprintf( "CheckTagIntegrity() - [%s]", ix->GetTagName(ix->GetCurTag()).Str());
iRc += TestMethod( iPo, sMsg, ix->CheckTagIntegrity( ix->GetCurTag(), 2 ), XB_NO_ERROR );
- ixl = ixl->next;
}
+ ixl = ixl->next;
}
- iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
+// iRc += TestMethod( iPo, "DeleteTable()", V3Dbf->DeleteTable(), XB_NO_ERROR );
+
+ x.CloseAllTables();
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 20c8514..99a4f0b 100755
--- a/src/tests/xb_test_sql.cpp
+++ b/src/tests/xb_test_sql.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.
@@ -44,9 +44,10 @@ int main( int argCnt, char **av )
po = 2;
}
-
- xbSchema MySqlRecord[] =
+/*
+ xbSchema MyAddressRecord[] =
{
+ { "ADDRESS", XB_CHAR_FLD, 30, 0 },
{ "CITY", XB_CHAR_FLD, 30, 0 },
{ "STATE", XB_CHAR_FLD, 2, 0 },
{ "ZIPCODE", XB_NUMERIC_FLD, 9, 0 },
@@ -56,9 +57,23 @@ int main( int argCnt, char **av )
{ "",0,0,0 }
};
+ above structure below, depending on how table is created
+
+ sSql = "CREATE TABLE Address.DBF ( ADDRESS CHAR(30), CITY CHAR(30), STATE CHAR(2), ZIPCODE NUMERIC(9,0), NOTES VARCHAR, LASTUPDATE DATE, ACTIVE LOGICAL )";
+*/
+
+ xbSchema MyZipRecord[] =
+ {
+ { "ZIPCODE", XB_NUMERIC_FLD, 9, 0 },
+ { "CITY", XB_CHAR_FLD, 30, 0 },
+ { "STATE", XB_CHAR_FLD, 2, 0 },
+ { "",0,0,0 }
+ };
+
xbXBase x;
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -69,9 +84,7 @@ int main( int argCnt, char **av )
#endif
-
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
InitTime();
xbSql sql( &x );
@@ -81,36 +94,48 @@ int main( int argCnt, char **av )
xbDbf4 SqlDbf( &x ); // version 4 dbf file
+ xbDbf4 SqlDbfZ( &x ); // version 4 dbf file
+
- // clean up any things possibly needing cleaned up
- xbString sDir;
- SqlDbf.GetFileDirPart( sDir );
- xbString sDbfName;
- xbString sDbtName;
- xbString sMdxName;
- sDbfName.Sprintf( "%sTestSQL.DBF", sDir.Str());
- sDbtName.Sprintf( "%sTestSQL.DBR", sDir.Str());
- sMdxName.Sprintf( "%sTestSQL.MDX", sDir.Str());
- SqlDbf.xbRemove( sDbfName );
- SqlDbf.xbRemove( sDbtName );
- SqlDbf.xbRemove( sMdxName );
- sDbfName.Sprintf( "%sTestSqlR.DBF", sDir.Str());
- sDbtName.Sprintf( "%sTestSqlR.DBT", sDir.Str());
- sMdxName.Sprintf( "%sTestSqlR.MDX", sDir.Str());
- SqlDbf.xbRemove( sDbfName );
- SqlDbf.xbRemove( sDbtName );
- SqlDbf.xbRemove( sMdxName );
-
-
- iRc2 = SqlDbf.CreateTable( "TestSQL.DBF", "TestSQL", MySqlRecord, XB_OVERLAY, XB_MULTI_USER );
+
+
+ sSql = "DROP TABLE IF EXISTS AddressR.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+
+ sSql = "DROP TABLE IF EXISTS Address.DBF";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "DropTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+
+ sSql = "CREATE TABLE Address.DBF ( ADDRESS CHAR(30), CITY CHAR(30), STATE CHAR(2), ZIPCODE NUMERIC(9,0), NOTES VARCHAR, LASTUPDATE DATE, ACTIVE LOGICAL )";
+
+ iRc2 = sql.ExecuteNonQuery( sSql );
+ iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+/*
+ non sql way to create a table
+ iRc2 = SqlDbf.CreateTable( "Address.DBF", "Address", MyAddressRecord, XB_OVERLAY, XB_MULTI_USER );
iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
+*/
+
+// return 0;
#ifdef XB_MDX_SUPPORT
- sSql = "CREATE INDEX tag1 ON TestSQL.DBF( CITY, STATE, DTOS( LASTUPDATE )) FILTER .NOT. DELETED()";
- // xbString sSql = "CREATE INDEX tag1 ON TestSQL.DBF( CITY, STATE )";
+ sSql = "CREATE INDEX tag1 ON Address.DBF( CITY, STATE, DTOS( LASTUPDATE )) FILTER .NOT. DELETED()";
+ // xbString sSql = "CREATE INDEX tag1 ON Address.DBF( CITY, STATE )";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqL CreateIndex()", (xbInt32) iRc2, XB_NO_ERROR );
@@ -118,65 +143,107 @@ int main( int argCnt, char **av )
x.DisplayError( iRc2 );
#endif // XB_MDX_SUPPORT
- sSql = "INSERT INTO TestSQL (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y')";
+ sSql = "INSERT INTO Address (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'San Diego', 'CA', 92007, 'San Diego is a cool place', '1989-02-09', 'Y')";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
- sSql = "INSERT INTO TestSQL (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'Dallas', 'TX', 76248, 'Dallas is hot in the summer', '1989-02-09', 'N')";
+ sSql = "INSERT INTO Address (CITY, STATE, ZIPCODE, NOTES, LASTUPDATE, ACTIVE ) VALUES ( 'Dallas', 'TX', 76248, 'Dallas is hot in the summer', '1989-02-09', 'N')";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
- sSql = "ALTER TABLE TestSQL.DBF RENAME TO TestSqlR.DBF";
+ sSql = "ALTER TABLE Address.DBF RENAME TO AddressR.DBF";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqlAlterTable()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
- x.DisplayTableList();
-
-
- sSql = "DELETE FROM TestSqlR.DBF WHERE CITY='San Diego'";
+ sSql = "DELETE FROM AddressR.DBF WHERE CITY='San Diego'";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
- sSql = "UNDELETE FROM TestSqlR.DBF WHERE CITY='San Diego'";
+ sSql = "UNDELETE FROM AddressR.DBF WHERE CITY='San Diego'";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqlUndelete()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
- sSql = "DELETE FROM TestSqlR.DBF";
+ sSql = "DELETE FROM AddressR.DBF";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
- sSql = "UNDELETE FROM TestSqlR.DBF";
+ sSql = "UNDELETE FROM AddressR.DBF";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_NO_ERROR );
if( iRc2 )
x.DisplayError( iRc2 );
- sSql = "DELETE FROM TestSqlR.DBF WHERE BAD='EXPRESSION'";
+ iRc2 = SqlDbfZ.CreateTable( "ZipCode.DBF", "", MyZipRecord, XB_OVERLAY, XB_MULTI_USER );
+ iRc += TestMethod( po, "CreateTable()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+// sSql = "INSERT INTO ZipCode.DBF ( ZIPCODE, CITY, STATE ) VALUES ( 75087, 'Rockwall', 'TX' )";
+
+
+// std::cout << "---------------------------------------------------------\n";
+// std::cout << sSql.Str() << "\n";
+
+ sSql = "INSERT INTO ZipCode ( CITY ) VALUES ( 'city' )";
+ iRc2 = sql.ExecuteNonQuery( sSql );
+
+
+ iRc += TestMethod( po, "SqlInsert()", (xbInt32) iRc2, XB_NO_ERROR );
+ if( iRc2 )
+ x.DisplayError( iRc2 );
+
+
+
+//**************** work in progress
+
+/*
+ sSql = "DELETE FROM AddressR.DBF WHERE BAD='EXPRESSION'";
iRc2 = sql.ExecuteNonQuery( sSql );
iRc += TestMethod( po, "SqlDelete()", (xbInt32) iRc2, XB_INVALID_FIELD_NAME );
+*/
// if( iRc2 )
// x.DisplayError( iRc2 );
-// sSql = "SELECT CITY, STATE ZIPCODE FROM TestSQL.DBF WHERE CITY IS NOT NULL";
-// iRc += TestMethod( po, "Select()", SqlDbf.Select( sSql ), XB_NO_ERROR );
-
iRc += TestMethod( po, "Close()", SqlDbf.Close(), XB_NO_ERROR );
+ iRc += TestMethod( po, "Close()", SqlDbfZ.Close(), XB_NO_ERROR );
+
+
+// return 0;
+
+// std::cout << "---------------------------------------------------------\n";
+
+ xbStmt sqlQry1( &x );
+// sSql = "SELECT CITY, STATE, ZIPCODE FROM Address.DBF T LEFT JOIN LJ.DBF LJ WHERE CITY IS NOT NULL ORDER BY 2 GROUP BY STATE HAVING ZIPCODE .NOT. NULL";
+// sSql = "SELECT CITY, STATE, ZIPCODE FROM AddressR.DBF T WHERE CITY IS NOT NULL ORDER BY 2 GROUP BY STATE HAVING ZIPCODE .NOT. NULL";
+
+// sSql = "SELECT CITY, STATE, ZIPCODE FROM AddressR A LEFT JOIN ZipCode Z ON A.ZIPCODE = Z.ZIPCODE WHERE CITY IS NOT NULL ORDER BY 2 GROUP BY STATE HAVING ZIPCODE .NOT. NULL";
+// sSql = "SELECT M.ID, M.LEFTFK0, L0.CFLD FROM MAIN0 M LEFT JOIN LEFT0 L0 ON M.LEFTFK0 = L0.LEFTFK0 WHERE M.ID IS NOT NULL";
+ iRc += TestMethod( po, "Select()", sqlQry1.ExecuteQuery( sSql ), XB_NO_ERROR );
+
+ sqlQry1.DumpStmtInternals();
+
+ // sqlQry1.Test();
+
+
+ x.DisplayTableList();
+
if( po > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
diff --git a/src/tests/xb_test_string.cpp b/src/tests/xb_test_string.cpp
index 9d730db..2f01e51 100755
--- a/src/tests/xb_test_string.cpp
+++ b/src/tests/xb_test_string.cpp
@@ -2,7 +2,7 @@
XBase63 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.
@@ -46,6 +46,7 @@ int main( int argCnt, char **av = NULL )
xbString sMsg;
#ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -55,7 +56,6 @@ int main( int argCnt, char **av = NULL )
#endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
InitTime();
@@ -260,6 +260,13 @@ int main( int argCnt, char **av = NULL )
rc += TestMethod( po, "Pos(\"000\") ", (xbInt32) s1.Pos( "000" ), 0 );
rc += TestMethod( po, "Pos(\"DEF\") ", (xbInt32) s1.Pos( "DEF" ), 1 );
+ s1 = "ABC.123.abc";
+ rc += TestMethod( po, "Pos( '.', 4 )", (xbInt32) s1.Pos( '.', 4 ), 4 );
+ rc += TestMethod( po, "Pos( '.', 5 )", (xbInt32) s1.Pos( '.', 5 ), 8 );
+ rc += TestMethod( po, "Pos( '.', 9 )", (xbInt32) s1.Pos( '.', 9 ), 0 );
+
+
+
s1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
rc += TestMethod( po, "Remove(3,5) ", s1.Remove( 3, 5 ), "ABHIJKLMNOPQRSTUVWXYZ", 21 );
diff --git a/src/tests/xb_test_tblmgr.cpp b/src/tests/xb_test_tblmgr.cpp
index 451432c..d048594 100755
--- a/src/tests/xb_test_tblmgr.cpp
+++ b/src/tests/xb_test_tblmgr.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.
@@ -13,7 +13,7 @@ Email Contact:
*/
-// This program tests the class xbXBase
+// This program tests the table manager functions.
// usage: xb_test_tblmgr QUITE|NORMAL|VERBOSE
@@ -25,33 +25,35 @@ 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
+ #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;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
+
InitTime();
- if( po == 2 ){
+ if( iPo == 2 ){
std::cout << "DisplayError Test ==> ";
x.DisplayError( 0 );
#ifdef WIN32
@@ -73,14 +75,14 @@ int main( int argCnt, char **av )
return -1;
#endif
- rc += TestMethod( po, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableC" ), 0 );
- rc += TestMethod( po, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableA" ), 0 );
- rc += TestMethod( po, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableB" ), 0 );
- rc += TestMethod( po, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableD" ), 0 );
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableC" ), 0 );
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableA" ), 0 );
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableB" ), 0 );
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableD" ), 0 );
// Next line should generate an exception
- rc += TestMethod( po, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableC" ), XB_DUP_TABLE_OR_ALIAS );
+ iRc += TestMethod( iPo, "AddTblToTblLst()", x.AddTblToTblList( d1, "TestTableC" ), XB_DUP_TABLE_OR_ALIAS );
std::cout << "**** Next list should have one each of TestTableA, B, C, D sorted in alpha order ****" << std::endl;
x.DisplayTableList();
@@ -90,7 +92,7 @@ int main( int argCnt, char **av )
std::cout << "[PASS] GetDbfPtr()" << std::endl;
else{
std::cout << "[FAIL] GetDbfPtr()" << std::endl;
- rc--;
+ iRc--;
}
@@ -98,70 +100,59 @@ std::cout << "cp0\n";
x.SetDataDirectory( "/ABCDEFG/" );
#ifdef WIN32
- rc += TestMethod( po, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
#else
- rc += TestMethod( po, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
#endif
std::cout << "cp1\n";
x.SetDataDirectory( "/ABCDEFG" );
#ifdef WIN32
- rc += TestMethod( po, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
#else
- rc += TestMethod( po, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
#endif
- std::cout << "cp2\n";
-
-
x.SetDataDirectory( "\\ABCDEFG\\");
#ifdef WIN32
- rc += TestMethod( po, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG\\", 9 );
#else
- rc += TestMethod( po, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG/", 9 );
#endif
- std::cout << "cp3\n";
-
-
x.SetDataDirectory( "\\ABCDEFG" );
#ifdef WIN32
- rc += TestMethod( po, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "\\ABCDEFG", 8 );
#else
- rc += TestMethod( po, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "/ABCDEFG", 8 );
#endif
-
- std::cout << "cp4\n";
-
-
x.SetDataDirectory( "ABCDEFG" );
- rc += TestMethod( po, "Set/GetDataDirectory()", x.GetDataDirectory(), "ABCDEFG", 7 );
-
+ iRc += TestMethod( iPo, "Set/GetDataDirectory()", x.GetDataDirectory(), "ABCDEFG", 7 );
- rc += TestMethod( po, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), 0 );
- rc += TestMethod( po, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), XB_NOT_FOUND );
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), 0 );
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableB" ), XB_NOT_FOUND );
std::cout << "**** Next list should not have TestTableB in it ****" << std::endl;
x.DisplayTableList();
- rc += TestMethod( po, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableA" ), 0 );
- rc += TestMethod( po, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableC" ), 0 );
- rc += TestMethod( po, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableD" ), 0 );
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableA" ), 0 );
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableC" ), 0 );
+ iRc += TestMethod( iPo, "RemoveTblFromDbList()", x.RemoveTblFromTblList( "TestTableD" ), 0 );
delete d1;
- if( 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_uda.cpp b/src/tests/xb_test_uda.cpp
index dec41fa..18693b5 100755
--- a/src/tests/xb_test_uda.cpp
+++ b/src/tests/xb_test_uda.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.
@@ -45,7 +45,8 @@ int main( int argCnt, char **av )
xbXBase x;
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
+ x.SetLogDirectory( PROJECT_LOG_DIR );
x.EnableMsgLogging();
if( po ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
@@ -53,11 +54,9 @@ int main( int argCnt, char **av )
xbString sMsg;
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
-#endif
-
+ #endif
x.SetDataDirectory( PROJECT_DATA_DIR );
- x.EnableMsgLogging();
xbUda uda;
iRc += TestMethod( po, "GetTokencCnt()", uda.GetTokenCnt(), 0 );
diff --git a/src/tests/xb_test_xbase.cpp b/src/tests/xb_test_xbase.cpp
index 9d523c5..4751c25 100755
--- a/src/tests/xb_test_xbase.cpp
+++ b/src/tests/xb_test_xbase.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.
@@ -27,26 +27,34 @@ using namespace xb;
int main( int argCnt, char **av )
{
int iRc = 0;
- int po = 1; /* print option */
+ 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;
xbString sMsg;
#ifdef XB_LOGGING_SUPPORT
+
+
+ xbString sLogDir = PROJECT_LOG_DIR;
+// x.SetLogDirectory( sLogDir );
+ x.SetLogDirectory( PROJECT_LOG_DIR );
+
+
x.EnableMsgLogging();
- if( po ){
+ if( iPo ){
std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
}
+
sMsg.Sprintf( "Program [%s] initializing...", av[0] );
x.WriteLogMessage( sMsg );
#endif
@@ -54,8 +62,8 @@ int main( int argCnt, char **av )
x.SetDefaultDateFormat( "YY-MM-DD" );
- iRc += TestMethod( po, "SetDefaultDateFormat", x.GetDefaultDateFormat(), "YY-MM-DD", 8 );
- if( po == 2 ){
+ iRc += TestMethod( iPo, "SetDefaultDateFormat", x.GetDefaultDateFormat(), "YY-MM-DD", 8 );
+ if( iPo == 2 ){
if( x.GetEndianType() == 'L' )
std::cout << "Little Endian Architecture" << std::endl;
else if( x.GetEndianType() == 'B' )
@@ -64,38 +72,32 @@ int main( int argCnt, char **av )
std::cout << "Undefine Endian Architecture" << std::endl;
}
- iRc += TestMethod( po, "GetErrorMessage", x.GetErrorMessage( XB_DBF_FILE_NOT_OPEN ), "DBF File Not Open", 17 );
+ iRc += TestMethod( iPo, "GetErrorMessage", x.GetErrorMessage( XB_DBF_FILE_NOT_OPEN ), "DBF File Not Open", 17 );
#ifdef XB_LOGGING_SUPPORT
- xbString sLogDir = PROJECT_LOG_DIR;
- iRc += TestMethod( po, "GetDefaultLogDirectory()", x.GetDefaultLogDirectory(), sLogDir, sLogDir.Len());
-
+ iRc += TestMethod( iPo, "GetLogDirectory()", x.GetLogDirectory(), sLogDir, sLogDir.Len());
xbString sLogName = CMAKE_SYSTEM_NAME;
sLogName += "_";
sLogName += XB_PLATFORM;
sLogName += ".xbLog.txt";
- iRc += TestMethod( po, "GetDefaultLogFileName()", x.GetDefaultLogFileName(), sLogName, sLogName.Len());
-
- x.WriteLogMessage( "test" );
+ iRc += TestMethod( iPo, "GetLogFileName()", x.GetLogFileName(), sLogName, sLogName.Len());
+ x.WriteLogMessage( "Program xb_test_xbase - test logfile message" );
#endif
x.xbSleep( 250 );
-
-
- if( po == 2 ){
+ if( iPo == 2 ){
std::cout << "DisplayError Test ==> ";
x.DisplayError( 0 );
}
-
- if( po > 0 || iRc < 0 )
+ if( iPo > 0 || iRc < 0 )
fprintf( stdout, "Total Errors = %d\n", iRc * -1 );
-#ifdef XB_LOGGING_SUPPORT
+ #ifdef XB_LOGGING_SUPPORT
sMsg.Sprintf( "Program [%s] terminating with [%d] errors...", av[0], iRc * -1 );
x.WriteLogMessage( sMsg );
-#endif
+ #endif
return iRc;
}
diff --git a/src/utils/xb_cfg_check.cpp b/src/utils/xb_cfg_check.cpp
index 25ca46c..5489c51 100755
--- a/src/utils/xb_cfg_check.cpp
+++ b/src/utils/xb_cfg_check.cpp
@@ -1,3 +1,19 @@
+/* xb_cfg_check.cpp
+
+XBase64 Software Library
+
+Copyright (c) 1997,2003,2014,2019,2023 Gary A Kunkel
+
+The xb64 software library is covered under
+the terms of the GPL Version 3, 2007 license.
+
+Email Contact:
+
+ xb64-devel@lists.sourceforge.net
+ xb64-users@lists.sourceforge.net
+
+*/
+
#include
#include
@@ -23,7 +39,7 @@ int main()
fprintf( stdout, "CMAKE C FLAGS = [%s]\n", CMAKE_C_FLAGS );
fprintf( stdout, "CMAKE C FLAGS DEBUG = [%s]\n", CMAKE_C_FLAGS_DEBUG );
fprintf( stdout, "CMAKE C FLAGS RELEASE = [%s]\n", CMAKE_C_FLAGS_RELEASE );
-
+
#ifdef XB_PLATFORM_32
fprintf( stdout, "XB_PLATFORM_32 = [TRUE]\n" );
@@ -124,13 +140,13 @@ int main()
fprintf( stdout, "XB_INDEX_SUPPORT = [OFF]\n" );
#endif
- #ifdef XB_INDEX_SUPPORT
+ #ifdef XB_NDX_SUPPORT
fprintf( stdout, "XB_NDX_SUPPORT = [ON]\n" );
#else
fprintf( stdout, "XB_NDX_SUPPORT = [OFF]\n" );
#endif
- #ifdef XB_INDEX_SUPPORT
+ #ifdef XB_MDX_SUPPORT
fprintf( stdout, "XB_MDX_SUPPORT = [ON]\n" );
#else
fprintf( stdout, "XB_MDX_SUPPORT = [OFF]\n" );
@@ -142,6 +158,24 @@ int main()
fprintf( stdout, "XB_SQL_SUPPORT = [OFF]\n" );
#endif
+ #ifdef XB_INF_SUPPORT
+ fprintf( stdout, "XB_INF_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_INF_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_FILTER_SUPPORT
+ fprintf( stdout, "XB_FILTER_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_FILTER_SUPPORT = [OFF]\n" );
+ #endif
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ fprintf( stdout, "XB_BLOCKREAD_SUPPORT = [ON]\n" );
+ #else
+ fprintf( stdout, "XB_BLOCKREAD_SUPPORT = [OFF]\n" );
+ #endif
+
fprintf( stdout, "\nDirectories:\n" );
fprintf( stdout, "HOME_DIRECTORY = [%s]\n", CMAKE_HOME_DIRECTORY );
@@ -159,32 +193,32 @@ int main()
fprintf( stdout, "Field sizes:\n" );
fprintf( stdout, "SIZEOF_VOID_P = [%s]\n", CMAKE_SIZEOF_VOID_P );
- fprintf( stdout, "sizeof(char *) = [%ld]\n", sizeof( char *));
- fprintf( stdout, "sizeof(int) = [%ld]\n", sizeof( int ));
- fprintf( stdout, "sizeof(long) = [%ld]\n", sizeof( long ));
- fprintf( stdout, "sizeof(char) = [%ld]\n", sizeof( char ));
+ fprintf( stdout, "sizeof(char *) = [%zd]\n", sizeof( char *));
+ fprintf( stdout, "sizeof(int) = [%zd]\n", sizeof( int ));
+ fprintf( stdout, "sizeof(long) = [%zd]\n", sizeof( long ));
+ fprintf( stdout, "sizeof(char) = [%zd]\n", sizeof( char ));
#ifdef HAVE_WCHAR_H
- fprintf( stdout, "sizeof(wchar_t) = [%ld]\n", sizeof( wchar_t ));
+ fprintf( stdout, "sizeof(wchar_t) = [%zd]\n", sizeof( wchar_t ));
#endif
#ifdef HAVE_WINDOWS_H
- fprintf( stdout, "sizeof(DWORD) = [%ld]\n", sizeof( DWORD ));
- #endif
-
- fprintf( stdout, "sizeof(double) = [%ld]\n", sizeof( double ));
- fprintf( stdout, "sizeof(float) = [%ld]\n", sizeof( float ));
- fprintf( stdout, "sizeof(size_t) = [%ld]\n", sizeof( size_t ));
- fprintf( stdout, "sizeof(off_t) = [%ld]\n\n", sizeof( off_t ));
-
- fprintf( stdout, "sizeof(xbBool) = [%ld]\n", sizeof( xbBool ));
- fprintf( stdout, "sizeof(xbInt16) = [%ld]\n", sizeof( xbInt16 ));
- fprintf( stdout, "sizeof(xbUInt16) = [%ld]\n", sizeof( xbUInt16 ));
- fprintf( stdout, "sizeof(xbInt32) = [%ld]\n", sizeof( xbInt32 ));
- fprintf( stdout, "sizeof(xbUInt32) = [%ld]\n", sizeof( xbUInt32 ));
- fprintf( stdout, "sizeof(xbInt64) = [%ld]\n", sizeof( xbInt64 ));
- fprintf( stdout, "sizeof(xbUInt64) = [%ld]\n", sizeof( xbUInt64 ));
- fprintf( stdout, "sizeof(xbFloat) = [%lu]\n", sizeof( xbFloat ));
- fprintf( stdout, "sizeof(xbDouble) = [%lu]\n", sizeof( xbDouble ));
+ fprintf( stdout, "sizeof(DWORD) = [%zd]\n", sizeof( DWORD ));
+ #endif
+
+ fprintf( stdout, "sizeof(double) = [%zd]\n", sizeof( double ));
+ fprintf( stdout, "sizeof(float) = [%zd]\n", sizeof( float ));
+ fprintf( stdout, "sizeof(size_t) = [%zd]\n", sizeof( size_t ));
+ fprintf( stdout, "sizeof(off_t) = [%zd]\n\n", sizeof( off_t ));
+
+ fprintf( stdout, "sizeof(xbBool) = [%zd]\n", sizeof( xbBool ));
+ fprintf( stdout, "sizeof(xbInt16) = [%zd]\n", sizeof( xbInt16 ));
+ fprintf( stdout, "sizeof(xbUInt16) = [%zd]\n", sizeof( xbUInt16 ));
+ fprintf( stdout, "sizeof(xbInt32) = [%zd]\n", sizeof( xbInt32 ));
+ fprintf( stdout, "sizeof(xbUInt32) = [%zd]\n", sizeof( xbUInt32 ));
+ fprintf( stdout, "sizeof(xbInt64) = [%zd]\n", sizeof( xbInt64 ));
+ fprintf( stdout, "sizeof(xbUInt64) = [%zd]\n", sizeof( xbUInt64 ));
+ fprintf( stdout, "sizeof(xbFloat) = [%zu]\n", sizeof( xbFloat ));
+ fprintf( stdout, "sizeof(xbDouble) = [%zu]\n", sizeof( xbDouble ));
fprintf( stdout, "\nHeader files:\n" );
diff --git a/src/utils/xb_copydbf.cpp b/src/utils/xb_copydbf.cpp
index 1f88eb9..2466b1b 100755
--- a/src/utils/xb_copydbf.cpp
+++ b/src/utils/xb_copydbf.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2019 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2019,2023 Gary A Kunkel
The xb64 software library is covered under
the terms of the GPL Version 3, 2007 license.
@@ -17,42 +17,80 @@ Email Contact:
#include
using namespace xb;
-int main(int ac,char** av)
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_copydbf [-h] [-?] [--help] [-v] [--version] -s source.DBF -t target.DBF" << std::endl << std::endl;
+ std::cout << "This program copies the structure of a table defined in source.DBF to target.DBF. Data and indices are not included.";
+ std::cout << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+
+int main(int argc, char *argv[])
{
- if (3 != ac) {
- std::cout <<
- "\nUsage: xb_copydbf filename1 filename2\n"
- "This program copies the structure of one dbf file to another\n";
+
+ xbXBase x;
+ xbInt16 iRc;
+ xbDbf *dSrc = NULL;
+ xbDbf *dTrg = NULL;
+
+ xbString sParm;
+ xbString sSrcDbf;
+ xbString sTrgDbf;
+
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
return 1;
}
- char* sFileName = av[1];
- char* tFileName = av[2];
+ if( !x.GetCmdLineOpt( argc, argv, "-s", sSrcDbf ) || sSrcDbf == "" ){
+ PrintHelp();
+ return 1;
+ }
- xbXBase x;
- xbInt16 iRc;
- xbDbf *MyFile = NULL;
- xbDbf *MyNewFile = NULL;
+ if( !x.GetCmdLineOpt( argc, argv, "-t", sTrgDbf ) || sTrgDbf == "" ){
+ PrintHelp();
+ return 1;
+ }
#ifdef XB_LOGGING_SUPPORT
x.EnableMsgLogging();
xbString sMsg;
- sMsg.Sprintf( "Program [%s] initializing...", av[0] );
+ sMsg.Sprintf( "Program [%s] initializing...", argv[0] );
x.WriteLogMessage( sMsg );
#endif
- if(( iRc = x.OpenHighestVersion( sFileName, "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file iRc = " << iRc << " file = " << sFileName << std::endl;
+ if(( iRc = x.OpenHighestVersion( sSrcDbf, "", &dSrc )) != XB_NO_ERROR ){
+ std::cout << "Could not open file iRc = " << iRc << " file = " << sSrcDbf.Str() << std::endl;
x.DisplayError( iRc );
- return 0;
+ return 1;
}
- if(( iRc = MyFile->CopyDbfStructure( MyNewFile, tFileName, tFileName, XB_DONTOVERLAY, XB_SINGLE_USER )) != XB_NO_ERROR ){
- std::cout << "Could not copy file " << tFileName << " Error = " << iRc << "\n";
- return 3;
+ #ifdef XB_DBF4_SUPPORT
+ dTrg = new xbDbf4( &x );
+ #else
+ dTrg = new xbDbf3( &x );
+ #endif
+
+ if(( iRc = dSrc->CopyDbfStructure( dTrg, sTrgDbf, sTrgDbf, XB_DONTOVERLAY, XB_SINGLE_USER )) != XB_NO_ERROR ){
+ std::cout << "Could not copy file " << sTrgDbf.Str() << " Error = " << iRc << "\n";
+ x.DisplayError( iRc );
+ return 1;
}
- MyFile->Close();
+ x.CloseAllTables();
return 0;
}
diff --git a/src/utils/xb_dbfutil.cpp b/src/utils/xb_dbfutil.cpp
index 9c04fe3..e50495e 100755
--- a/src/utils/xb_dbfutil.cpp
+++ b/src/utils/xb_dbfutil.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2021 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.
@@ -29,11 +29,13 @@ using namespace xb;
///@cond DOXYOFF
class xbUtil{
public:
- xbUtil();
+ xbUtil( xbXBase *x );
~xbUtil();
xbDbf *GetTablePtr( const char * cTitle );
void DisplayActiveTable() const;
+ void Help();
+
// menus
xbInt16 GetOption();
xbInt32 GetLong();
@@ -215,8 +217,8 @@ class xbUtil{
private:
- xbXBase x;
- xbDbf * dActiveTable;
+ xbXBase *x;
+ xbDbf *dActiveTable;
#ifdef XB_EXPRESSION_SUPPORT
xbExp *exp;
@@ -233,18 +235,19 @@ class xbUtil{
};
/*************************************************************************************/
-xbUtil::xbUtil()
+xbUtil::xbUtil( xbXBase *x )
{
+ this->x = x;
dActiveTable = NULL;
- x.EnableMsgLogging();
- x.SetLogSize( 10000000L );
+ x->EnableMsgLogging();
+ x->SetLogSize( 10000000L );
#ifdef XB_EXPRESSION_SUPPORT
exp = NULL;
#endif
#ifdef XB_SQL_SUPPORT
- sql = new xbSql( &x );
+ sql = new xbSql( x );
#endif // XB_SQL_SUPPORT
#ifdef XB_FILTER_SUPPORT
@@ -256,7 +259,7 @@ xbUtil::xbUtil()
/*************************************************************************************/
xbUtil::~xbUtil(){
- x.CloseAllTables();
+ x->CloseAllTables();
if( dActiveTable )
delete dActiveTable;
@@ -272,6 +275,17 @@ xbUtil::~xbUtil(){
#endif // XB_FILTER_SUPPORT
}
+
+/*************************************************************************************/
+void xbUtil::Help(){
+ std::cout << "Program xb_dbfutil provides a menu driven application for accessing" << std::endl;
+ std::cout << "the xbase64 library functions." << std::endl << std::endl;
+ std::cout << "Menu choices can be selected directly with out accessing the given menus" << std::endl;
+ std::cout << "by entering a '=' followed by the menu choices. For example, entering '=3.4'" << std::endl;
+ std::cout << "would be the same as going to menu #3 and entering a 4, which is the sequence" << std::endl;
+ std::cout << "for opening a file." << std::endl;
+}
+
/*************************************************************************************/
#ifdef XB_NDXINF_SUPPORT
@@ -294,7 +308,7 @@ void xbUtil::AddInfFileData()
std::cout << "Enter NDX index file name (FILENAME.NDX)" << std::endl;
std::cin.getline( cBuf, 128 );
xbInt16 iRc = dActiveTable->AssociateIndex( "NDX", cBuf, 0 );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::DeleteInfFileData()
@@ -303,7 +317,7 @@ void xbUtil::DeleteInfFileData()
std::cout << "Enter NDX index file name (FILENAME.NDX)" << std::endl;
std::cin.getline( cBuf, 128 );
xbInt16 iRc = dActiveTable->AssociateIndex( "NDX", cBuf, 1 );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::InfFileHelp()
@@ -329,7 +343,7 @@ void xbUtil::LockIndices(){
return;
}
xbInt16 iRc = dActiveTable->LockIndices( XB_LOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::UnlockIndices(){
@@ -343,7 +357,7 @@ void xbUtil::UnlockIndices(){
return;
}
xbInt16 iRc = dActiveTable->LockIndices( XB_UNLOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
#endif // XB_LOCKING_SUPPORT
@@ -381,11 +395,11 @@ void xbUtil::ParseExpression( xbInt16 iOption ){
exp = NULL;
}
- exp = new xbExp( &x, dActiveTable );
+ exp = new xbExp( x, dActiveTable );
iRc = exp->ParseExpression( sExpression );
if( iOption == 0 )
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
/*************************************************************************************/
@@ -404,7 +418,7 @@ void xbUtil::ProcessParsedExpression( xbInt16 iOption ){
xbInt16 iRc = exp->ProcessExpression();
if( iRc != XB_NO_ERROR ){
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
return;
}
@@ -496,7 +510,7 @@ void xbUtil::IsLeapYear(){
#ifdef XB_SQL_SUPPORT
void xbUtil::ExecSqlNonQuery(){
- xbSql sql( &x );
+ xbSql sql( x );
std::cout << "ExecSqlNonQuery\n";
char sSql[2048];
@@ -504,7 +518,7 @@ void xbUtil::ExecSqlNonQuery(){
std::cin.getline( sSql, 2048 );
xbInt16 iRc = sql.ExecuteNonQuery( sSql );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::ExecSqlQuery(){
@@ -681,7 +695,7 @@ void xbUtil::LockDbf(){
xbInt16 iRc;
std::cout << std::endl << "Lock Table" << std::endl;
iRc = dActiveTable->LockTable( XB_LOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::LockAppend(){
@@ -696,7 +710,7 @@ void xbUtil::LockAppend(){
xbInt16 iRc;
std::cout << std::endl << "Lock Append" << std::endl;
iRc = dActiveTable->LockAppend( XB_LOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::UnlockAppend(){
@@ -711,7 +725,7 @@ void xbUtil::UnlockAppend(){
xbInt16 iRc;
std::cout << std::endl << "Unlock Append" << std::endl;
iRc = dActiveTable->LockAppend( XB_UNLOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
#ifdef XB_MEMO_SUPPORT
void xbUtil::LockMemo(){
@@ -726,7 +740,7 @@ void xbUtil::LockMemo(){
xbInt16 iRc;
std::cout << std::endl << "Lock Memo" << std::endl;
iRc = dActiveTable->LockMemo( XB_LOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::UnlockMemo(){
@@ -741,7 +755,7 @@ void xbUtil::UnlockMemo(){
xbInt16 iRc;
std::cout << std::endl << "Unlock Memo" << std::endl;
iRc = dActiveTable->LockMemo( XB_UNLOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
#endif
@@ -760,8 +774,10 @@ void xbUtil::LockRecord(){
char cBuf[15];
std::cin.getline( cBuf, 15 );
- iRc = dActiveTable->LockRecord( XB_LOCK, atol( cBuf ));
- x.DisplayError( iRc );
+ //iRc = dActiveTable->LockRecord( XB_LOCK, atol( cBuf ));
+ iRc = dActiveTable->LockRecord( XB_LOCK, strtoul( cBuf, NULL, 0 ));
+
+ x->DisplayError( iRc );
}
void xbUtil::UnlockRecord(){
@@ -779,8 +795,9 @@ void xbUtil::UnlockRecord(){
char cBuf[15];
std::cin.getline( cBuf, 15 );
- iRc = dActiveTable->LockRecord( XB_UNLOCK, atol( cBuf ));
- x.DisplayError( iRc );
+ //iRc = dActiveTable->LockRecord( XB_UNLOCK, atol( cBuf ));
+ iRc = dActiveTable->LockRecord( XB_UNLOCK, strtoul( cBuf, NULL, 0 ));
+ x->DisplayError( iRc );
}
void xbUtil::UnlockDbf(){
@@ -796,7 +813,7 @@ void xbUtil::UnlockDbf(){
xbInt16 iRc;
std::cout << std::endl << "Unlock Table" << std::endl;
iRc = dActiveTable->LockTable( XB_UNLOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::UnlockHeader(){
@@ -812,7 +829,7 @@ void xbUtil::UnlockHeader(){
xbInt16 iRc;
std::cout << std::endl << "Unlock Table Header" << std::endl;
iRc = dActiveTable->LockHeader( XB_UNLOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::LockHeader(){
@@ -826,7 +843,7 @@ void xbUtil::LockHeader(){
xbInt16 iRc;
std::cout << std::endl << "Lock Table Header" << std::endl;
iRc = dActiveTable->LockHeader( XB_LOCK );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
#ifdef XB_DEBUG_SUPPORT
@@ -860,7 +877,7 @@ void xbUtil::xbFileLock(){
s1 = cBufLen;
s1.CvtLongLong( llLen );
xbInt16 iRc = dActiveTable->xbLock( XB_LOCK, llSpos, (size_t) llLen );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::xbFileUnlock(){
@@ -884,7 +901,7 @@ void xbUtil::xbFileUnlock(){
}
xbInt16 iRc;
iRc = dActiveTable->xbLock( XB_UNLOCK, atol( cBufOffset ), (size_t) atol( cBufLen ));
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
#endif
@@ -968,7 +985,7 @@ void xbUtil::UpdateFieldData(){
std::cin.getline( cFldData, 256 );
if(( rc = dActiveTable->PutField( cFldName, cFldData )) != XB_NO_ERROR ){
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
std::cout << "Success" << std::endl;
@@ -999,9 +1016,10 @@ void xbUtil::ShowMemoFieldData(){
std::cout << "Record number not entered" << std::endl;
return;
}
- ulRecNo = atol( cBuf );
+ //ulRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
}
@@ -1009,12 +1027,12 @@ void xbUtil::ShowMemoFieldData(){
std::cin.getline( cFldName, 40 );
if(( rc = dActiveTable->GetMemoField( cFldName, sMemoData )) != XB_NO_ERROR ){
std::cout << "rc = " << rc << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
if(( rc = dActiveTable->GetMemoFieldLen( cFldName, ulFldLen )) != XB_NO_ERROR ){
std::cout << "rc = " << rc << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
std::cout << sMemoData.Str() << std::endl;
@@ -1047,9 +1065,10 @@ void xbUtil::UpdateMemoFieldData(){
std::cout << "Record number not entered" << std::endl;
return;
}
- ulRecNo = atol( cBuf );
+ //ulRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
}
@@ -1059,13 +1078,13 @@ void xbUtil::UpdateMemoFieldData(){
std::cin.getline( cMemoData, 2048 );
if(( rc = dActiveTable->UpdateMemoField( cFldName, cMemoData )) != XB_NO_ERROR ){
std::cout << "rc = " << rc << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
if(( rc = dActiveTable->PutRecord( dActiveTable->GetCurRecNo())) != XB_NO_ERROR ){
std::cout << "rc = " << rc << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
}
@@ -1098,9 +1117,10 @@ void xbUtil::DeleteMemoField(){
std::cout << "Record number not entered" << std::endl;
return;
}
- ulRecNo = atol( cBuf );
+ //ulRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
}
@@ -1108,12 +1128,12 @@ void xbUtil::DeleteMemoField(){
std::cin.getline( cFldName, 40 );
if(( rc = dActiveTable->UpdateMemoField( cFldName, "" )) != XB_NO_ERROR ){
std::cout << "rc = " << rc << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
if(( rc = dActiveTable->PutRecord( dActiveTable->GetCurRecNo())) != XB_NO_ERROR ){
std::cout << "rc = " << rc << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
}
@@ -1123,13 +1143,13 @@ void xbUtil::SelectActiveTable(){
char cBuf[15];
xbInt16 iLineNo;
- if( x.GetOpenTableCount() == 0 ){
+ if( x->GetOpenTableCount() == 0 ){
std::cout << "No open tables" << std::endl;
std::cout << "Use menu option =3.4 to open a table" << std::endl;
return;
}
- x.DisplayTableList();
+ x->DisplayTableList();
std::cout << std::endl << "Enter line number:" << std::endl;
std::cin.getline( cBuf, 15 );
if( strlen( cBuf ) == 0 ){
@@ -1137,7 +1157,7 @@ void xbUtil::SelectActiveTable(){
return;
}
iLineNo = atoi( cBuf );
- dActiveTable = x.GetDbfPtr( iLineNo );
+ dActiveTable = x->GetDbfPtr( iLineNo );
}
/*************************************************************************************/
@@ -1157,7 +1177,7 @@ void xbUtil::CommitRecord(){
if(( rc = dActiveTable->Commit()) == XB_NO_ERROR )
std::cout << "Success" << std::endl;
else
- x.DisplayError( rc );
+ x->DisplayError( rc );
}
/*************************************************************************************/
void xbUtil::AbortRecord(){
@@ -1176,14 +1196,14 @@ void xbUtil::AbortRecord(){
if(( rc = dActiveTable->Abort()) == XB_NO_ERROR )
std::cout << "Success" << std::endl;
else
- x.DisplayError( rc );
+ x->DisplayError( rc );
}
/*************************************************************************************/
void xbUtil::DumpRecord(){
char cBuf[15];
xbInt16 rc;
- xbUInt32 lRecNo;
+ xbUInt32 ulRecNo;
if( !dActiveTable )
dActiveTable = GetTablePtr( " - select table" );
if( !dActiveTable ){
@@ -1199,9 +1219,10 @@ void xbUtil::DumpRecord(){
std::cout << "Record number not entered" << std::endl;
return;
}
- lRecNo = atol( cBuf );
- if(( rc = dActiveTable->GetRecord( lRecNo )) != XB_NO_ERROR ){
- x.DisplayError( rc );
+ //lRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
return;
}
}
@@ -1209,7 +1230,7 @@ void xbUtil::DumpRecord(){
if(( rc = dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2 )) == XB_NO_ERROR )
std::cout << "Success" << std::endl;
else
- x.DisplayError( rc );
+ x->DisplayError( rc );
}
/*************************************************************************************/
void xbUtil::GetFirstRecord(){
@@ -1227,7 +1248,7 @@ void xbUtil::GetFirstRecord(){
if(( iRc = dActiveTable->GetFirstRecord()) == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
/*************************************************************************************/
void xbUtil::GetNextRecord(){
@@ -1242,7 +1263,7 @@ void xbUtil::GetNextRecord(){
if(( iRc = dActiveTable->GetNextRecord()) == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
/*************************************************************************************/
void xbUtil::GetPrevRecord(){
@@ -1257,7 +1278,7 @@ void xbUtil::GetPrevRecord(){
if(( iRc = dActiveTable->GetPrevRecord()) == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
/*************************************************************************************/
void xbUtil::GetLastRecord(){
@@ -1274,15 +1295,15 @@ void xbUtil::GetLastRecord(){
if(( iRc = dActiveTable->GetLastRecord()) == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(),2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
/*************************************************************************************/
void xbUtil::UndeleteRecord(){
- char cBuf[15];
- xbInt16 rc;
- xbUInt32 lRecNo;
+ char cBuf[15];
+ xbInt16 rc;
+ xbUInt32 ulRecNo;
if( !dActiveTable )
dActiveTable = GetTablePtr( " - select table" );
@@ -1292,7 +1313,6 @@ void xbUtil::UndeleteRecord(){
return;
}
DisplayActiveTable();
-
if( dActiveTable->GetCurRecNo() == 0 ){
std::cout << "Enter Record number" << std::endl;
std::cin.getline( cBuf, 15 );
@@ -1300,29 +1320,30 @@ void xbUtil::UndeleteRecord(){
std::cout << "Record number not entered" << std::endl;
return;
}
- lRecNo = atol( cBuf );
- if(( rc = dActiveTable->GetRecord( lRecNo )) != XB_NO_ERROR ){
- x.DisplayError( rc );
+ //lRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
return;
}
}
-
if(( dActiveTable->RecordDeleted()) == xbFalse )
std::cout << "Record is not flagged for deletion" << std::endl;
else{
if(( rc = dActiveTable->UndeleteRecord()) == XB_NO_ERROR )
std::cout << "Success" << std::endl;
else
- x.DisplayError( rc );
+ x->DisplayError( rc );
}
}
/*************************************************************************************/
void xbUtil::DeleteRecord(){
- char cBuf[15];
- xbInt16 rc;
- xbUInt32 lRecNo;
+ char cBuf[15];
+ xbInt16 rc;
+ xbUInt32 ulRecNo;
+
if( !dActiveTable )
dActiveTable = GetTablePtr( " - select table" );
if( !dActiveTable ){
@@ -1337,9 +1358,11 @@ void xbUtil::DeleteRecord(){
std::cout << "Record number not entered" << std::endl;
return;
}
- lRecNo = atol( cBuf );
- if(( rc = dActiveTable->GetRecord( lRecNo )) != XB_NO_ERROR ){
- x.DisplayError( rc );
+ //ulRecNo = atol( cBuf );
+
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->GetRecord( ulRecNo )) != XB_NO_ERROR ){
+ x->DisplayError( rc );
return;
}
}
@@ -1350,16 +1373,16 @@ void xbUtil::DeleteRecord(){
if(( rc = dActiveTable->DeleteRecord()) == XB_NO_ERROR )
std::cout << "Success" << std::endl;
else
- x.DisplayError( rc );
+ x->DisplayError( rc );
}
}
/*************************************************************************************/
void xbUtil::PutRecord(){
- char cBuf[15];
- xbInt16 rc;
- xbUInt32 lRecNo;
+ char cBuf[15];
+ xbInt16 rc;
+ xbUInt32 ulRecNo;
if( !dActiveTable )
dActiveTable = GetTablePtr( " - select table" );
@@ -1376,11 +1399,12 @@ void xbUtil::PutRecord(){
std::cout << "Record number not entered" << std::endl;
return;
}
- lRecNo = atol( cBuf );
- if(( rc = dActiveTable->PutRecord( lRecNo )) == XB_NO_ERROR )
+ //lRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( rc = dActiveTable->PutRecord( ulRecNo )) == XB_NO_ERROR )
std::cout << "Success" << std::endl;
else
- x.DisplayError( rc );
+ x->DisplayError( rc );
}
/*************************************************************************************/
@@ -1396,7 +1420,7 @@ void xbUtil::AppendRecord(){
if(( rc = dActiveTable->AppendRecord()) == XB_NO_ERROR )
std::cout << "Success" << std::endl;
else
- x.DisplayError( rc );
+ x->DisplayError( rc );
}
/*************************************************************************************/
@@ -1412,7 +1436,7 @@ void xbUtil::BlankRecord(){
if(( rc = dActiveTable->BlankRecord()) == XB_NO_ERROR )
std::cout << "Success" << std::endl;
else
- x.DisplayError( rc );
+ x->DisplayError( rc );
}
/*************************************************************************************/
@@ -1449,16 +1473,14 @@ void xbUtil::RenameTable(){
dActiveTable = NULL;
std::cout << "Table closed. Reopen if needed.\n";
}
-
-
}
/*************************************************************************************/
void xbUtil::GetRecord(){
- char cBuf[15];
- xbInt16 iRc;
- xbUInt32 lRecNo;
+ char cBuf[15];
+ xbInt16 iRc;
+ xbUInt32 ulRecNo;
if( !dActiveTable )
dActiveTable = GetTablePtr( " - select table" );
@@ -1476,11 +1498,12 @@ void xbUtil::GetRecord(){
std::cout << "Record number not entered" << std::endl;
return;
}
- lRecNo = atol( cBuf );
- if(( iRc = dActiveTable->GetRecord( lRecNo )) == XB_NO_ERROR )
+ //lRecNo = atol( cBuf );
+ ulRecNo = strtoul( cBuf, NULL, 0 );
+ if(( iRc = dActiveTable->GetRecord( ulRecNo )) == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
/*************************************************************************************/
void xbUtil::DisplayActiveTable() const{
@@ -1513,7 +1536,7 @@ void xbUtil::DisplayActiveTable() const{
xbDbf * xbUtil::GetTablePtr( const char * cTitle ){
xbDbf *d;
- xbInt16 iOpenTableCnt = x.GetOpenTableCount();
+ xbInt16 iOpenTableCnt = x->GetOpenTableCount();
char cBuf[15];
xbInt16 iLineNo;
@@ -1521,10 +1544,10 @@ xbDbf * xbUtil::GetTablePtr( const char * cTitle ){
std::cout << "No open tables" << std::endl;
return NULL;
} else if( iOpenTableCnt == 1 ){
- d = x.GetDbfPtr( 1 );
+ d = x->GetDbfPtr( 1 );
} else {
std::cout << "Select file/table " << cTitle << std::endl;
- x.DisplayTableList();
+ x->DisplayTableList();
std::cout << std::endl << "Enter line number:" << std::endl;
memset( cBuf, 0x00, 15 );
std::cin.getline( cBuf, 15 );
@@ -1537,7 +1560,7 @@ xbDbf * xbUtil::GetTablePtr( const char * cTitle ){
std::cout << "Invalid selection. Valid line numbers are 1 through " << iOpenTableCnt << std::endl;
return NULL;
}
- d = x.GetDbfPtr( iLineNo );
+ d = x->GetDbfPtr( iLineNo );
}
return d;
}
@@ -1551,7 +1574,7 @@ void xbUtil::UpdateTableAutoCommit(){
std::cout << " If unsure, leave the option turned on at the DBMS level (default)" << std::endl;
std::cout << " and don't over ride the setting at the table level" << std::endl << std::endl;
std::cout << " -1 ==> Use DBMS setting which is currently [";
- if( x.GetDefaultAutoCommit() )
+ if( x->GetDefaultAutoCommit() )
std::cout << "ON]" << std::endl;
else
std::cout << "OFF]" << std::endl;
@@ -1584,7 +1607,7 @@ void xbUtil::CopyDbfStructure(){
xbDbf *d;
xbInt16 rc;
char filename[128];
- xbFile f( &x );
+ xbFile f( x );
xbDbf *dNewTable;
d = GetTablePtr( "" );
@@ -1592,14 +1615,14 @@ void xbUtil::CopyDbfStructure(){
if( d->GetVersion() == 3 ){
#ifdef XB_DBF3_SUPPORT
- dNewTable = new xbDbf3( &x );
+ dNewTable = new xbDbf3( x );
#else
std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
return;
#endif
} else if( d->GetVersion() == 4 ){
#ifdef XB_DBF4_SUPPORT
- dNewTable = new xbDbf4( &x );
+ dNewTable = new xbDbf4( x );
#else
std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
return;
@@ -1622,13 +1645,13 @@ void xbUtil::CopyDbfStructure(){
}
if(( rc = d->CopyDbfStructure( dNewTable, filename, filename, 0, XB_MULTI_USER )) != XB_NO_ERROR ){
std::cout << "Error " << rc << " creating new file" << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
std::cout << "Table " << f.GetFqFileName().Str() << " created" << std::endl;
if(( rc = dNewTable->Close()) != XB_NO_ERROR ){
std::cout << "Error " << rc << " closing new file" << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
}
@@ -1649,7 +1672,7 @@ void xbUtil::ZapTable(){
if( iRc == XB_NO_ERROR )
std::cout << "Table Zapped (all rows deleted)" << std::endl;
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
/*************************************************************************************/
void xbUtil::Pack(){
@@ -1666,7 +1689,7 @@ void xbUtil::Pack(){
if( iRc == XB_NO_ERROR )
std::cout << "Table Packed" << std::endl;
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
/*************************************************************************************/
void xbUtil::DisplayTableStats(){
@@ -1699,7 +1722,7 @@ void xbUtil::DisplayTableStats(){
// DBMS settings
if( d->GetAutoCommit( 0 ) == -1 ){
std::cout << "Table Auto Commit = [Use DBMS Setting]" << std::endl;
- if( x.GetDefaultAutoCommit() )
+ if( x->GetDefaultAutoCommit() )
std::cout << "DBMS Auto Commit = [ON]" << std::endl;
else
std::cout << "DBMS Auto Commit = [OFF]" << std::endl;
@@ -1714,24 +1737,24 @@ void xbUtil::DisplayTableStats(){
/*************************************************************************************/
void xbUtil::CloseAllTables(){
- xbInt16 sOpenTableCnt = x.GetOpenTableCount();
+ xbInt16 sOpenTableCnt = x->GetOpenTableCount();
xbInt16 rc;
if( sOpenTableCnt == 0 ){
std::cout << "No open tables" << std::endl;
return;
}
- rc = x.CloseAllTables();
+ rc = x->CloseAllTables();
if( rc == XB_NO_ERROR )
std::cout << "All open tables closed" << std::endl;
else
- x.DisplayError( rc );
+ x->DisplayError( rc );
dActiveTable = NULL;
}
/*************************************************************************************/
void xbUtil::Close(){
xbDbf *d;
-// xbInt16 sOpenTableCnt = x.GetOpenTableCount();
+// xbInt16 sOpenTableCnt = x->GetOpenTableCount();
d = GetTablePtr( "to close" );
if( d ){
@@ -1746,7 +1769,7 @@ void xbUtil::Close(){
/*************************************************************************************/
void xbUtil::Open(){
xbInt16 rc;
- xbFile f( &x );
+ xbFile f( x );
xbDbf *dTable;
char filename[128];
unsigned char cFileTypeByte;
@@ -1766,18 +1789,18 @@ void xbUtil::Open(){
}
if(( rc = f.GetXbaseFileTypeByte( f.GetFqFileName(), cFileTypeByte )) != XB_NO_ERROR ){
std::cout << "Could not open file or determine file type rc = " << rc << " file = " << filename << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
std:: cout << "File Type Byte ";
- x.BitDump( cFileTypeByte );
+ x->BitDump( cFileTypeByte );
std::cout << "\n";
std::cout << "Table Type = [" << f.DetermineXbaseTableVersion( cFileTypeByte ) << "]\n";
std::cout << "Memo Type = [" << f.DetermineXbaseMemoVersion( cFileTypeByte ) << "]\n";
if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 4 ){
#ifdef XB_DBF4_SUPPORT
- dTable = new xbDbf4( &x );
+ dTable = new xbDbf4( x );
#else
std::cout << "Dbase IV file support not build into library. See XB_DBF4_SUPPORT" << std::endl;
return;
@@ -1785,21 +1808,21 @@ void xbUtil::Open(){
} else if( f.DetermineXbaseTableVersion( cFileTypeByte ) == 3 ){
#ifdef XB_DBF3_SUPPORT
- dTable = new xbDbf3( &x );
+ dTable = new xbDbf3( x );
#else
std::cout << "Dbase III file support not build into library. See XB_DBF3_SUPPORT" << std::endl;
return;
#endif
} else {
std::cout << "Unsupported file type file = " << filename << " type = ";
- x.BitDump( cFileTypeByte );
+ x->BitDump( cFileTypeByte );
std::cout << std::endl;
return;
}
if(( rc = dTable->Open( filename )) != 0 ){
std::cout << "Could not open file rc = " << rc << " file = " << filename << std::endl;
- x.DisplayError( rc );
+ x->DisplayError( rc );
return;
}
@@ -1821,9 +1844,9 @@ void xbUtil::UpdateDefaultLockRetries(){
std::cout << "Default Lock Retry Count not updated" << std::endl;
return;
} else {
- x.SetDefaultLockRetries( atoi( cBuf ));
+ x->SetDefaultLockRetries( atoi( cBuf ));
std::cout << "Default Lock Retry Count updated to ["
- << x.GetDefaultLockRetries() << "]" << std::endl;
+ << x->GetDefaultLockRetries() << "]" << std::endl;
}
}
@@ -1835,9 +1858,9 @@ void xbUtil::UpdateDefaultLockWait(){
std::cout << "Default Lock Wait Time not updated" << std::endl;
return;
} else {
- x.SetDefaultLockWait( atoi( cBuf ));
+ x->SetDefaultLockWait( atoi( cBuf ));
std::cout << "Default Lock Wait Time updated to ["
- << x.GetDefaultLockWait() << "]" << std::endl;
+ << x->GetDefaultLockWait() << "]" << std::endl;
}
}
@@ -1854,38 +1877,38 @@ void xbUtil::UpdateDefaultLockFlavor(){
std::cout << "Default Lock Flavor not updated" << std::endl;
return;
} else {
- x.SetDefaultLockFlavor( atoi( cBuf ));
+ x->SetDefaultLockFlavor( atoi( cBuf ));
std::cout << "Default Lock Flavor updated to ["
- << x.GetDefaultLockFlavor() << "]" << std::endl;
+ << x->GetDefaultLockFlavor() << "]" << std::endl;
}
}
void xbUtil::ToggleDefaultAutoLock(){
- if( x.GetDefaultAutoLock()){
- x.DisableDefaultAutoLock();
- x.WriteLogMessage( "xb_dbfutil - Default Auto Lock disabled" );
+ if( x->GetDefaultAutoLock()){
+ x->DisableDefaultAutoLock();
+ x->WriteLogMessage( "xb_dbfutil - Default Auto Lock disabled" );
std::cout << "Default Auto Lock disabled" << std::endl;
} else {
- x.EnableDefaultAutoLock();
- x.WriteLogMessage( "xb_dbfutil - Default Auto Lock enabled" );
+ x->EnableDefaultAutoLock();
+ x->WriteLogMessage( "xb_dbfutil - Default Auto Lock enabled" );
std::cout << "Default Auto Lock enabled" << std::endl;
}
}
void xbUtil::ToggleMultiUserMode(){
- if( x.GetMultiUser()){
- x.SetMultiUser( xbFalse );
- x.WriteLogMessage( "xb_dbfutil - Multi user mode disabled" );
+ if( x->GetMultiUser()){
+ x->SetMultiUser( xbFalse );
+ x->WriteLogMessage( "xb_dbfutil - Multi user mode disabled" );
std::cout << "Multi user mode disabled" << std::endl;
} else {
- x.SetMultiUser( xbTrue );
- x.WriteLogMessage( "xb_dbfutil - Multu user mode enabled" );
+ x->SetMultiUser( xbTrue );
+ x->WriteLogMessage( "xb_dbfutil - Multu user mode enabled" );
std::cout << "Multi user mode enabled" << std::endl;
}
}
#endif
/*************************************************************************************/
void xbUtil::ListFilesInDataDirectory(){
- std::cout << "List files for [" << x.GetDataDirectory().Str() << "]" << std::endl << std::endl;
+ std::cout << "List files for [" << x->GetDataDirectory().Str() << "]" << std::endl << std::endl;
xbString s1;
xbInt16 iCnt = 0;
@@ -1894,7 +1917,7 @@ void xbUtil::ListFilesInDataDirectory(){
WIN32_FIND_DATA fData;
HANDLE hFile;
- xbString sSearchPath = x.GetDataDirectory();
+ xbString sSearchPath = x->GetDataDirectory();
xbUInt32 l = sSearchPath.Len();
char cPathSeperator = sSearchPath.GetPathSeparator();
char cLastChar = sSearchPath.GetCharacter( l );
@@ -1926,7 +1949,7 @@ void xbUtil::ListFilesInDataDirectory(){
DIR *dir;
struct dirent *ent;
- if(( dir = opendir( x.GetDataDirectory() )) != NULL ){
+ if(( dir = opendir( x->GetDataDirectory() )) != NULL ){
while(( ent = readdir( dir )) != NULL ){
s1 = ent->d_name;
if( s1 != "." && s1 != ".." ){
@@ -1947,20 +1970,20 @@ void xbUtil::UpdateLogDirectory(){
char cNewDir[256];
cNewDir[0] = 0x00;
std::cout << std::endl << "Update Log Directory" << std::endl;
- std::cout << "Current Log File Directory = [" << x.GetLogDirectory().Str() << "]" << std::endl;
+ std::cout << "Current Log File Directory = [" << x->GetLogDirectory().Str() << "]" << std::endl;
std::cout << "Enter '1' to erase the Log File Directory" << std::endl;
- std::cout << "Enter '2' to change Log File Directory to [" << x.GetDefaultLogDirectory().Str() << "]" << std::endl;
+ std::cout << "Enter '2' to change Log File Directory to [" << x->GetLogDirectory().Str() << "]" << std::endl;
std::cout << "Enter new log directory. Enter for no updates." << std::endl;
std::cin.getline( cNewDir, 256 );
if( strlen( cNewDir ) > 0 ){
if( cNewDir[0] == '1' )
- x.SetLogDirectory( "" );
+ x->SetLogDirectory( "" );
else if( cNewDir[0] == '2' )
- x.SetLogDirectory( x.GetDefaultLogDirectory());
+ x->SetLogDirectory( x->GetLogDirectory());
else
- x.SetLogDirectory( cNewDir );
+ x->SetLogDirectory( cNewDir );
- std::cout << "Log File Directory is [" << x.GetLogDirectory().Str() << "]" << std::endl;
+ std::cout << "Log File Directory is [" << x->GetLogDirectory().Str() << "]" << std::endl;
}
else
std::cout << "Log Directory not updated" << std::endl;
@@ -1971,51 +1994,51 @@ void xbUtil::UpdateLogFileName(){
cNewFile[0] = 0x00;
std::cout << std::endl << "Update Log File Name" << std::endl;
- std::cout << "Current Log File Name = [" << x.GetLogFileName().Str() << "]" << std::endl;
- std::cout << "Enter '1' to change change Log File Name to default [" << x.GetDefaultLogFileName().Str() << "]" << std::endl;
+ std::cout << "Current Log File Name = [" << x->GetLogFileName().Str() << "]" << std::endl;
+ std::cout << "Enter '1' to change change Log File Name to default [" << x->GetLogFileName().Str() << "]" << std::endl;
std::cout << "Enter new Log File Name" << std::endl;
std::cin.getline( cNewFile, 256 );
if( strlen( cNewFile ) > 0 ){
if( cNewFile[0] == '1' )
- x.SetLogFileName( x.GetDefaultLogFileName());
+ x->SetLogFileName( x->GetLogFileName());
else
- x.SetLogFileName( cNewFile );
+ x->SetLogFileName( cNewFile );
- std::cout << "Log File Name is [" << x.GetLogFileName().Str() << "]" << std::endl;
+ std::cout << "Log File Name is [" << x->GetLogFileName().Str() << "]" << std::endl;
} else
std::cout << "Log File Name not updated" << std::endl;
}
/*************************************************************************************/
void xbUtil::WriteLogMessage(){
- if( x.GetLogStatus()) {
+ if( x->GetLogStatus()) {
char cMsg[256];
std::cout << "Enter a message to write to the log file (256 byte max)" << std::endl;
std::cin.getline( cMsg, 256 );
- x.WriteLogMessage( cMsg );
+ x->WriteLogMessage( cMsg );
} else
std::cout << "Logging disabled" << std::endl;
}
/*************************************************************************************/
void xbUtil::ToggleLoggingStatus(){
- if( x.GetLogStatus()){
- x.DisableMsgLogging();
- x.WriteLogMessage( "xb_dbfutil - Logging disabled" );
+ if( x->GetLogStatus()){
+ x->DisableMsgLogging();
+ x->WriteLogMessage( "xb_dbfutil - Logging disabled" );
std::cout << "Logging disabled" << std::endl;
} else {
- x.EnableMsgLogging();
- x.WriteLogMessage( "xb_dbfutil - Logging enabled" );
+ x->EnableMsgLogging();
+ x->WriteLogMessage( "xb_dbfutil - Logging enabled" );
std::cout << "Logging enabled" << std::endl;
}
}
/*************************************************************************************/
void xbUtil::ToggleDefaultAutoCommit(){
- if( x.GetDefaultAutoCommit()){
- x.SetDefaultAutoCommit( xbFalse );
- x.WriteLogMessage( "xb_dbfutil - Default Auto Commit disabled" );
+ if( x->GetDefaultAutoCommit()){
+ x->SetDefaultAutoCommit( xbFalse );
+ x->WriteLogMessage( "xb_dbfutil - Default Auto Commit disabled" );
std::cout << "Default Auto Commit disabled" << std::endl;
} else {
- x.SetDefaultAutoCommit( xbTrue );
- x.WriteLogMessage( "xb_dbfutil - Default Auto Commit enabled" );
+ x->SetDefaultAutoCommit( xbTrue );
+ x->WriteLogMessage( "xb_dbfutil - Default Auto Commit enabled" );
std::cout << "Default Auto Commit enabled" << std::endl;
}
}
@@ -2024,19 +2047,19 @@ void xbUtil::UpdateDataDirectory(){
char cNewDir[256];
cNewDir[0] = 0x00;
std::cout << std::endl << "Update Default Data Directory" << std::endl;
- std::cout << "Current Default Data Directory = [" << x.GetDataDirectory().Str() << "]" << std::endl;
+ std::cout << "Current Default Data Directory = [" << x->GetDataDirectory().Str() << "]" << std::endl;
std::cout << "Enter '1' to erase the Default Data Directory" << std::endl;
std::cout << "Enter '2' to change Default Data Directory to [" << PROJECT_DATA_DIR << "]" << std::endl;
std::cout << "Enter new directory" << std::endl;
std::cin.getline( cNewDir, 256 );
if( strlen( cNewDir ) > 0 ){
if( cNewDir[0] == '1' )
- x.SetDataDirectory( "" );
+ x->SetDataDirectory( "" );
else if( cNewDir[0] == '2' )
- x.SetDataDirectory( PROJECT_DATA_DIR );
+ x->SetDataDirectory( PROJECT_DATA_DIR );
else
- x.SetDataDirectory( cNewDir );
- std::cout << "Default Data Directory is [" << x.GetDataDirectory().Str() << "]" << std::endl;
+ x->SetDataDirectory( cNewDir );
+ std::cout << "Default Data Directory is [" << x->GetDataDirectory().Str() << "]" << std::endl;
}
else
std::cout << "Default Data Directory not updated" << std::endl;
@@ -2044,20 +2067,20 @@ void xbUtil::UpdateDataDirectory(){
/*************************************************************************************/
void xbUtil::ListSystemSettings(){
std::cout << std::endl << "List System Settings" << std::endl;
- std::cout << "Default Data Directory = [" << x.GetDataDirectory().Str() << "]" << std::endl;
-// std::cout << "Default File Version = [" << x.GetDefaultFileVersion() << "]" << std::endl;
+ std::cout << "Default Data Directory = [" << x->GetDataDirectory().Str() << "]" << std::endl;
+// std::cout << "Default File Version = [" << x->GetDefaultFileVersion() << "]" << std::endl;
#ifdef XB_LOCKING_SUPPORT
std::cout << "Default Auto Locking = [";
- if( x.GetDefaultAutoLock())
+ if( x->GetDefaultAutoLock())
std::cout << "ON]" << std::endl;
else
std::cout << "OFF]" << std::endl;
- std::cout << "Default Lock Retries = [" << x.GetDefaultLockRetries() << "]" << std::endl;
- std::cout << "Default Lock Wait Time = [" << x.GetDefaultLockWait() << "] (millisecs)" << std::endl;
+ std::cout << "Default Lock Retries = [" << x->GetDefaultLockRetries() << "]" << std::endl;
+ std::cout << "Default Lock Wait Time = [" << x->GetDefaultLockWait() << "] (millisecs)" << std::endl;
std::cout << "Default Lock Flavor = [";
- switch (x.GetDefaultLockFlavor()){
+ switch (x->GetDefaultLockFlavor()){
case 1:
std::cout << "Dbase]" << std::endl;
break;
@@ -2075,26 +2098,26 @@ void xbUtil::ListSystemSettings(){
break;
}
#endif
- std::cout << "Default Log Directory = [" << x.GetDefaultLogDirectory().Str() << "]" << std::endl;
- std::cout << "Default Logfile Name = [" << x.GetDefaultLogFileName().Str() << "]" << std::endl;
+ std::cout << "Log Directory = [" << x->GetLogDirectory().Str() << "]" << std::endl;
+ std::cout << "Logfile Name = [" << x->GetLogFileName().Str() << "]" << std::endl;
std::cout << "Default Auto Commit = [";
- if( x.GetDefaultAutoCommit())
+ if( x->GetDefaultAutoCommit())
std::cout << "ON]" << std::endl;
else
std::cout << "OFF]" << std::endl;
std::cout << "Logging Status = [";
- if( x.GetLogStatus())
+ if( x->GetLogStatus())
std::cout << "ON]" << std::endl;
else
std::cout << "OFF]" << std::endl;
std::cout << "Endian Type = [";
- if( x.GetEndianType() == 'L' )
+ if( x->GetEndianType() == 'L' )
std::cout << "Little Endian]" << std::endl;
else
std::cout << "Big Endian]" << std::endl;
- if( x.GetMultiUser())
+ if( x->GetMultiUser())
std::cout << "Multi User Mode = [ON]";
else
std::cout << "Multi User Mode = [OFF]";
@@ -2109,7 +2132,9 @@ void xbUtil::ProcessOption( const xbString &sOption ){
else if( sOption == "=0.99" )
// exit right now, now cleanup or termination of anything
exit(0);
- else if( sOption == "=2" )
+ else if( sOption == "=1" )
+ Help();
+ else if( sOption == "=2" )
SystemMenu();
else if( sOption == "=2.1" )
ListSystemSettings();
@@ -2144,7 +2169,7 @@ void xbUtil::ProcessOption( const xbString &sOption ){
else if( sOption == "=3.2" )
UpdateDataDirectory();
else if( sOption == "=3.3" )
- x.DisplayTableList();
+ x->DisplayTableList();
else if( sOption == "=3.4" )
Open();
else if( sOption == "=3.5" )
@@ -2808,7 +2833,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;
@@ -2963,6 +2988,7 @@ void xbUtil::MainMenu()
option = GetOption();
switch( option ){
case 0: break;
+ case 1: Help(); break;
case 2: SystemMenu(); break;
case 3: FileMenu(); break;
case 4: RecordMenu(); break;
@@ -3114,7 +3140,7 @@ void xbUtil::OpenIndex(){
xbString sIxFileName = cBuf;
iRc = dActiveTable->OpenIndex( sIxType, sIxFileName );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::CloseIndexFile(){
@@ -3141,7 +3167,7 @@ void xbUtil::CloseIndexFile(){
}
xbInt16 iRc = dActiveTable->CloseIndexFile( pIx );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::CreateIndexTag(){
@@ -3227,7 +3253,7 @@ void xbUtil::CreateIndexTag(){
void *vpTag;
xbInt16 iRc = dActiveTable->CreateTag( sIxType, sIxName, sKeyExpression, sFilter, iDescending, iUnique, 0, &pIx, &vpTag );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::GetFirstKey(){
@@ -3252,7 +3278,7 @@ void xbUtil::GetFirstKey(){
if( iRc == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::GetNextKey(){
@@ -3277,7 +3303,7 @@ void xbUtil::GetNextKey(){
if( iRc == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::GetPrevKey(){
@@ -3303,7 +3329,7 @@ void xbUtil::GetPrevKey(){
if( iRc == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::GetLastKey(){
@@ -3328,7 +3354,7 @@ void xbUtil::GetLastKey(){
if( iRc == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::FindKey(){
@@ -3387,7 +3413,7 @@ void xbUtil::FindKey(){
if( iRc == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::CheckIntegrity(){
@@ -3410,7 +3436,7 @@ void xbUtil::CheckIntegrity(){
void *vpCurTag = dActiveTable->GetCurTag();
xbInt16 iRc = pIx->CheckTagIntegrity( vpCurTag, 2 );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::Reindex(){
@@ -3433,7 +3459,7 @@ void xbUtil::Reindex(){
}
void *vpCurTag = dActiveTable->GetCurTag();
xbInt16 iRc = pIx->Reindex( &vpCurTag );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::DeleteTag(){
@@ -3455,7 +3481,7 @@ void xbUtil::DeleteTag(){
}
void *vpCurTag = dActiveTable->GetCurTag();
xbInt16 iRc = dActiveTable->DeleteTag( dActiveTable->GetCurIxType(), pIx->GetTagName( vpCurTag ));
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::AssociateNonProdIx(){
@@ -3494,7 +3520,7 @@ void xbUtil::DumpRecsByIx( xbInt16 iOpt ){
std::cout << "1 - 1 line per record" << std::endl;
xbInt16 iDispFmt = GetOption();
- x.WriteLogMessage( "--------- Dump Recs By Index -------------", iDispOpt );
+ x->WriteLogMessage( "--------- Dump Recs By Index -------------", iDispOpt );
void *vpCurTag = dActiveTable->GetCurTag();
xbUInt32 lRecCnt = 0;
xbInt16 iRc = 0;
@@ -3509,7 +3535,7 @@ void xbUtil::DumpRecsByIx( xbInt16 iOpt ){
lRecCnt++;
}
} else {
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
} else if( iOpt == 1 ) {
iRc = pIx->GetLastKey( vpCurTag, 1 );
@@ -3668,10 +3694,10 @@ void xbUtil::SetFilter()
if( filt )
delete filt;
- filt = new xbFilter( &x, dActiveTable );
+ filt = new xbFilter( dActiveTable );
xbInt16 iRc = filt->Set( s );
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::GetFirstFilterRec()
@@ -3689,7 +3715,7 @@ void xbUtil::GetFirstFilterRec()
if(( iRc = filt->GetFirstRecord()) == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::GetNextFilterRec()
@@ -3706,7 +3732,7 @@ void xbUtil::GetNextFilterRec()
if(( iRc = filt->GetNextRecord()) == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::GetPrevFilterRec()
@@ -3723,7 +3749,7 @@ void xbUtil::GetPrevFilterRec()
if(( iRc = filt->GetPrevRecord()) == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
void xbUtil::GetLastFilterRec()
@@ -3740,17 +3766,46 @@ void xbUtil::GetLastFilterRec()
if(( iRc = filt->GetLastRecord()) == XB_NO_ERROR )
dActiveTable->DumpRecord( dActiveTable->GetCurRecNo(), 2);
else
- x.DisplayError( iRc );
+ x->DisplayError( iRc );
}
#endif // XB_FILTER_SUPPORT
///@endcond DOXYOFF
+
+/*************************************************************************************/
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_dbfutil [-h] [-?] [--help] [-v] [--version]" << std::endl << std::endl;
+ std::cout << "This program provides a menu driven tool for accissing the functionality og the xbase64 library" << std::endl;
+ std::cout << "and provides access to DBF, MDX, NDX and MDT xbase formatted data files." << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
/*************************************************************************************/
-int main(int, char**)
+int main(int argc, char *argv[] )
{
- std::cout << "xb_dbfutil initializing" << std::endl;
- xbUtil u;
+
+ // std::cout << "xb_dbfutil initializing" << std::endl;
+ xbXBase x;
+
+ xbString sParm;
+ if (x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
+ }
+
+ xbUtil u( &x );
u.MainMenu();
return 0;
}
diff --git a/src/utils/xb_deletall.cpp b/src/utils/xb_deletall.cpp
index 720710f..3a8f6e4 100755
--- a/src/utils/xb_deletall.cpp
+++ b/src/utils/xb_deletall.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2017,2019 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2017,2019,2023 Gary A Kunkel
The xb64 software library is covered under
the terms of the GPL Version 3, 2007 license.
@@ -24,32 +24,62 @@ This program sets the delete flag on all records in a dbf file
using namespace xb;
-int main(int ac,char** av)
+
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_deleteall [-h] [-?] [--help] [-v] [--version] -i myfile" << std::endl << std::endl;
+ std::cout << "This program flags all the records in a DBF table for deletion. To physically remove the deleted records, see program xb_pack.";
+ std::cout << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+
+int main(int argc, char *argv[])
{
+
xbXBase x;
xbDbf *MyFile = NULL;
xbFile f( &x );
xbInt16 iRc = 0;
- if (ac <= 1) {
- std::cout << "\nUsage: xb_deletall filename...\n";
+ xbString sParm;
+
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
return 1;
}
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file RC = " << iRc << " file = " << sParm.Str() << std::endl;
x.DisplayError( iRc );
- return 0;
+ return 1;
}
iRc = MyFile->DeleteAllRecords();
if( iRc != XB_NO_ERROR ) {
- std::cout << "Error Deleting all records - database ==> " << av[1] << "\n";
- std::cout << " Return Code = " << iRc;
+ std::cout << "Error Deleting all records - database ==> " << sParm.Str() << "\n";
+ std::cout << "Return Code = " << iRc;
+ x.DisplayError( iRc );
+ return 1;
}
MyFile->Close();
- std::cout << "\nDone...\n\n";
-
+ delete MyFile;
return 0;
-
}
\ No newline at end of file
diff --git a/src/utils/xb_dumpdbt.cpp b/src/utils/xb_dumpdbt.cpp
index bc95ab7..05b7209 100755
--- a/src/utils/xb_dumpdbt.cpp
+++ b/src/utils/xb_dumpdbt.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2017 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2017,2023 Gary A Kunkel
The xb64 software library is covered under
the terms of the GPL Version 3, 2007 license.
@@ -16,16 +16,25 @@ Email Contact:
#include
-
using namespace xb;
-int main( int ac, char **av )
-{
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_dumpdbt [-h] [-?] [--help] [-v] [--version] -i filename.DBF" << std::endl << std::endl;
+ std::cout << "This program dumps memo record data from an xbase formatted DBT file to stdout." << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+int main(int argc, char *argv[] )
+{
-#ifdef XB_MEMO_SUPPORT
- xbXBase x;
+ #ifdef XB_MEMO_SUPPORT
+ xbXBase x;
xbInt16 iRc;
char cFieldType;
xbDbf *MyFile = NULL;
@@ -34,19 +43,33 @@ int main( int ac, char **av )
xbInt32 lBlockPtr;
xbString sMemoFldData;
- if( ac <= 1 ){
- std::cout << "\nUsage: dumpdbt filename...\n";
+ xbString sParm;
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
return 1;
}
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file iRc = " << iRc << " file = " << sParm.Str() << std::endl;
x.DisplayError( iRc );
- return 0;
+ return 1;
}
if( MyFile->GetMemoFieldCnt() == 0 ) {
- std::cout << "No memo fields exist in " << av[1] << std::endl;
+ std::cout << "No memo fields exist in " << sParm.Str() << std::endl;
} else {
xbUInt32 ulRecCnt = 0;
@@ -78,10 +101,9 @@ int main( int ac, char **av )
MyFile->Close();
delete MyFile;
}
-
-#else
- std::cout << "\nXB_MEMO_SUPPORT is OFF\n";
-#endif
+ #else
+ std::cout << "\nXB_MEMO_SUPPORT is OFF\n";
+ #endif
return 0;
}
diff --git a/src/utils/xb_dumphdr.cpp b/src/utils/xb_dumphdr.cpp
deleted file mode 100755
index 267f4c5..0000000
--- a/src/utils/xb_dumphdr.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/* xb_dumphdr.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014 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
-
-using namespace xb;
-
-int main( int ac, char ** av ){
-
-
- xbInt16 iRc;
- xbXBase x;
- xbDbf *MyFile = NULL;
-
- if( ac <= 1 ) {
- std::cout << "\nUsage: xb_dumphdr filename...\n";
- return 1;
- }
-
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;
- x.DisplayError( iRc );
- return 0;
- }
-
- MyFile->DumpHeader( 4 );
- MyFile->Close();
- delete MyFile;
-
- return 0;
-}
diff --git a/src/utils/xb_dumpix.cpp b/src/utils/xb_dumpix.cpp
deleted file mode 100755
index afd8764..0000000
--- a/src/utils/xb_dumpix.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/* xb_dumpix.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014 Gary A Kunkel
-
-The xb64 software library is covered under
-the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- xb64-devel@lists.sourceforge.net
- xb64-users@lists.sourceforge.net
-
-*/
-
-
-// This program dumps an index file's internal data blocks.
-// This program is for index development and debugging purposes
-
-
-#include
-
-using namespace xb;
-
-int main( int ac, char ** av ){
-
-
- xbInt16 iRc;
- xbXBase x;
- xbDbf *MyFile = NULL;
- x.EnableMsgLogging();
- x.SetLogSize( 1000000L );
-
- if( ac <= 1 ) {
- std::cout << "\nUsage: xb_dumphdr filename...\n";
- return 1;
- }
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;
- x.DisplayError( iRc );
- return 0;
- }
- xbIx *pIx = MyFile->GetCurIx();
- if( pIx ){
- // pIx->DumpHeader( 2, 3 );
- pIx->DumpTagBlocks( 2 );
- } else {
- std::cout << av[1] << "No current index found" << std::endl;
- }
-
- MyFile->Close();
- delete MyFile;
-
- return 0;
-}
diff --git a/src/utils/xb_dumprecs.cpp b/src/utils/xb_dumprecs.cpp
index 0a85f45..cf6e33c 100755
--- a/src/utils/xb_dumprecs.cpp
+++ b/src/utils/xb_dumprecs.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2019 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2019,2023 Gary A Kunkel
The xb64 software library is covered under
the terms of the GPL Version 3, 2007 license.
@@ -17,27 +17,57 @@ Email Contact:
#include
using namespace xb;
-int main(int ac,char** av)
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_dumprecs [-h] [-?] [--help] [-v] [--version] -i filename.DBF" << std::endl << std::endl;
+ std::cout << "This program dumps data records in an xbase formatted DBF file to stdout in csv format." << std::endl;
+ std::cout << "Memo data (variable length) is not included in this export. See program xb_dumpdpt for memo data." << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+int main(int argc, char *argv[] )
{
xbXBase x;
+
+
xbInt16 iRc;
x.EnableMsgLogging();
x.SetLogSize( 1000000L );
-// xbUInt32 ulRecCnt = 0;
- if (ac <= 1) {
- std::cout << "Usage: xb_dumprecs filename..." << std::endl;
+ xbString sParm;
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
return 1;
}
xbDbf *MyFile = NULL;
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file RC = " << iRc << " file = " << sParm.Str() << std::endl;
x.DisplayError( iRc );
- return 0;
+ return 1;
}
-// std::cout << "Processing file sequentially from beginning..." << std::endl;
+ // std::cout << "Processing file sequentially from beginning..." << std::endl;
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ MyFile->EnableBlockReadProcessing();
+ #endif
xbUInt32 j = 0;
xbUInt32 ulRecCnt = 0;
@@ -48,15 +78,21 @@ int main(int ac,char** av)
return iRc;
while( j < ulRecCnt ){
if( j == 0 )
- iRc = MyFile->DumpRecord(++j, 2, 2 );
+ iRc = MyFile->DumpRecord(++j, 2, 2 ); // header + data
else
- iRc = MyFile->DumpRecord(++j, 2, 1 );
+ iRc = MyFile->DumpRecord(++j, 2, 1 ); // data only
if( iRc != XB_NO_ERROR ){
x.DisplayError( iRc );
return 1;
}
}
-// std::cout << j << " Records written to logile" << std::endl;
+ std::cout << j << " Records processed." << std::endl;
+
+ #ifdef XB_BLOCKREAD_SUPPORT
+ MyFile->DisableBlockReadProcessing();
+ #endif
+
MyFile->Close();
+
return 0;
}
diff --git a/src/utils/xb_execsql.cpp b/src/utils/xb_execsql.cpp
index d474593..daa6b6e 100755
--- a/src/utils/xb_execsql.cpp
+++ b/src/utils/xb_execsql.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014 Gary A Kunkel
+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.
diff --git a/src/utils/xb_pack.cpp b/src/utils/xb_pack.cpp
index ccec5a3..0cbba7e 100755
--- a/src/utils/xb_pack.cpp
+++ b/src/utils/xb_pack.cpp
@@ -2,7 +2,7 @@
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2017 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2017,2023 Gary A Kunkel
The xb64 software library is covered under
the terms of the GPL Version 3, 2007 license.
@@ -17,33 +17,59 @@ Email Contact:
#include
using namespace xb;
-int main(int ac,char** av)
-{
- if (ac <= 1) {
- std::cout <<
- "\nUsage: xb_pack filename...\n"
- "\nThis program does automatically reindexes any open NDX or MDX indexes.";
- return 1;
- }
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_pack [-h] [-?] [--help] [-v] [--version] -i filename.DBF" << std::endl << std::endl;
+ std::cout << "This program removes data records that are flagged for deletion in a DBF file and rebuilds indices." << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+int main(int argc, char *argv[] )
+{
xbXBase x;
xbInt16 iRc;
xbDbf * MyFile = NULL;
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;
+
+ xbString sParm;
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
+ }
+
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file iRc = " << iRc << " file = " << sParm.Str() << std::endl;
x.DisplayError( iRc );
- return 0;
+ return 1;
}
if(( iRc = MyFile->Pack()) != XB_NO_ERROR ) {
- std::cout << "\nError packing DBF database ==> " << av[1] << std::endl;
+ std::cout << "\nError packing DBF database ==> " << sParm.Str() << std::endl;
std::cout << " Return Code = " << iRc << std::endl;
+ return 1;
}
#ifdef XB_INDEX_SUPPORT
if(( iRc = MyFile->Reindex( 1 )) != XB_NO_ERROR ) {
- std::cout << "\nError reindexing DBF database ==> " << av[1] << std::endl;
+ std::cout << "\nError reindexing DBF database ==> " << sParm.Str() << std::endl;
std::cout << " Return Code = " << iRc << std::endl;
+ x.DisplayError( iRc );
+ return 1;
}
#endif // XB_INDEX_SUPPORT
diff --git a/src/utils/xb_tblinfo.cpp b/src/utils/xb_tblinfo.cpp
index 6b88403..241642a 100755
--- a/src/utils/xb_tblinfo.cpp
+++ b/src/utils/xb_tblinfo.cpp
@@ -1,8 +1,8 @@
-/* xb_dumpmdx.cpp
+/* xb_tblinfo.cpp
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2021 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2021,2023 Gary A Kunkel
The xb64 software library is covered under
the terms of the GPL Version 3, 2007 license.
@@ -19,85 +19,86 @@ Email Contact:
using namespace xb;
-int main( int ac, char ** av ){
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_tblinfo [-h] [-?] [--help] [-v] [--version] -i filename.DBF" << std::endl << std::endl;
+ std::cout << "This program dumps table definition information from a DBF file and associated indices." << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+int main(int argc, char *argv[] ){
xbXBase x;
- xbBool bHdr = xbFalse;
xbInt16 iRc;
xbString sTagName;
xbDbf *MyFile = NULL;
- #ifdef XB_MDX_SUPPORT
- #ifdef XB_DEBUG_SUPPORT
- xbBool bMdxFound = xbFalse;
- #endif // XB_DEBUG_SUPPORT
- #endif // XB_MDX_SUPPORT
-
-
x.EnableMsgLogging();
x.SetLogSize( 1000000L );
-
- if( ac <= 1 ) {
- std::cout << "\nUsage: xb_dumpmdx filename.DBF -h -tTAGNAME...\n";
- std::cout << "-h dump mdx file header (default)\n";
- std::cout << "-tTAGNAME where TAGNAME is the name of a tag for extract\n";
+ xbString sParm;
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
return 1;
}
- if( ac > 2 ){
- for( int i = 1; i< ac; i++ ){
- if( strstr( av[i], "-h" ))
- bHdr = xbTrue;
- else if( strstr( av[i], "-t" ))
- sTagName.Set( av[i]+2 );
- }
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
+ return 1;
}
- if( bHdr == xbFalse && sTagName == "" )
- bHdr = xbTrue;
-
-
- // std::cout << "Hdr = " << bHdr << std::endl;
- if( sTagName != "" )
- std::cout << "Tag = " << sTagName.Str() << std::endl;
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file iRc = " << iRc << " file = " << sParm.Str() << std::endl;
x.DisplayError( iRc );
- return 0;
+ return 1;
}
MyFile->DumpHeader( 4 );
- #ifdef XB_MDX_SUPPORT
- // for each mdx file, dump the header
- xbIxList *ixl = MyFile->GetIxList();
- xbIx *ixp;
+
+
+ #ifdef XB_INDEX_SUPPORT
+ xbIxList *ixl;
+ xbIx *ixp;
xbString sFileType;
+
+ #ifdef XB_MDX_SUPPORT
+ ixl = MyFile->GetIxList();
while( ixl ){
ixp = ixl->ix;
ixp->GetFileType( sFileType );
-
- #ifdef XB_DEBUG_SUPPORT
- if( sFileType == "MDX" ){
- bMdxFound = xbTrue;
- if( bHdr ){
- ixp->DumpHeader( 1, 3 );
- }
- }
- #endif // XB_DEBUG_SUPPORT
+ if( sFileType == "MDX" )
+ ixp->DumpHeader( 1, 3 );
ixl = ixl->next;
}
-
- #ifdef XB_DEBUG_SUPPORT
- if( !bMdxFound )
- std::cout << "No MDX index for file." << std::endl;
- #endif // XB_DEBUG_SUPPORT
#endif // XB_MDX_SUPPORT
+ #ifdef XB_NDX_SUPPORT
+ ixl = MyFile->GetIxList();
+ while( ixl ){
+ ixp = ixl->ix;
+ ixp->GetFileType( sFileType );
+ if( sFileType == "NDX" )
+ ixp->DumpHeader( 1, 3 );
+ ixl = ixl->next;
+ }
+ #endif // XB_NDX_SUPPORT
+
+ #endif // XB_INDEX_SUPPORT
+
MyFile->Close();
delete MyFile;
-
return 0;
}
diff --git a/src/utils/xb_undelall.cpp b/src/utils/xb_undelall.cpp
index 4f1af12..5fb1323 100755
--- a/src/utils/xb_undelall.cpp
+++ b/src/utils/xb_undelall.cpp
@@ -1,8 +1,8 @@
-/* xb_deletall.cpp
+/* xb_undelall.cpp
XBase64 Software Library
-Copyright (c) 1997,2003,2014,2017 Gary A Kunkel
+Copyright (c) 1997,2003,2014,2017,2023 Gary A Kunkel
The xb64 software library is covered under
the terms of the GPL Version 3, 2007 license.
@@ -13,8 +13,7 @@ Email Contact:
xb64-users@lists.sourceforge.net
-
-This program sets the delete flag on all records in a dbf file
+This program removes the delete flag on all records flagged for deletion in a DBF file
*/
@@ -24,32 +23,60 @@ This program sets the delete flag on all records in a dbf file
using namespace xb;
-int main(int ac,char** av)
+
+
+void PrintHelp();
+void PrintHelp(){
+ std::cout << "Usage: xb_undelall [-h] [-?] [--help] [-v] [--version] -i myfile" << std::endl << std::endl;
+ std::cout << "This program removes the deletion flags all the records in a DBF table that are flagged for deletion.";
+ std::cout << std::endl << std::endl;
+}
+void PrintVersion();
+void PrintVersion(){
+ std::cout << "Xbase64 Version: " << xbase_VERSION_MAJOR << "." << xbase_VERSION_MINOR << "." << xbase_VERSION_PATCH << std::endl;
+}
+
+
+int main(int argc, char *argv[])
{
xbXBase x;
xbDbf *MyFile = NULL;
xbInt16 iRc = 0;
- if (ac <= 1) {
- std::cout << "\nUsage: xb_deletall filename...\n";
+ xbString sParm;
+
+ if (argc < 2 || x.GetCmdLineOpt( argc, argv, "-h", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "-?", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--help", sParm )){
+ PrintHelp();
+ return 1;
+ }
+
+ if ( x.GetCmdLineOpt( argc, argv, "-v", sParm ) ||
+ x.GetCmdLineOpt( argc, argv, "--version", sParm )){
+ PrintVersion();
return 1;
}
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;
+ if( !x.GetCmdLineOpt( argc, argv, "-i", sParm ) || sParm == "" ){
+ PrintHelp();
+ return 1;
+ }
+
+ if(( iRc = x.OpenHighestVersion( sParm.Str(), "", &MyFile )) != XB_NO_ERROR ){
+ std::cout << "Could not open file RC = " << iRc << " file = " << sParm.Str() << std::endl;
x.DisplayError( iRc );
- return 0;
+ return 1;
}
iRc = MyFile->UndeleteAllRecords();
if( iRc != XB_NO_ERROR ) {
- std::cout << "Error Undeleting all records - database ==> " << av[1] << "\n";
+ std::cout << "Error Undeleting all records - database ==> " << sParm.Str() << "\n";
std::cout << " Return Code = " << iRc;
+ return 1;
}
MyFile->Close();
delete MyFile;
- std::cout << "\nDone...\n\n";
-
return 0;
}
\ No newline at end of file
diff --git a/src/utils/xb_zap.cpp b/src/utils/xb_zap.cpp
deleted file mode 100755
index 4660cd8..0000000
--- a/src/utils/xb_zap.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* xb_zap.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2017 Gary A Kunkel
-
-The xb64 software library is covered under
-the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- xb64-devel@lists.sourceforge.net
- xb64-users@lists.sourceforge.net
-
-*/
-
-#include
-using namespace xb;
-
-int main(int ac,char** av)
-{
- if (ac <= 1) {
- std::cout <<
- "\nUsage: zap filename...\n"
- "\nThis program does not automatically reindex any indices."
- "\nUse the reindex program to reindex any indexes associated"
- "\nwith the database, or build your own program which executes "
- "\nthe PackDatabase() method after opening all the index files "
- "\nassociated with the database.\n\n"
- ;
- return 1;
- }
-
- xbXBase x;
- xbInt16 iRc;
- xbDbf *MyFile = NULL;
-
- if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){
- std::cout << "Could not open file " << av[1] << std::endl;
- return iRc;
- }
-
- if(( iRc = MyFile->Zap()) != XB_NO_ERROR ) {
- std::cout << "\nError packing DBF database ==> " << av[1] << std::endl;
- std::cout << " Return Code = " << iRc << std::endl;
- }
- MyFile->Close();
- delete MyFile;
-
- std::cout << "\nZap Database complete..." << std::endl;
- return 0;
-}
--
cgit v1.2.3