From 517ad9d4b6eae320b708d03a9340a22893b0cab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 29 Jan 2023 15:45:51 +0100 Subject: New upstream version 4.0.3 --- docs/html/Xbase64ClassDiagram.jpg | Bin 0 -> 93778 bytes docs/html/gpl-3.0.txt | 674 ++++++++++++++++++++++++++++++++++++++ docs/html/index.htm | 33 -- docs/html/index.html | 43 +++ docs/html/xbab.html | 69 ++++ docs/html/xbac.html | 102 ++++++ docs/html/xbad.html | 27 ++ docs/html/xbae.html | 94 ++++++ docs/html/xbaf.html | 45 +++ docs/html/xbbib.htm | 63 ---- docs/html/xbc1.htm | 185 ----------- docs/html/xbc1.html | 199 +++++++++++ docs/html/xbc10.htm | 12 - docs/html/xbc10.html | 12 + docs/html/xbc11.htm | 12 - docs/html/xbc11.html | 12 + docs/html/xbc12.htm | 72 ---- docs/html/xbc12.html | 86 +++++ docs/html/xbc13.htm | 46 --- docs/html/xbc13.html | 46 +++ docs/html/xbc14.htm | 12 - docs/html/xbc14.html | 113 +++++++ docs/html/xbc15.htm | 34 -- docs/html/xbc15.html | 51 +++ docs/html/xbc2.htm | 267 --------------- docs/html/xbc2.html | 267 +++++++++++++++ docs/html/xbc3.htm | 73 ----- docs/html/xbc3.html | 73 +++++ docs/html/xbc4.htm | 80 ----- docs/html/xbc4.html | 81 +++++ docs/html/xbc5.htm | 205 ------------ docs/html/xbc5.html | 208 ++++++++++++ docs/html/xbc6.htm | 137 -------- docs/html/xbc6.html | 153 +++++++++ docs/html/xbc7.htm | 153 --------- docs/html/xbc7.html | 153 +++++++++ docs/html/xbc8.htm | 79 ----- docs/html/xbc8.html | 79 +++++ docs/html/xbc9.htm | 179 ---------- docs/html/xbc9.html | 180 ++++++++++ 40 files changed, 2767 insertions(+), 1642 deletions(-) create mode 100755 docs/html/Xbase64ClassDiagram.jpg create mode 100755 docs/html/gpl-3.0.txt delete mode 100755 docs/html/index.htm create mode 100755 docs/html/index.html create mode 100755 docs/html/xbab.html create mode 100755 docs/html/xbac.html create mode 100755 docs/html/xbad.html create mode 100755 docs/html/xbae.html create mode 100755 docs/html/xbaf.html delete mode 100755 docs/html/xbbib.htm delete mode 100755 docs/html/xbc1.htm create mode 100755 docs/html/xbc1.html delete mode 100755 docs/html/xbc10.htm create mode 100755 docs/html/xbc10.html delete mode 100755 docs/html/xbc11.htm create mode 100755 docs/html/xbc11.html delete mode 100755 docs/html/xbc12.htm create mode 100755 docs/html/xbc12.html delete mode 100755 docs/html/xbc13.htm create mode 100755 docs/html/xbc13.html delete mode 100755 docs/html/xbc14.htm create mode 100755 docs/html/xbc14.html delete mode 100755 docs/html/xbc15.htm create mode 100755 docs/html/xbc15.html delete mode 100755 docs/html/xbc2.htm create mode 100755 docs/html/xbc2.html delete mode 100755 docs/html/xbc3.htm create mode 100755 docs/html/xbc3.html delete mode 100755 docs/html/xbc4.htm create mode 100755 docs/html/xbc4.html delete mode 100755 docs/html/xbc5.htm create mode 100755 docs/html/xbc5.html delete mode 100755 docs/html/xbc6.htm create mode 100755 docs/html/xbc6.html delete mode 100755 docs/html/xbc7.htm create mode 100755 docs/html/xbc7.html delete mode 100755 docs/html/xbc8.htm create mode 100755 docs/html/xbc8.html delete mode 100755 docs/html/xbc9.htm create mode 100755 docs/html/xbc9.html (limited to 'docs/html') diff --git a/docs/html/Xbase64ClassDiagram.jpg b/docs/html/Xbase64ClassDiagram.jpg new file mode 100755 index 0000000..81bb539 Binary files /dev/null and b/docs/html/Xbase64ClassDiagram.jpg differ diff --git a/docs/html/gpl-3.0.txt b/docs/html/gpl-3.0.txt new file mode 100755 index 0000000..94a9ed0 --- /dev/null +++ b/docs/html/gpl-3.0.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/docs/html/index.htm b/docs/html/index.htm deleted file mode 100755 index 3c992f5..0000000 --- a/docs/html/index.htm +++ /dev/null @@ -1,33 +0,0 @@ - -Xbase DBMS Documentation Table of Contents - -

Xbase DBMS
-Last Updated 11/21/22
Version 4.x.x

-

Documentation Table Of Contents

-

Section 1 - Xbase Concepts

-

-Chapter 1 - Getting Started
-Chapter 2 - Database Overview
-Chapter 3 - Fields and Strings
-Chapter 4 - Date Processing
-Chapter 5 - Expression Handling
-Chapter 6 - Index Overview
-Chapter 7 - NDX (DBase) Indices
-Chapter 8 - MDX (DBase) Indices
-Chapter 9 - NTX (Clipper) Indices
-Chapter 10 - CDX (FoxPro) Indices
-Chapter 11 - IDX (FoxPro) Indices
-Chapter 12 - Record and File Locking
-Chapter 13 - Logfile Support
-Chapter 14 - SQL Support
-Chapter 15 - Utility programs
- -

-

Section 3 - Appendices

-

-Appendix C - GPL Library License
-Appendix D - Bibliography
-

-



- - diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100755 index 0000000..098c7ea --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,43 @@ + +Xbase DBMS Documentation Table of Contents + +

Xbase DBMS
+Last Updated 12/21/22
Version 4.0.3

+

Documentation Table Of Contents

+

Section 1 - Xbase Concepts

+

+Chapter 1 - Getting Started
+Chapter 2 - Database Overview
+Chapter 3 - Fields and Strings
+Chapter 4 - Date Processing
+Chapter 5 - Expression Handling
+Chapter 6 - Index Overview
+Chapter 7 - NDX (DBase) Indices
+Chapter 8 - MDX (DBase) Indices
+Chapter 9 - NTX (Clipper) Indices
+Chapter 10 - CDX (FoxPro) Indices
+Chapter 11 - IDX (FoxPro) Indices
+Chapter 12 - Record and File Locking
+Chapter 13 - Logfile Support
+Chapter 14 - SQL Support
+ + +

+

Section 2 - Classes and Objects

+

+Chapter 15 - General Class Information
+ +

+

Section 3 - Appendices

+

+Appendix A - GPL Library License
+Appendix B - Bibliography
+Appendix C - Library Build Options
+Appendix D - File Types
+Appendix E - Error Codes
+Appendix F - Utility and Example Programs
+ +

+



+ + diff --git a/docs/html/xbab.html b/docs/html/xbab.html new file mode 100755 index 0000000..809c2ea --- /dev/null +++ b/docs/html/xbab.html @@ -0,0 +1,69 @@ + + +Xbase DBMS Bibliography + +

Xbase DBMS Bibliography

+

Page Updated 12/9/22


+ +Bachman, Erik
+Xbase File Format Description / Erik Bachman, Roskilde, Denmark: Clickety +Click Software, 1996-1998, 44 pages

+ +Loomis, Mary:
+The Database Book, Macmillan Publishing Company, 1987, New York, New York: +ISBN 0-02-371760-2

+ +Dorfman, Len:
+Building C Libraries, Windcrest, 1990, Blue Ridge Summit, PA: +ISBN 0-8306-3418-5

+ +Eckel, Bruce:
+Using C++, Osborne, McGraw-Hill, 1990, Berkeley, CA: +ISBN 0-07-881522-3

+ +Aho, Alfred: Hopcroft, John: Ullman, Jeffrey:
+Data Structures and Algorithms, Addison-Wesley Publishing, 1983, +Reading Massachusetts: ISBN 0-201-00023-7

+ +Stevens, Al:
+C Database Development, MIS Press, 1991, Portland Oregon: +ISBN 1-55828-136-3

+ +Pressman, Roger:
+Software Engineering: A Practitioner's Approach, McGraw-Hill, 1982, +New York ISBN 0-07-050781-3

+ +Chou, George Tsu-der:
+2nd Edition dBase III Plus Handbook: Que Corporation, 1986, +Indianapolis, Indiana ISBN 0-88022-269-7

+ +Krumm, Rob:
+Understanding and Using dBase II & III, Brady Communications Company, Inc, +1985, Bowie MD ISBN 0-89303-917-9

+ +Hursch, Jack: Hursch, Carulyn:
+dBase IV Essentials, Windcrest, 1988, Blue Ridge Summit, PA +ISBN 0-8306-9616-4

+ +Borland:
+Turbo C++, Programmer's Guide, Borland International, 1990, +Scotts Valley CA

+ +Borland:
+Turbo C++, Library Reference, Borland International 1990, +Scotts Valley CA

+ +The Draft Standard C++ Library by P.J. Plauger, Prentice Hall, New Jersey, +1995.

+ +H.M Dietel/P.J. Deitel: C++ How To Program, Prentice Hall, Englewod Cliffs, +New Jersey 07632

+ +Molinaro, Anthony:
+SQL Cookbook, O'Reilly Media, Inc, 2005, +Sebastopol CA: ISBN 978-0-596-00976-2

+ +
+



+ + diff --git a/docs/html/xbac.html b/docs/html/xbac.html new file mode 100755 index 0000000..0b0fb0b --- /dev/null +++ b/docs/html/xbac.html @@ -0,0 +1,102 @@ + + +Xbase DBMS Appendix C + +

Library Build Compile Options

+

Chapter Updated 12/09/22


+ + + +
+

Library Build Compile Options

+ +
+ + + + + + + + + + + + + + + + + + +
OptionsDescriptionPrerequisites - Notes
XB_DEBUG_SUPPORTInclude library debugging functionality
XB_UTILS_SUPPORTBuild utility programs?
XB_EXAMPLES_SUPPORTBuild example programs?
XB_MEMO_SUPPORTInclude Memo file support?Prereq: XB_LINKLIST_SUPPORT
XB_LOGGING_SUPPORTInclude logging support?
XB_DBF3_SUPPORTInclude DBF Version III support?At lease one of XB_DBF3_SUPPORT or
XB_DBF4_SUPPORT required
XB_DBF4_SUPPORTInclude DBF Version IV support?At least one of XB_DBF3_SUPPORT or
XB_DBF4_SUPPORT required
XB_LINKLIST_SUPPORTInclude Linklist functionality?
XB_LOCKING_SUPPORTInclude File and Record locking support?Prereq: XB_LINKLIST_SUPPORT
XB_FUNCTION_SUPPORTInclude Expression Function support?
XB_EXPRESSION_SUPPORTInclude Expression support?Prereq: XB_FUNCTION_SUPPORT
and XB_LINKLIST_SUPPORT
XB_NDX_SUPPORTInclude NDX Index support?Prereq: XB_EXPRESSION_SUPPORT
XB_MDX_SUPPORTInclude MDX Index support?Prereq: XB_EXPRESSION_SUPPORT
XB_SQL_SUPPORTInclude SQL support?Prereq: XB_MEMO_SUPPORT
and XB_DBF4_SUPPORT
XB_INF_SUPPORTInclude INF support (Provides auto open functions for NDX indices)
XB_FILTER_SUPPORTInclude Filter supportPrereq: XB_EXPRESSION_SUPPORT
+ + + +




+

CMake

+The Xbase library is built using the CMake build manager. Cmake provides the architecture for +building cross platform projects with a unified build system. If you are not familiar with CMake, +you can familiarize yourself with it at https://cmake.org +

+To modify the XBase64 compile options take the following steps:


+ +1) Identify which platform you want to build and identify the correct build folder + + + + + + + +
/xbase64-4.x.x/build/borland5.5Older free Borland 5.5 32 bit Windows compiler
/xbase64-4.x.x/build/linux32Linux 32 bit build folder
/xbase64-4.x.x/build/linux64Linux 64 bit build folder
/xbase64-4.x.x/build/win32vsWindows 32 bit Visual Studio folder
/xbase64-4.x.x/build/win64vsWindows 64 bit Visual Studio folder
/xbase64-4.x.x/build/mac64MAC 64 but folder
+ +


+2) Navigate to the appropriate folder identified in step 1. Once you are in the correct folder, +verify there is a CmakeLists.txt file. That file is the main librbary build configuration file. +

+ +3) Select one if the following methods to update the config options + + + + + +
For Windows users, use program cmake-gui.exe
For Unix/Linux/Mac users, use program cmake-gui
For Unix command line, use program "ccmake ."
Or manually edit the CmakeLists.txt file with your favorite text editor
+


+



+

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.

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Method/FunctionDescription
xbDate::Dump()Dump the xbDate object internals to stdout
xbDate::DumpDateTable()Dump internal date tables to stdout
xbDbf::DumpTableLockStatus()Dump internal locking status / structures
xbExp::DumpToken()Dump expression values
xbExp::DumpTree()Dump expression token tree
xbExpNode::DumpToken()Dump expression node values
xbFile::DumpBlockToDiskDump specified block of data to a disk file
xbIx::DumpNodeDump index node header
xbIxMdx::DumpBlockDump MDX index block
xbIxMdx::DumpFreeBlocksDump MDX free block chain
xbIxMdx::DumpHeaderDump MDX file header info
xbIxMdx::DumpIxForTagDump MDX index keys and values for a given tag
xbIxMdx::DumpIxNodeChainDump MDX current memory node linked list for a given tag
xbIxMdx::DumpTagBlocksDump MDX blocks for a given tag
xbIxNdx::DumpHeaderDump MDX file header info
xbIxNdx::DumpIxNodeChainDump MDX current memory node linked list for a given tag
xbIxNdx::DumpNodeDump index node header
xbIxNdx::DumpTagBlocksDump NDX blocks for a given tag
xbMemoDbt3::DumpMemoFreeChain()Place holder
xbMemoDbt4::DumpMemoFreeChain()Dump list of free blocks available for reuse
xbMemoDbt4::DumpMemoInternals()Dump V4 memo file internals
xbString::Dump()Dump string internals
xbString::DumpHex()Dump string internals in hex
+ + +



+



+ + diff --git a/docs/html/xbad.html b/docs/html/xbad.html new file mode 100755 index 0000000..7356b7b --- /dev/null +++ b/docs/html/xbad.html @@ -0,0 +1,27 @@ + + +Xbase DBMS Appendix D + +

File Types

+

Chapter Updated 12/09/22


+ +

Supported File Types.

+ +All supported file types have one the following file extensions: +The extensions are allway upper case.

+ + + +
+ + + + + + + +
File TypeDescription
*.DBFMain database file or Table
*.DBTMemo file data
*.INFINF - Behave like MS ODBC File. Used to auto open NDX index file
*.MDXProduction V4 index file, contains up to 47 tags. Automatically opened.
*.NDXNon production V3 index files. Contains one tag per file. Automatically opened if included in ocrreespondin INF file.
+


+



+ + diff --git a/docs/html/xbae.html b/docs/html/xbae.html new file mode 100755 index 0000000..5f1dce6 --- /dev/null +++ b/docs/html/xbae.html @@ -0,0 +1,94 @@ + + +Xbase DBMS Appendix E + +

Eror Codes

+

Chapter Updated 12/09/22


+ +

Error Codes and Error Processing

+ +Alomost all Xbase64 methods and functions return and xbInt16 return code, which is zero or positive on success and negative +if an error condition occurs. +

+As of the 4.x.x release, the library has been extensively updated to use exception processing and most error +conditions will result in a mesage written to the logfile if logfile processing is enabled. The error routines +typically write two values to the logfile, an error code value and an iErrorStop value which identifies where +exactly in the library code the error occurred. +

+Error codes are defined in the xbretcod.h file.


+ + +File TypeDescription +*.DBFMain database file or Table +*.DBTMemo file data +*.INFINF - Behave like MS ODBC File. Used to auto open NDX index file +*.MDXProduction V4 index file, contains up to 47 tags. Automatically opened. +*.NDXNon production V3 index files. Contains one tag per file. Automatically opened if included in ocrreespondin INF file. + + +


+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionError CodeCategory
XB_NO_ERROR 0 general
XB_NO_MEMORY -100 general
XB_INVALID_OPTION -101 general
XB_DUP_TABLE_OR_ALIAS -110 table manager
XB_INVALID_NODELINK -120 linklist
XB_KEY_NOT_UNIQUE -121 linklist
XB_FILE_EXISTS -200 file
XB_ALREADY_OPEN -201 file
XB_DBF_FILE_NOT_OPEN -202 file
XB_FILE_NOT_FOUND -203 file
XB_FILE_TYPE_NOT_SUPPORTED -204 file
XB_RENAME_ERROR -205 file
XB_INVALID_OBJECT -206 file
XB_NOT_OPEN -207 file
XB_NOT_FOUND -208 file
XB_OPEN_ERROR -209 file
XB_CLOSE_ERROR -210 file
XB_SEEK_ERROR -211 file
XB_READ_ERROR -212 file
XB_WRITE_ERROR -213 file
XB_EOF -214 file
XB_BOF -215 file
XB_INVALID_BLOCK_SIZE -216 file
XB_INVALID_BLOCK_NO -217 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_INVALID_FIELD_TYPE -300 field
XB_INVALID_FIELD_NO -301 field
XB_INVALID_DATA -302 field
XB_INVALID_FIELD_NAME -303 field
XB_INVALID_MEMO_FIELD -304 field
XB_INVALID_FIELD -305 field
XB_INVALID_FIELD_LEN -306 field
XB_INVALID_DATE -307 date field
XB_INVALID_LOCK_OPTION -400 lock
XB_LOCK_FAILED -401 lock
XB_TABLE_NOT_LOCKED -402 lock - need table locked for operation
XB_PARSE_ERROR -500 expression
XB_INVALID_FUNCTION -501 expression
XB_INVALID_PARM -502 expression
XB_INCONSISTENT_PARM_LENS -503 expression
XB_INCOMPATIBLE_OPERANDS -504 expression
XB_UNBALANCED_PARENS -505 expression
XB_UNBALANCED_QUOTES -506 expression
XB_INVALID_EXPRESSION -507 expression
XB_INVALID_KEYNO -600 index
XB_INVALID_INDEX -601 index file error
XB_INVALID_TAG -602 invalid index tag name, must be <= 10 bytes
XB_INVALID_PAGE -603 invalid index page
XB_SYNTAX_ERROR -700 sql syntax error
+ + + +


+



+ + diff --git a/docs/html/xbaf.html b/docs/html/xbaf.html new file mode 100755 index 0000000..110db7b --- /dev/null +++ b/docs/html/xbaf.html @@ -0,0 +1,45 @@ + + +Xbase DBMS Chapter 15 + +

Sample Programs

+

Page Updated 12/20/22




+ +
+ + + +

XBase Example Programs

ProgramProgram Description +
xb_ex_stringExample program to demonstrate xbString class usage +
xb_ex_v3_create_dbfExample program to create V3 DBF file +
xb_ex_v3_upd_dbfExample program to update V3 DBF file +
xb_ex_v4_create_dbfExample Program to create V4 DBF file +
xb_ex_v4_upd_dbfExample program to update V4 DBF file +
+

+ + +
+ + + +

XBase Utility Programs

ProgramProgram Description +
xb_cfg_checkThis program prints the compile settings and options in use +
xb_copydbfThis program copies a DBF file structure +
xb_dbfutil1Menu program for executing Xbase functions +
xb_deletallThis program marks all records in a DBF file for deletion +
xb_dumpdbtDebug memo files +
xb_dumphdrThis program opens an Xbase file and prints its header +
xb_dumprecsThis program dumps records for an XBase file +
xb_execsqlThis program executes SQL statements +
xb_packThis program packs (removes deleted records) from a DBF database file +
xb_undelallThis program undeletes all deleted records in a dbf file +
xb_zapThis program removes all records from a DBF file +
+

+ + +
+



+ + diff --git a/docs/html/xbbib.htm b/docs/html/xbbib.htm deleted file mode 100755 index 70e4e82..0000000 --- a/docs/html/xbbib.htm +++ /dev/null @@ -1,63 +0,0 @@ - - -Xbase DBMS Bibliography - -

Xbase DBMS Bibliography

-

Page Updated 2/1/99


- -Bachman, Erik
-Xbase File Format Description / Erik Bachman, Roskilde, Denmark: Clickety -Click Software, 1996-1998, 44 pages

- -Loomis, Mary:
-The Database Book, Macmillan Publishing Company, 1987, New York, New York: -ISBN 0-02-371760-2

- -Dorfman, Len:
-Building C Libraries, Windcrest, 1990, Blue Ridge Summit, PA: -ISBN 0-8306-3418-5

- -Eckel, Bruce:
-Using C++, Osborne, McGraw-Hill, 1990, Berkeley, CA: -ISBN 0-07-881522-3

- -Aho, Alfred: Hopcroft, John: Ullman, Jeffrey:
-Data Structures and Algorithms, Addison-Wesley Publishing, 1983, -Reading Massachusetts: ISBN 0-201-00023-7

- -Stevens, Al:
-C Database Development, MIS Press, 1991, Portland Oregon: -ISBN 1-55828-136-3

- -Pressman, Roger:
-Software Engineering: A Practitioner's Approach, McGraw-Hill, 1982, -New York ISBN 0-07-050781-3

- -Chou, George Tsu-der:
-2nd Edition dBase III Plus Handbook: Que Corporation, 1986, -Indianapolis, Indiana ISBN 0-88022-269-7

- -Krumm, Rob:
-Understanding and Using dBase II & III, Brady Communications Company, Inc, -1985, Bowie MD ISBN 0-89303-917-9

- -Hursch, Jack: Hursch, Carulyn:
-dBase IV Essentials, Windcrest, 1988, Blue Ridge Summit, PA -ISBN 0-8306-9616-4

- -Borland:
-Turbo C++, Programmer's Guide, Borland International, 1990, -Scotts Valley CA

- -Borland:
-Turbo C++, Library Reference, Borland International 1990, -Scotts Valley CA

- -The Draft Standard C++ Library by P.J. Plauger, Prentice Hall, New Jersey, -1995.

- -H.M Dietel/P.J. Deitel: C++ How To Program, Prentice Hall, Englewod Cliffs, -New Jersey 07632

- - - diff --git a/docs/html/xbc1.htm b/docs/html/xbc1.htm deleted file mode 100755 index bb04aec..0000000 --- a/docs/html/xbc1.htm +++ /dev/null @@ -1,185 +0,0 @@ - - -Xbase DBMS Chapter 1 - - -

Getting Started

-

Chapter Updated 11/21/22

- -

Overview

- -Welcome to Xbase64 DBMS, a collection of specifications, programs, -utilities and a C++ class library for manipulating legacy Xbase (DBF) type -data files and indices. -

- -The term Xbase is often used used to describe the format of the original -DBase, Clipper and Foxbase (.DBF) files. The XBase file format is well -documented and has stood the test of time. Various popular programs -still create and read xbase formatted files.

- -The purpose of the Xbase64 library is to provide reliable and usable -programming tools for reading, writing and updating DBF databases, -indices and memo fields. Version 4.x.x has been tested for compatability -with DBase III (TM) and DBase IV (TM) version data files and indices -*.DBF (data), *.NDX (single tag index), *.MDX (multi tag index) and -*.DBT (memo).

- -Version 4.x.x is a major rewrite of the library to strenghen error -processing and bring consistency across modules. It includes updates -to the locking process and also includes a module to support MDX multi -tag indices.

- -Earlier versions of the library have included NTX and CDX index formats -and that code will be re-incorporated into the latest version in the -future. - - - -


- -

System Requirements

- -To build the Xbase64 library, the following items are needed:

- -A computer, a C/C++ compiler and CMAKE.

- -The original source code was developed on a Linux platform with the GCC -public domain C/C++ compiler. -

- -Xbase64 DBMS has been successfully ported and runs on Linux, Mac and and Windows. -

- -

Classes and User Interface

- -Classes and User Interface Documentation via Doxygen - -

-

Portability, Type Defs and Structures

- -To make the Xbase64 library as portable as possible, the following things occurred: -

-
  • The software was developed to compile and run on either 32 or 64 bit architectures. -
  • The software was developed to compile and run on either big endian or little endian archtectures. -
  • All numeric data is stored in little endian format. -
  • The library is built using Cmake to provide support on a wide variety of platforms. -
  • Field types were defined to be consistent across various OS and CPU configurations. -Xbase64 defines the following field types:


    -
    - - - -

    Field Types

    TypeDescription -
    xbInt1616 bit int -
    xbUInt1616 bit unsigned int -
    xbInt3232 bit int -
    xbUInt3232 bit unsigned int -
    xbInt6464 bit int -
    xbUInt6464 bit unsigned int -
    xbDoubledouble -
    charchar -
    voidvoid -
    struct SCHEMAUsed for defining record structures -
    -

    - -Xbase64 was designed for portability utilizing standard ANSI-C/C++ compliant -code. If you decide to write updates to the Xbase64 project, please try -to keep your work to standard C/C++ generic calls and use the above predefined field types.

    - -

    Compilation Overview

    -To build the xbase64 library, verify you have:
    -
  • Xbase64 source code -
  • cmake 2.6 or LATER -
  • Compiler and linker - -

    -Verify you have access rights to the target location of the library - -

    -For Linux: -

    -
  • cd xbase/Linux -
  • cmake . -
  • make -
  • make test -
  • sudo make install -
  • Verify the ld.so.conf file has the library target directory. For example -update file /etc/ld.so.conf to include /usr/local/lib and run ldconfig. -

    - -For Mac: -

    -
  • Verify you have xcode installed and operational. -
  • cd xbase/Mac -
  • cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -
  • make -
  • make test -

    - -For Windows 64 bit with Visual Studio: -

    -
  • Open a Visual Studio 64 bit Shell -
  • cd xbase\Win64VS -
  • buildwin.bat -
  • nmake test -
  • From a VS Studio 64 bit shell in admin mode: nmake install -

    - -For Windows 32 bit with Visual Studio: -

    -
  • Open a Visual Studio 32 bit Shell -
  • cd xbase\Win32VS -
  • buildwin.bat -
  • nmake test -
  • From a VS Studio 32 bit shell in admin mode: nmake install -

    - -For Windows 32 bit with Borland 5.5 free compiler -

    -
  • cd xbase\Win32Borland -
  • BuildBorland.bat -
  • make test -

    - -For other platforms: -

    -Here is something to start with... -
  • cd xbase -
  • md MyPlatform -
  • cd MyPlatform -
  • cp ../Cmake/CmakeLists.txt. -
  • Enter the appropriate make command for your environment. Check the cmake web site for help.
    - On Linux, it is .cmake, then make - your mileage may vary - - Send your results to the library maintainer so it can be added to this library - - - -To use the Xbase classes, include the following header file in the program: -

    - -#include <xbase.h>

    - -For more information on getting started, check out the sample programs in the src/examples folder. -

    - -

    -

    System Limitations

    -
    -Maximum size of a database file is the size of LONG - 2,147,483,647 bytes
    -Total number of fields in a database - 255
    -Total number of characters in all fields - 32767
    -Maximum number of characters in a field - 254
    -Total number of records in a file - 1 billion
    -Maximum index key length - 100 bytes
    -Maximum .DBT file memo block size - 32256
    -Maximum expression result length - 100 bytes
    -Maximum NDX index key length - 100 bytes

    -


    - -



    - - diff --git a/docs/html/xbc1.html b/docs/html/xbc1.html new file mode 100755 index 0000000..c07e5f6 --- /dev/null +++ b/docs/html/xbc1.html @@ -0,0 +1,199 @@ + + +Xbase DBMS Chapter 1 + + +

    Getting Started

    +

    Chapter Updated 12/09/22

    + +

    Overview

    + +Welcome to Xbase64 DBMS, a collection of specifications, programs, +utilities and a C++ class library for manipulating legacy Xbase (DBF) type +data files and indices. +

    + +The term Xbase is often used used to describe the format of the original +DBase, Clipper and Foxbase (.DBF) files. The XBase file format is well +documented and has stood the test of time. Various popular programs +still create and read xbase formatted files.

    + +The purpose of the Xbase64 library is to provide reliable and usable +programming tools for reading, writing and updating DBF databases, +indices and memo fields. Version 4.x.x has been tested for compatability +with DBase III (TM) and DBase IV (TM) version data files and indices +*.DBF (data), *.NDX (single tag index), *.MDX (multi tag index) and +*.DBT (memo).

    + +Version 4.x.x is a major rewrite of the library to strengthen error +processing and bring consistency across modules. It includes updates +to the locking process and also includes a module to support MDX multi +tag indices.

    + +Earlier versions of the library have included NTX and CDX index formats +and that code will be re-incorporated into the latest version in the +future. + + +

    +Why use the Xbase library? +The DBF file format is a ubiquitous industry standard with +widespread usage and application. Using this standard file format removes any +vender specific locks that bind you to a particular platform. +Additionally, with Xbase64 only the options needed can be compiled into or out of the library +to provide a custom configuration specific to project requirements. +For a small footprint, locking, memo fields and indices could be excluded from +the library build which would reduce the library size. +This tool is usefull for small to medium sized apps that don't need all the +overhead, sophistication and cost of a complex client server configuration. +The Xbase library is designed to be flexible in which options can be compiled +into or out fo the library and also which environments it can be run on. + + +


    + +

    System Requirements

    + +To build the Xbase64 library, the following items are needed:

    + +A computer, a C/C++ compiler and CMAKE.

    + +The original source code was developed on a Linux platform with the GCC +public domain C/C++ compiler. +

    + +Xbase64 DBMS has been successfully ported and runs on Linux, Mac and and Windows. +

    + +

    Classes and User Interface

    + +Classes and User Interface Documentation via Doxygen + +

    +

    Portability, Type Defs and Structures

    + +To make the Xbase64 library as portable as possible, the following things occurred: +

    +
  • The software was developed to compile and run on either 32 or 64 bit architectures. +
  • The software was developed to compile and run on either big endian or little endian archtectures. +
  • All numeric data is stored in little endian format. +
  • The library is built using Cmake to provide support on a wide variety of platforms. +
  • Field types were defined to be consistent across various OS and CPU configurations. +Xbase64 defines the following field types:


    +
    + + + +

    Field Types

    TypeDescription +
    xbBoolContains xbTrue (0) or xbFalse (1) +
    xbInt1616 bit int +
    xbUInt1616 bit unsigned int +
    xbInt3232 bit int +
    xbUInt3232 bit unsigned int +
    xbInt6464 bit int +
    xbUInt6464 bit unsigned int +
    xbDoubledouble +
    charchar +
    voidvoid +
    struct SCHEMAUsed for defining record structures +
    +

    + +Xbase64 was designed for portability utilizing standard ANSI-C/C++ compliant +code. If you decide to write updates to the Xbase64 project, please try +to keep your work to standard C/C++ generic calls and use the above predefined field types.

    + +

    Compilation Overview

    +To build the xbase64 library, verify you have:
    +
  • Xbase64 source code +
  • cmake 2.6 or LATER +
  • Compiler and linker + +

    +Verify you have access rights to the target location of the library + +

    +For Linux: +

    +
  • cd xbase/Linux +
  • cmake . +
  • make +
  • make test +
  • sudo make install +
  • Verify the ld.so.conf file has the library target directory. For example +update file /etc/ld.so.conf to include /usr/local/lib and run ldconfig. +

    + +For Mac: +

    +
  • Verify you have xcode installed and operational. +
  • cd xbase/Mac +
  • cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk +
  • make +
  • make test +

    + +For Windows 64 bit with Visual Studio: +

    +
  • Open a Visual Studio 64 bit Shell +
  • cd xbase\Win64VS +
  • buildwin.bat +
  • nmake test +
  • From a VS Studio 64 bit shell in admin mode: nmake install +

    + +For Windows 32 bit with Visual Studio: +

    +
  • Open a Visual Studio 32 bit Shell +
  • cd xbase\Win32VS +
  • buildwin.bat +
  • nmake test +
  • From a VS Studio 32 bit shell in admin mode: nmake install +

    + +For Windows 32 bit with Borland 5.5 free compiler +

    +
  • cd xbase\Win32Borland +
  • BuildBorland.bat +
  • make test +

    + +For other platforms: +

    +Here is something to start with... +
  • cd xbase +
  • md MyPlatform +
  • cd MyPlatform +
  • cp ../Cmake/CmakeLists.txt. +
  • Enter the appropriate make command for your environment. Check the cmake web site for help.
    + On Linux, it is .cmake, then make + your mileage may vary + + Send your results to the library maintainer so it can be added to this library + + + +To use the Xbase classes, include the following header file in the program: +

    + +#include <xbase.h>

    + +For more information on getting started, check out the sample programs in the src/examples folder. +

    + +

    +

    System Limitations

    +
    +Maximum size of a database file is the size of LONG - 2,147,483,647 bytes
    +Total number of fields in a database - 255
    +Total number of characters in all fields - 32767
    +Maximum number of characters in a field - 254
    +Total number of records in a file - 1 billion
    +Maximum index key length - 100 bytes
    +Maximum .DBT file memo block size - 32256
    +Maximum expression result length - 100 bytes
    +Maximum NDX index key length - 100 bytes

    +

    +



    + + diff --git a/docs/html/xbc10.htm b/docs/html/xbc10.htm deleted file mode 100755 index 04f5158..0000000 --- a/docs/html/xbc10.htm +++ /dev/null @@ -1,12 +0,0 @@ - - -Xbase DBMS Chapter 10 - -

    CDX Indices

    -

    Chapter Updated 11/28/22


    - -

    Pending CDX index module development.

    - -
    - - diff --git a/docs/html/xbc10.html b/docs/html/xbc10.html new file mode 100755 index 0000000..04f5158 --- /dev/null +++ b/docs/html/xbc10.html @@ -0,0 +1,12 @@ + + +Xbase DBMS Chapter 10 + +

    CDX Indices

    +

    Chapter Updated 11/28/22


    + +

    Pending CDX index module development.

    + +
    + + diff --git a/docs/html/xbc11.htm b/docs/html/xbc11.htm deleted file mode 100755 index 4230f3f..0000000 --- a/docs/html/xbc11.htm +++ /dev/null @@ -1,12 +0,0 @@ - - -Xbase DBMS Chapter 10 - -

    CDX Indices

    -

    Chapter Updated 11/28/22


    - -

    Pending IDX index module development.

    - -
    - - diff --git a/docs/html/xbc11.html b/docs/html/xbc11.html new file mode 100755 index 0000000..4230f3f --- /dev/null +++ b/docs/html/xbc11.html @@ -0,0 +1,12 @@ + + +Xbase DBMS Chapter 10 + +

    CDX Indices

    +

    Chapter Updated 11/28/22


    + +

    Pending IDX index module development.

    + +
    + + diff --git a/docs/html/xbc12.htm b/docs/html/xbc12.htm deleted file mode 100755 index f9fe114..0000000 --- a/docs/html/xbc12.htm +++ /dev/null @@ -1,72 +0,0 @@ - - -Xbase DBMS Chapter 8 - -

    Record and File Locking

    -

    Chapter Updated 11/29/22


    - -

    Locking Overview

    - -Xbase64 supports multi-user processing through file and record locks. -Record locking restricts multiple cooperating programs from simultaneously -accessing the same data and corrupting it. Without record and file locking -in a multi-user environment, simultaneous access to the data and index files -can cause the files to become inaccurate and unusable.

    - -Automatic record locking is on by default in the Xbase64 library. To disable it, -use method xbXBase::DisableDefaultAutoLock() and to enable it, use method xbXBase::EnableDefaultAutoLock(). - -Locking can also be enabled / disabled at the table level with with xbDbf::SetAutoLock(). - - -

    -The current Xbase64 record locking logic is modeled after DBase (tm) V7 locking. -

    - -The locking methods return either XB_LOCK_FAILED or XB_NO_ERROR. If they return -XB_LOCK_FAILED the actual reason can be found in the global variable -errno or function perror() can be executed to view the -results. -

    - -The errno field may contain one of the following values if the lock was not -successful.

    - - -
    Error CodeDescription -
    EBADFInvalid file descriptor -
    EINVALInvalid lock information or file does not support locks -
    EACCESS
    EAGAIN
    Lock can not be set because it is blocked by an existing lock on the file. -
    ENOLCKThe system is out of lock resources, too many file locks in place. -
    EDEADLKDeadlock condition -
    EINTRProcess was interrupted by a signal while it was waiting -
    -

    - -

    Linux/Windows File Locking Compatibility Issue

    - -There is a compatibility locking issue to be aware of. Windows environments allow for the exclusive -opening of file handles and Linux/Unix platforms do not. If you are writing an application that will be -using a tool like Dbase on a Windows machine, accessing a file on a Linux/Samba configure machine, -be aware that the file could be opened in exclusive mode by DBase on the Windows system, and the same file could -be simultaneously opened with a program on the Unix box. That could cause some issues. - -

    -In Unix, a program can not lock a file so another process can not access it.
    -In Windows, a program can lock a file so another process can not access it.
    -DBase(tm) supports routines to open files exclusively, preventing other users from opening a file.
    - -

    Samba settings

    - -If you will be using Samba on Linux/Unix and sharing files between Linux and Windows machines, -you will need to disable oplocks. In the smb.conf file, set:
    -

    oplocks = no

    - - - - -
    -

    -



    - - diff --git a/docs/html/xbc12.html b/docs/html/xbc12.html new file mode 100755 index 0000000..a40c7e0 --- /dev/null +++ b/docs/html/xbc12.html @@ -0,0 +1,86 @@ + + +Xbase DBMS Chapter 12 + +

    Record and File Locking

    +

    Chapter Updated 12/13/22


    + +

    Locking Overview

    + +Xbase64 supports multi-user processing through file and record locks. +Record locking restricts multiple cooperating programs from simultaneously +accessing the same data and corrupting it. Without record and file locking +in a multi-user environment, simultaneous access to the data and index files +can cause the files to become inaccurate and unusable.

    + +Automatic record locking is on by default in the Xbase64 library. To disable it, +use method xbXBase::DisableDefaultAutoLock() and to enable it, use method xbXBase::EnableDefaultAutoLock(). +

    +Locking can also be enabled / disabled at the table level with with xbDbf::SetAutoLock().

    +If autolocking is disabled and the code base is being used in a multi user environment, it is +up to the application program to verify the needed locks are set as there is no checking or +setting any locks if autolocking is turned off. It is only safe to turn off the autolocking functionality +if the library is being used in a single user environment. + +

    +The current Xbase64 record locking logic is modeled after DBase (tm) V7 locking. +

    + +The locking methods return either XB_LOCK_FAILED or XB_NO_ERROR. If they return +XB_LOCK_FAILED the actual reason can be found in the global variable +errno or function perror() can be executed to view the +results. +

    + +The errno field may contain one of the following values if the lock was not +successful.

    + + +
    Error CodeDescription +
    EBADFInvalid file descriptor +
    EINVALInvalid lock information or file does not support locks +
    EACCESS
    EAGAIN
    Lock can not be set because it is blocked by an existing lock on the file. +
    ENOLCKThe system is out of lock resources, too many file locks in place. +
    EDEADLKDeadlock condition +
    EINTRProcess was interrupted by a signal while it was waiting +
    +

    + +

    Linux/Windows File Locking Compatibility Issue

    + +There is a compatibility locking issue to be aware of. Windows environments allow for the exclusive +opening of file handles and Linux/Unix platforms do not. If you are writing an application that will be +using a tool like Dbase on a Windows machine, accessing a file on a Linux/Samba configure machine, +be aware that the file could be opened in exclusive mode by DBase on the Windows system, and the same file could +be simultaneously opened with a program on the Unix box. That could cause some issues. + +

    +In Unix, a program can not lock a file so another process can not access it.
    +In Windows, a program can lock a file so another process can not access it.
    +DBase(tm) supports routines to open files exclusively, preventing other users from opening a file.
    +Locking on the Mac/Apple platform only works on NFS shares. It does not work with SMB shares. + +

    Samba settings

    + +If you will be using Samba on Linux/Unix and sharing files between Linux and Windows machines, +you will need to disable oplocks. In the smb.conf file, set:
    +
    +[sharename]
    +oplocks = False
    +level2 oplocks = False + + +

    iLockFlavor

    + +The library was constructed in a manner so that it could be updated to support alternate lock "flavors". +The 4.x.x library is built to mirror the DBase locking, but the structure is in place to expand to other locking +types if needed. + + + + +


    +

    +



    + + diff --git a/docs/html/xbc13.htm b/docs/html/xbc13.htm deleted file mode 100755 index 9f51a85..0000000 --- a/docs/html/xbc13.htm +++ /dev/null @@ -1,46 +0,0 @@ - - - -Xbase DBMS Chapter 13 - -

    Logfiles

    -

    Chapter Updated 11/29/22


    - - -

    Logging

    - -The Xbase library includes a logging module that can be turned on or off for auditing purposes. - -See example code below for how to use the logging routines. - -
    - -#include "xbase.h"
    -using namespace xb;
    -
    -int main( int argCnt, char **av ){
    - - #ifdef XB_LOGGING_SUPPORT
    - xbString sMsg;
    - xbString sLogFileName;
    - xbXBase x;
    - sLogFileName = "/home/xbase/logfiles/LogFile.txt";
    - x.SetLogFileName( sLogFileName );
    - x.EnableMsgLogging();

    - - - std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
    - sMsg.Sprintf( "Program [%s] initializing...", av[0] );
    - x.WriteLogMessage( sMsg );
    - std::cout << "Logging status is " << x.GetLogStatus() << std::endl;
    - sMsg = "A logfile message";
    - x.WriteLogMessage( sMsg );
    - x.DisableMsgLogging();
    - #endif /* XB_LOGGING_SUPPORT */
    - return 0;
    -}
    - -
    -


    - - diff --git a/docs/html/xbc13.html b/docs/html/xbc13.html new file mode 100755 index 0000000..9f51a85 --- /dev/null +++ b/docs/html/xbc13.html @@ -0,0 +1,46 @@ + + + +Xbase DBMS Chapter 13 + +

    Logfiles

    +

    Chapter Updated 11/29/22


    + + +

    Logging

    + +The Xbase library includes a logging module that can be turned on or off for auditing purposes. + +See example code below for how to use the logging routines. + +
    + +#include "xbase.h"
    +using namespace xb;
    +
    +int main( int argCnt, char **av ){
    + + #ifdef XB_LOGGING_SUPPORT
    + xbString sMsg;
    + xbString sLogFileName;
    + xbXBase x;
    + sLogFileName = "/home/xbase/logfiles/LogFile.txt";
    + x.SetLogFileName( sLogFileName );
    + x.EnableMsgLogging();

    + + + std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;
    + sMsg.Sprintf( "Program [%s] initializing...", av[0] );
    + x.WriteLogMessage( sMsg );
    + std::cout << "Logging status is " << x.GetLogStatus() << std::endl;
    + sMsg = "A logfile message";
    + x.WriteLogMessage( sMsg );
    + x.DisableMsgLogging();
    + #endif /* XB_LOGGING_SUPPORT */
    + return 0;
    +}
    + +
    +


    + + diff --git a/docs/html/xbc14.htm b/docs/html/xbc14.htm deleted file mode 100755 index fdcf949..0000000 --- a/docs/html/xbc14.htm +++ /dev/null @@ -1,12 +0,0 @@ - - -Xbase DBMS Chapter 14 - -

    CDX Indices

    -

    Chapter Updated 11/30/22


    - -

    Pending SQL module development.

    - -
    - - diff --git a/docs/html/xbc14.html b/docs/html/xbc14.html new file mode 100755 index 0000000..2c086df --- /dev/null +++ b/docs/html/xbc14.html @@ -0,0 +1,113 @@ + + +Xbase DBMS Chapter 14 + +

    CDX Indices

    +

    Chapter Updated 12/08/22


    + +

    SQL Command Status

    + +Development of SQL support is still underway and very preliminary. As of the 4.0.3 version, the following SQL commands +are available.

    +The SQL commands are modeled after industry standard SQL specifications and do what you would expect an SQL command to do. +
    +Use of [brackets] in this chapter identifies optional components of a given command. +

    +
    +

    ALTER TABLE

    +Expected format:
    +ALTER TABLE tablename.DBF RENAME TO newtablename.DBF +

    +
    +

    CREATE INDEX

    +Expected format to create an Dbase 3, NDX index:
    +CREATE INDEX ixname.NDX ON tablename.dbf ( EXPRESSION ) [ASSOCIATE] + +

    +Expected format to create an Dbase 4, tag on an MDX index:
    +CREATE [UNIQUE] INDEX tagname ON tablename.DBF ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()] + +

    +The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate non production (NDX) index file to a dbf +file so it will be automatically opened with the dbf file whenever the dbf file is opened by the xbase64 routines. +

    +The [ASSOCIATE] parameter is not used with MDX production indices +

    +Xbase first looks for ".NDX" in the file name to determine if an NDX index should be created. +If .NDX is not in the filename, it looks in the uda for "IXTYPE" for either NDX or MDX to +detmermine the index type to create. if IXTYPE is not found, it creates an MDX tag. +

    +The optional DESC parameter defines an entire index key as descending. This is +different than other SQL implementations where specific fields can be descending. +

    +The optional FILTER parameter is specific to the XBASE64 library, is it used to assign a filter to a tag in an +MDX style index. Everything to the right of the keyword FILTER is considered part of the filter. +

    +The original DBASE indices used to '+' to create an index on more than one field +
    ie: FIELD1+FIELD2+FIELD3 +
    +The Xbase library supports either '+' or ',' when creating mutli field indices. +

    +
    + + + +

    CREATE TABLE

    +Expected format:
    +CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... ) +

    + + + + + + + + + + + +
    SQL TYPEXBASE Field Type
    SMALLINTNUMERIC(6,0)
    INTEGERNUMERIC(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)
    DATEDATE
    VARCHARMEMO
    LOGICALLOGICAL
    +
    +
    + + +

    DELETE

    +Expected format:
    +DELETE FROM tablename.DBF [WHERE expression] +

    +
    + + +

    DROP INDEX

    +Expected format:
    +DROP INDEX [IF EXISTS] ixname.NDX ON tablename.DBF
    +DROP INDEX [IF EXISTS] tagname ON tablename.DBF
    +
    + + +
    +

    DROP TABLE

    +Expected format:
    +DROP TABLE [IF EXISTS] tablename.DBF +
    +
    +

    INSERT

    +Expexted format:
    +INSERT INTO tablename (field1, field2, field3,...) VALUES ( 'charval', numval, 'what is the correct odbc date format to use? CCYYMMDD'); +

    +
    +

    SET

    +Used to set a variable name
    +Expected format:
    +SET ATTRIBUTE = DATAVALUE
    +SET ATTRIBUTE = ^ (to delete an entry)
    +
    +


    +



    + + + + + diff --git a/docs/html/xbc15.htm b/docs/html/xbc15.htm deleted file mode 100755 index 89bab09..0000000 --- a/docs/html/xbc15.htm +++ /dev/null @@ -1,34 +0,0 @@ - - -Xbase DBMS Chapter 15 - -

    Sample Programs

    -

    Page Updated 11/30/22




    -Sample Xbase DBMS programs include in the library.

    -
    - - - -

    XBase Sample Programs

    ProgramProgram Description -
    xb_cfg_checkThis program prints the compile settings and options in use -
    xb_copydbfThis program copies a DBF file structure -
    xb_dbfutil1Menu program for executing Xbase functions -
    xb_deletallThis program marks all records in a DBF file for deletion -
    xb_dumpdbtDebug memo files -
    xb_dumphdrThis program opens an Xbase file and prints its header -
    xb_dumprecsThis program dumps records for an X-Base file -
    xb_ex_stringExample string program -
    xb_ex_v3_create_dbfExample program to create V3 DBF file -
    xb_ex_v3_upd_dbfExample program to update V3 DBF file -
    xb_ex_v4_create_dbfExample Program to create V4 DBF file -
    xb_ex_v4_upd_dbfExample program to update V4 DBF file -
    xb_execsqlThis program executes SQL statements -
    xb_packThis program packs (removes deleted records) from a DBF database file -
    xb_undelallThis program undeletes all deleted records in a dbf file -
    xb_zapThis program removes all records from a DBF file -
    -

    -
    -



    - - diff --git a/docs/html/xbc15.html b/docs/html/xbc15.html new file mode 100755 index 0000000..136724d --- /dev/null +++ b/docs/html/xbc15.html @@ -0,0 +1,51 @@ + + +Xbase DBMS Chapter 15 + +

    Class Inventory

    +

    Chapter Updated 12/24/22


    +
    +

    Class Descriptions

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ClassDescription
    xbBcdSupports binary coded deciemal data
    xbDateSupport date operations on a given date formatted as YYYYMMDD
    xbDbfBase class for DBF file handling. If you are adding support for a new file type,
    derive new file type class from this.
    xbDbf3Derived from xbDbf, supports DBase V3 files
    xbDbf4Derived from xbDbf, supports DBase V4 files
    xbExpClass for supporting expression logic
    xbExpNodeClass definition of a single node, utilized by xbExp
    xbFileMain file class. If you are porting this library to another platform, start here
    xbFilterSupports filters
    xbIxBase class for index file support. If you are adding support for a new index type,
    derive new index type class from this.
    xbIxNdxDerived from xbIx, supports NDX style indices.
    xbIxMdxDerived from xbIx, supports MDX style indices
    xbLinkListClass supporting linked list functionality
    xbLinkListOrdClass supporting ordered linked list functionality
    xbLinkListNodeClass defining one node, used by xbLinkList and xbLinkListOrd
    xbLogClass supporting general log file activity
    xbMemoBase class for supporting memo (.DBT) files. If you are adding support for a new memo type,
    derive new memo type class from this.
    xbMemoDbt3Derived from xbMemo, supports V3 Memo files
    xbMemoDbt4Derived from xbMemo, supports V3 Memo files
    xbSqlSupports SQL access
    xbSsvBase class, shared system values
    xbStringString handling class
    xbTagClass to support index tags
    xbTblMgrClass used internally in the library for managing multiple open files/tables
    xbUdaClass for supporting fields for the xbSql functions. Stands for User data area
    xbXBaseClass to tie everything together. Every application program starts with one of these
    +
    + +
    +

    +Fix me... +


    + +

    +


    +



    + + diff --git a/docs/html/xbc2.htm b/docs/html/xbc2.htm deleted file mode 100755 index 72a6009..0000000 --- a/docs/html/xbc2.htm +++ /dev/null @@ -1,267 +0,0 @@ - - -Xbase DBMS Chapter 2 - -

    Database Overview

    -

    Chapter Updated 11/21/22


    - -The objective of this chapter is to provide information regarding how -the database files are utilized and document the various record structures. -With the exception of the brief section on the record buffer, the -information presented in this chapter is not required to use the -Xbase library. It is mainly information describing internal file -structures utilized by the Xbase routines.

    - -Xbase DBF files are comprised of a variable length header record which stores -information about the file and describes -the fixed length record format, followed by a series of fixed length -data records. -

    - -Each fixed length data record is preceded by a one byte indicator -which identifiies if the record has been deleted. If the record is -not deleted, the indicator is a space (0x20). If deleted, the -indicator contains an asterisk (0x2A). Data fields are stored in records -without field separators or record terminators.

    - -In earlier releases of dBASE, there is an ASCII NULL character -between the $0D end of header indicator and the start of the data. -This NULL was removed starting with dBASE III Plus, making a Plus -header one byte shorter than an identically structured III file. -The methods documented in the Xbase software and documentation follow -the more recent version where the NULL character is not included. -

    - -Each database file is comprised of zero, one or many records. A record is -comprised of fields. Only one record is accessed at a time.

    - -Zero, one or many database files can be open simultaneously.

    - -
    - -

    The Record Buffer

    - -When using the Xbase routines, each open data file has a record buffer -which is manipulated by calling the database, index and field routines. -

    - -If AutoCommit is turned on (Default), updates are committed from -the record buffer to the database when a write, or append is performed. -The library automatically writes updates to the database if the buffer has -been updated and the record is repositioned or the database is closed. -

    - -If AutoCommit is turned off, updates will need to be explicity -committed to the database file with one of dbf->Put(), dbf->Append() -or dbf->Commit() command depending on context.. -Updates can be cancelled with the Abort() command. -

    -The record buffer is not used for handling the actual data portion of -memo fields. When working with memo fields, the application program must -allocate enough buffer space for reading and writing memo fields or use -the xbString class for handling memo data.

    - -Internal to the library, there is an additional record buffer which -stores the original value of the data record before any changes are made. -This is used by the index routines for finding and deleting original key -values from any open indices before adding the new keys. If the key values -are not changed, no index updates occur. Additionally, calling the Abort() -method will back out any updates to the record buffer. - - -

    - -
    -
    -

    Xbase Database File Header - DBF Version III and Version IV

    - -The Xbase file header, located at the beginning of the database, describes -the .DBF database. Knowledge of this structure is not necessary to -effectively utilize the Xbase64 libraries.


    - - - -
    PositionLengthDescription -
    01 bytefile version number
    - (03H without a .DBT file)
    - (83H with a .DBT file) -
    1-33 bytesdate of last update
    - (YY MM DD) in binary format -
    4-732 bit numbernumber of records in data file -
    8-916 bit numberlength of header structure -
    10-1116 bit numberlength of the record -
    12-3120 bytesreserved -
    32-n32 bytes eachfield descriptor record (see below) -
    n+11 byte0DH as the field terminator -
    -

    - -
    -
    -

    Xbase Field Descriptor Record

    -The Xbase field descriptor record stores information about each field in the -database. Each database has from 1 to 1024 fields. -Knowledge of this structure is not necessary to -effectively utilize the Xbase libraries.


    - - - -
    PositionLengthDescription -
    0-1011 bytesfield name in ASCII zero-filled -
    111 bytefield type in ASCII (C N L D or M) -
    12-1532 bit numberfield data address -
    161 bytefield length in binary -
    171 bytefield decimal count in binary -
    18-3114 bytesreserved bytes (version 1.00) -
    -

    -
    -
    -

    Field Data Format

    -Data are stored in ASCII format in the database as follows:

    - - -
    DATA TYPEDATA RECORD STORAGE -
    CharacterASCII characters, left justified, right blank filled -
    Date(8 digits in YYYYMMDD format, such as
    - 19601007 for October 7, 1960) -
    Logical? Y y N n T t F f (? when not initialized) -
    Memo10 digits representing a .DBT block number -
    Numeric. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled -
    Float (Version IV only). 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled -
    -

    - -
    -

    Memo Fields

    - -Memo fields store variable length data elements in a seperate .DBT file. -The main .DBF file maintains a ten byte field which is used by the Xbase -routines for determining the location of the data in the .DBT file. -

    - -Xbase DBMS supports both dBASE III+ and dBASE IV version memo files. -The version IV files are somewhat more efficient in that they reuse -unused memo space when data are deleted or freed from use. With version -III files, all new updates are appended to the end of the file and the -unused space is not reclaimed until the datafiles are packed. -

    - -Memo fields can be used for storing a variety of date type. However, -type 3 files are limited to storing textual data because most internal -memo field processing in a type 3 file relies on two contiguous 0x1a -charaters.

    - -Type 4 memo fields can be used for storing BLOB (binary large object) -data reliably, as the internal file structure does not rely on any -special characters embedded in the data.

    - -A special note on storing string data in a memo field. For those users -that are new to C/C++ programming, string fields typically end with -a null (0x00) terminator character. As a general rule of thumb when using -the library, add one to the length of any string when -specifying the length of the data. This stores the null terminating byte -with the data. For example, when storing string "This is a string" -specified size should be 17, not 16. - - -

    Technical memo file information

    - -The following info on memo fields is for the curious. -It is not required -reading if you don't need to know the internals.

    - -
  • Memo files are made up of one or more blocks -
  • For version III files, the block size is 512 -
  • For version IV files, the block size is a multiple of 512 -
  • The minimum amout of space necessary to store one memo field is -one block or 512 bytes. -
  • The default block size can be adjusted by manipulating the -XB_DBT_BLOCK_SIZE macro in the options.h file. - - -
  • The main .DBF file maintains a ten byte numeric field which is blank if -no memo data exists for a given field. Otherwise it contains a number, which -when multiplied by the block size, points to the offset in the file of the head -block in the file/ -

    - -For version 3 memo field files, there are two fields in the head block of -the file, NextBlockNo and Version. Depending on the -Xbase software, some vendors products update these two fields, some do not. -The Xbase library keeps the fields updated, but does not rely on them to -be valued with correct data. This helps to support maximum compatibility -amoungst all Xbase tools available.

    - -For version 4 memo field files, -the first block in the .DBT file is a header block which is comprised of -8 bytes of data which maintain the file's block size and the next free -block available in the file. Blocks two through n contain the actual -memo data. A chain of empty blocks is maintained within the file for -potential future use. When an add or update routine executes, it first -attempts to find a spot in a set of blocks which were earlier allocated, -but not currently in use for the data. If no free spot is found, data are -appended to the end of the file. - -The free block chain is sorted in block number order. When blocks of -data are freed and added to the free block chain, the routines will attempt -to concatonate free block chains togethor where possible. When a delete -occurs, or an update which requires less space occurs, the new free space -is added to the free block chain. - -

    - -

    Various Memo File Block Types

    - - - -
    Valid Block Types -
    Head Block -
    Only data block for memo field -
    First of several contiguous data block set -
    2-n of contiguous data block set -
    Only data block in free chain (version IV only) -
    First of several contiguous free block set (version IV only) -
    2-n of contiguous free block set (type 4 only) -
    -

    - -

    Head Block Structure

    - - -
    1-4LONGNext Block ID -
    5-8LONGNot used all 0x00's -
    9-16CHAR(8)Filename (Version IV Only) -
    17CHARVersion (0x03 = Version III, 0x00 = Version IV) -
    18-20CHAR(3)Not used all 0x00's -
    21-22SHORTBlock Size (Version IV only ) -
    23-Remainder of blockCHARNot used -
    -

    - - -

    Version IV Head Data Block Structure

    - - -
    xbShort0-1-1 -
    xbShort2-3Starting position of data (always 8 ?) -
    xbLong4-7Length of data includes first 8 bytes -
    char (9) - Blocksize8-15Data -
    -

    - -

    Version IV Head Free Block Structure

    - - -
    xbLong0-3Next free block in the free block chain -
    xbLong4-7Number of free blocks in this contiguous free - block set -
    -

    -Version 3 and 4 memo fields are terminated with two contiguous 0x1A bytes of data. -

    -
    -


    - - - diff --git a/docs/html/xbc2.html b/docs/html/xbc2.html new file mode 100755 index 0000000..72a6009 --- /dev/null +++ b/docs/html/xbc2.html @@ -0,0 +1,267 @@ + + +Xbase DBMS Chapter 2 + +

    Database Overview

    +

    Chapter Updated 11/21/22


    + +The objective of this chapter is to provide information regarding how +the database files are utilized and document the various record structures. +With the exception of the brief section on the record buffer, the +information presented in this chapter is not required to use the +Xbase library. It is mainly information describing internal file +structures utilized by the Xbase routines.

    + +Xbase DBF files are comprised of a variable length header record which stores +information about the file and describes +the fixed length record format, followed by a series of fixed length +data records. +

    + +Each fixed length data record is preceded by a one byte indicator +which identifiies if the record has been deleted. If the record is +not deleted, the indicator is a space (0x20). If deleted, the +indicator contains an asterisk (0x2A). Data fields are stored in records +without field separators or record terminators.

    + +In earlier releases of dBASE, there is an ASCII NULL character +between the $0D end of header indicator and the start of the data. +This NULL was removed starting with dBASE III Plus, making a Plus +header one byte shorter than an identically structured III file. +The methods documented in the Xbase software and documentation follow +the more recent version where the NULL character is not included. +

    + +Each database file is comprised of zero, one or many records. A record is +comprised of fields. Only one record is accessed at a time.

    + +Zero, one or many database files can be open simultaneously.

    + +
    + +

    The Record Buffer

    + +When using the Xbase routines, each open data file has a record buffer +which is manipulated by calling the database, index and field routines. +

    + +If AutoCommit is turned on (Default), updates are committed from +the record buffer to the database when a write, or append is performed. +The library automatically writes updates to the database if the buffer has +been updated and the record is repositioned or the database is closed. +

    + +If AutoCommit is turned off, updates will need to be explicity +committed to the database file with one of dbf->Put(), dbf->Append() +or dbf->Commit() command depending on context.. +Updates can be cancelled with the Abort() command. +

    +The record buffer is not used for handling the actual data portion of +memo fields. When working with memo fields, the application program must +allocate enough buffer space for reading and writing memo fields or use +the xbString class for handling memo data.

    + +Internal to the library, there is an additional record buffer which +stores the original value of the data record before any changes are made. +This is used by the index routines for finding and deleting original key +values from any open indices before adding the new keys. If the key values +are not changed, no index updates occur. Additionally, calling the Abort() +method will back out any updates to the record buffer. + + +

    + +
    +
    +

    Xbase Database File Header - DBF Version III and Version IV

    + +The Xbase file header, located at the beginning of the database, describes +the .DBF database. Knowledge of this structure is not necessary to +effectively utilize the Xbase64 libraries.


    + + + +
    PositionLengthDescription +
    01 bytefile version number
    + (03H without a .DBT file)
    + (83H with a .DBT file) +
    1-33 bytesdate of last update
    + (YY MM DD) in binary format +
    4-732 bit numbernumber of records in data file +
    8-916 bit numberlength of header structure +
    10-1116 bit numberlength of the record +
    12-3120 bytesreserved +
    32-n32 bytes eachfield descriptor record (see below) +
    n+11 byte0DH as the field terminator +
    +

    + +
    +
    +

    Xbase Field Descriptor Record

    +The Xbase field descriptor record stores information about each field in the +database. Each database has from 1 to 1024 fields. +Knowledge of this structure is not necessary to +effectively utilize the Xbase libraries.


    + + + +
    PositionLengthDescription +
    0-1011 bytesfield name in ASCII zero-filled +
    111 bytefield type in ASCII (C N L D or M) +
    12-1532 bit numberfield data address +
    161 bytefield length in binary +
    171 bytefield decimal count in binary +
    18-3114 bytesreserved bytes (version 1.00) +
    +

    +
    +
    +

    Field Data Format

    +Data are stored in ASCII format in the database as follows:

    + + +
    DATA TYPEDATA RECORD STORAGE +
    CharacterASCII characters, left justified, right blank filled +
    Date(8 digits in YYYYMMDD format, such as
    + 19601007 for October 7, 1960) +
    Logical? Y y N n T t F f (? when not initialized) +
    Memo10 digits representing a .DBT block number +
    Numeric. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled +
    Float (Version IV only). 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled +
    +

    + +
    +

    Memo Fields

    + +Memo fields store variable length data elements in a seperate .DBT file. +The main .DBF file maintains a ten byte field which is used by the Xbase +routines for determining the location of the data in the .DBT file. +

    + +Xbase DBMS supports both dBASE III+ and dBASE IV version memo files. +The version IV files are somewhat more efficient in that they reuse +unused memo space when data are deleted or freed from use. With version +III files, all new updates are appended to the end of the file and the +unused space is not reclaimed until the datafiles are packed. +

    + +Memo fields can be used for storing a variety of date type. However, +type 3 files are limited to storing textual data because most internal +memo field processing in a type 3 file relies on two contiguous 0x1a +charaters.

    + +Type 4 memo fields can be used for storing BLOB (binary large object) +data reliably, as the internal file structure does not rely on any +special characters embedded in the data.

    + +A special note on storing string data in a memo field. For those users +that are new to C/C++ programming, string fields typically end with +a null (0x00) terminator character. As a general rule of thumb when using +the library, add one to the length of any string when +specifying the length of the data. This stores the null terminating byte +with the data. For example, when storing string "This is a string" +specified size should be 17, not 16. + + +

    Technical memo file information

    + +The following info on memo fields is for the curious. +It is not required +reading if you don't need to know the internals.

    + +
  • Memo files are made up of one or more blocks +
  • For version III files, the block size is 512 +
  • For version IV files, the block size is a multiple of 512 +
  • The minimum amout of space necessary to store one memo field is +one block or 512 bytes. +
  • The default block size can be adjusted by manipulating the +XB_DBT_BLOCK_SIZE macro in the options.h file. + + +
  • The main .DBF file maintains a ten byte numeric field which is blank if +no memo data exists for a given field. Otherwise it contains a number, which +when multiplied by the block size, points to the offset in the file of the head +block in the file/ +

    + +For version 3 memo field files, there are two fields in the head block of +the file, NextBlockNo and Version. Depending on the +Xbase software, some vendors products update these two fields, some do not. +The Xbase library keeps the fields updated, but does not rely on them to +be valued with correct data. This helps to support maximum compatibility +amoungst all Xbase tools available.

    + +For version 4 memo field files, +the first block in the .DBT file is a header block which is comprised of +8 bytes of data which maintain the file's block size and the next free +block available in the file. Blocks two through n contain the actual +memo data. A chain of empty blocks is maintained within the file for +potential future use. When an add or update routine executes, it first +attempts to find a spot in a set of blocks which were earlier allocated, +but not currently in use for the data. If no free spot is found, data are +appended to the end of the file. + +The free block chain is sorted in block number order. When blocks of +data are freed and added to the free block chain, the routines will attempt +to concatonate free block chains togethor where possible. When a delete +occurs, or an update which requires less space occurs, the new free space +is added to the free block chain. + +

    + +

    Various Memo File Block Types

    + + + +
    Valid Block Types +
    Head Block +
    Only data block for memo field +
    First of several contiguous data block set +
    2-n of contiguous data block set +
    Only data block in free chain (version IV only) +
    First of several contiguous free block set (version IV only) +
    2-n of contiguous free block set (type 4 only) +
    +

    + +

    Head Block Structure

    + + +
    1-4LONGNext Block ID +
    5-8LONGNot used all 0x00's +
    9-16CHAR(8)Filename (Version IV Only) +
    17CHARVersion (0x03 = Version III, 0x00 = Version IV) +
    18-20CHAR(3)Not used all 0x00's +
    21-22SHORTBlock Size (Version IV only ) +
    23-Remainder of blockCHARNot used +
    +

    + + +

    Version IV Head Data Block Structure

    + + +
    xbShort0-1-1 +
    xbShort2-3Starting position of data (always 8 ?) +
    xbLong4-7Length of data includes first 8 bytes +
    char (9) - Blocksize8-15Data +
    +

    + +

    Version IV Head Free Block Structure

    + + +
    xbLong0-3Next free block in the free block chain +
    xbLong4-7Number of free blocks in this contiguous free + block set +
    +

    +Version 3 and 4 memo fields are terminated with two contiguous 0x1A bytes of data. +

    +
    +


    + + + diff --git a/docs/html/xbc3.htm b/docs/html/xbc3.htm deleted file mode 100755 index f2f4a1d..0000000 --- a/docs/html/xbc3.htm +++ /dev/null @@ -1,73 +0,0 @@ - - -Xbase DBMS Chapter 3 - -

    Fields and Strings

    -

    Chapter Updated 11/21/22


    - -

    -The main objective of this chapter is to provide basic information regarding -various field types supported by the library.

    - -Field names can be up to ten bytes in length and can contain characters, numbers -or special characters in the name. The field methods are used to manipulate -the data in a record of a data file. There are several types of fields.

    - - - - - -

    Field Types

    TypeSizeAllowable ValuesSchema Value -
    Numeric0 - 17(include sign and decimal point+ - . 0 through 9XB_NUMERIC_FLD -
    Character0 - 254AnythingXB_CHAR_FLD -
    Date8CCYYMMDDXB_DATE_FLD -
    Floating Point0 - 17 (includes sign and decimal point+ - . 0 through 9XB_FLOAT_FLD -
    Logical1? Y y N n T t F f (? - uninitialized)XB_LOGICAL_FLD -
    MemoFixed length portion - 10
    Variable length 0 - 32760 -
    Type III - Text
    Type IV - Anything
    XB_MEMO_FLD -
    - -

    -Field names, types and lengths are defined when a data file is created. -After the file is created, the field characteristics can not be changed. To -change field characteristics, a new database table must be defined with the new -field requirements.

    - -

    Memo Fields

    - -Memo fields are variable length data fields which are stored in two parts. -This first part is a ten byte field which is stored -in the fixed length record of the .DBF file. The variable data is stored in -a seperate .DBT file in 512 byte blocks. The ten byte field in the fixed -length portion of the record points to a .DBT block number.

    - -There are two versions of memo data files type III and type IV. Type IV -is more advanced in that released space can be reused and it also -supports BLOB data. The type III file is older technology, does not -support dynamic space reclamation and only supports string data. -See method xbDbf::SetVersion for controlling which version type you are -using. - -

    -To utilize memo fields, the application program must allocate a buffer -which is large enough to handle the memo data.

    - -

    Fields and Field Numbers

    - -The Xbase routines can access field data via using field names or field -numbers. Field numbers are numbered 0-n where the first field in a datafile -is field 0 going through the last field n. Accessing fields by number is -slightly more efficient than accessing by name.

    - -

    Strings

    - -Xbase64 includes support for a string class xbString. -The xbString class interface was originally derived from the -Draft Standard C++ Library by P.J. Plauger and modified. -If you are familiar with other string classes, this one should be similar. -Strings can be used to manage strings of character data. -

    -
    -


    - - diff --git a/docs/html/xbc3.html b/docs/html/xbc3.html new file mode 100755 index 0000000..f2f4a1d --- /dev/null +++ b/docs/html/xbc3.html @@ -0,0 +1,73 @@ + + +Xbase DBMS Chapter 3 + +

    Fields and Strings

    +

    Chapter Updated 11/21/22


    + +

    +The main objective of this chapter is to provide basic information regarding +various field types supported by the library.

    + +Field names can be up to ten bytes in length and can contain characters, numbers +or special characters in the name. The field methods are used to manipulate +the data in a record of a data file. There are several types of fields.

    + + + + + +

    Field Types

    TypeSizeAllowable ValuesSchema Value +
    Numeric0 - 17(include sign and decimal point+ - . 0 through 9XB_NUMERIC_FLD +
    Character0 - 254AnythingXB_CHAR_FLD +
    Date8CCYYMMDDXB_DATE_FLD +
    Floating Point0 - 17 (includes sign and decimal point+ - . 0 through 9XB_FLOAT_FLD +
    Logical1? Y y N n T t F f (? - uninitialized)XB_LOGICAL_FLD +
    MemoFixed length portion - 10
    Variable length 0 - 32760 +
    Type III - Text
    Type IV - Anything
    XB_MEMO_FLD +
    + +

    +Field names, types and lengths are defined when a data file is created. +After the file is created, the field characteristics can not be changed. To +change field characteristics, a new database table must be defined with the new +field requirements.

    + +

    Memo Fields

    + +Memo fields are variable length data fields which are stored in two parts. +This first part is a ten byte field which is stored +in the fixed length record of the .DBF file. The variable data is stored in +a seperate .DBT file in 512 byte blocks. The ten byte field in the fixed +length portion of the record points to a .DBT block number.

    + +There are two versions of memo data files type III and type IV. Type IV +is more advanced in that released space can be reused and it also +supports BLOB data. The type III file is older technology, does not +support dynamic space reclamation and only supports string data. +See method xbDbf::SetVersion for controlling which version type you are +using. + +

    +To utilize memo fields, the application program must allocate a buffer +which is large enough to handle the memo data.

    + +

    Fields and Field Numbers

    + +The Xbase routines can access field data via using field names or field +numbers. Field numbers are numbered 0-n where the first field in a datafile +is field 0 going through the last field n. Accessing fields by number is +slightly more efficient than accessing by name.

    + +

    Strings

    + +Xbase64 includes support for a string class xbString. +The xbString class interface was originally derived from the +Draft Standard C++ Library by P.J. Plauger and modified. +If you are familiar with other string classes, this one should be similar. +Strings can be used to manage strings of character data. +

    +
    +


    + + diff --git a/docs/html/xbc4.htm b/docs/html/xbc4.htm deleted file mode 100755 index f494629..0000000 --- a/docs/html/xbc4.htm +++ /dev/null @@ -1,80 +0,0 @@ - - -Xbase DBMS Chapter 4 - -

    Date Processing

    -

    Chapter Updated 2/12/99


    - -The objective of this chapter is to provide information regarding -the basic concepts of date arithmetic and supply generic -C/C++ date methods.

    - -

    Leap Years

    - -Due to the fact that it actually takes about 365 1/4 days for -the earth to circle the sun, every fourth year and every fourth -century have an extra day added to the end of February and the year -is called a leap year. Leap years have 366 days, non leap years -have 365 days. The following code segment describes how to -determine if a given year is a leap year. - -A leap year is a year having 366 days, which can be evenly -divisible by 4 and not by 100 or divisible by 400. - -There are also leap centuries. Leap centuries are years which -are evenly divisible by 400. - -To calculate a leap year, the following code segment can be used - - - int year; - - if(( year % 4 == 0 && year % 100 != 0 ) || year % 400 = 0 ) - LEAP_YEAR = TRUE; - else - LEAP_YEAR = FALSE - - - -

    Julian Dates

    - -Around the time of Jesus Christ, a fellow with the name of Julias Ceasar -established the Julian calendar. The Julian calendar established every -fourth year as a leap year with 366 days and all other years having 365 days. -The months were set up the same as they are with a Gregorian calendar, which -is what we use today. A Julian date is defined as as the number of days from the -first day of the year; February 1 would have a Julian day of 32.

    - -From a programmer's perspective, Julian dates are useful for doing date -arithmetic, determining the difference between two dates or calculating -a future or past date.

    - -To determine the difference between two dates, convert both dates to a -Julian date and subtract one from the other.

    - -To calculate a future or past date, convert the base date to a Julian date, -add (or subtract) the number of days necessary to (from) it and convert the -julian date back to a Gregorian date.

    - -The Julian date routines use a base date of 01/01/0001.

    - -

    Gregorian Dates

    - -In 1582, Pope Gregor XIII introduced a corrected form of the Julian calendar. -Every 4th year still has 366 days except for century years. Century years -were added as leap years if evenly divisible by 400. The year 2000 is a leap century. -

    - -The methods supplied with this software are based on gregorian dates with -the format of CCYYMMDD for century, year, month and day.

    - - -

    Date Formats

    - -All dates are stored in the .DBF files with format CCYYMMDD.

    -All date routines work with dates formated with the same CCYYMMDD format.

    - -
    -



    - - diff --git a/docs/html/xbc4.html b/docs/html/xbc4.html new file mode 100755 index 0000000..a0275ed --- /dev/null +++ b/docs/html/xbc4.html @@ -0,0 +1,81 @@ + + +Xbase DBMS Chapter 4 + +

    Date Processing

    +

    Chapter Updated 12/09/22


    + +The objective of this chapter is to provide information regarding +the basic concepts of date arithmetic and supply generic +C/C++ date methods.

    + +

    Leap Years

    + +Due to the fact that it actually takes about 365 1/4 days for +the earth to circle the sun, every fourth year and every fourth +century have an extra day added to the end of February and the year +is called a leap year. Leap years have 366 days, non leap years +have 365 days. The following code segment describes how to +determine if a given year is a leap year. + +A leap year is a year having 366 days, which can be evenly +divisible by 4 and not by 100 or divisible by 400. + +There are also leap centuries. Leap centuries are years which +are evenly divisible by 400. + +To calculate a leap year, the following code segment can be used + + + int year; + + if(( year % 4 == 0 && year % 100 != 0 ) || year % 400 = 0 ) + LEAP_YEAR = TRUE; + else + LEAP_YEAR = FALSE + + + +

    Julian Dates

    + +Around the time of Jesus Christ, a fellow with the name of Julias Ceasar +established the Julian calendar. The Julian calendar established every +fourth year as a leap year with 366 days and all other years having 365 days. +The months were set up the same as they are with a Gregorian calendar, which +is what we use today. A Julian date is defined as as the number of days from the +first day of the year; February 1 would have a Julian day of 32.

    + +From a programmer's perspective, Julian dates are useful for doing date +arithmetic, determining the difference between two dates or calculating +a future or past date.

    + +To determine the difference between two dates, convert both dates to a +Julian date and subtract one from the other.

    + +To calculate a future or past date, convert the base date to a Julian date, +add (or subtract) the number of days necessary to (from) it and convert the +julian date back to a Gregorian date.

    + +The Julian date routines use a base date of 01/01/0001. DBase julian Dates have an offset of 1721425L, reason unknown. +

    + +

    Gregorian Dates

    + +In 1582, Pope Gregor XIII introduced a corrected form of the Julian calendar. +Every 4th year still has 366 days except for century years. Century years +were added as leap years if evenly divisible by 400. The year 2000 is a leap century. +

    + +The methods supplied with this software are based on gregorian dates with +the format of CCYYMMDD for century, year, month and day.

    + + +

    Date Formats

    + +All dates are stored in the .DBF files with format CCYYMMDD.

    +All date routines work with dates formated with the same CCYYMMDD format.

    + +
    +



    + + diff --git a/docs/html/xbc5.htm b/docs/html/xbc5.htm deleted file mode 100755 index f798125..0000000 --- a/docs/html/xbc5.htm +++ /dev/null @@ -1,205 +0,0 @@ - - -Xbase DBMS Chapter 5 - -

    Expression Handling

    -

    Chapter Updated 11/27/22


    - -

    Overview

    - -The main objective of this chapter is to provide information regarding the -basic concepts of using the Xbase64 Expression module.

    - -The Xbase64 library includes an expression parsing routine which assists -application programmers by providing a high level data manipulation tool and -also allows for building complex index keys. - -The functions included were derived from dBASE III Plus, dBASE IV and Clipper. -

    -Expressions are primarily used for index key definitions and filter criteria, but -can also be used for other tasks as well. -

    - -

    Internal fuctioning

    -The expression module works in two phases. Firstly, method -ParseExpression is called and builds an expression tree from -all the components of the expression. The tree is made up of individual -nodes. The expression is checked for valid field names, literals, -operands and functions. Any field references are resolved. If fields -are used in an expression and the database name for the field is not -included in the name with the -> operand, the routines assume the -associated database has been successfully opened. -

    -Secondly, method ProcessExpression is called to process the -expression tree created by ParseExpression(). The routine parses each -node in the expression tree, executing functions, processing operands -and manipulating data to produce the desired result.

    - -If an expression will be processed repeatedly, it is best to pre-parse the -tree using ParseExpression, then for each new call to the expression, -execute method ProcessExpression which processes the tree. - - -

    Expression Return Types

    -Expressions will return a type of CHAR, NUMERIC, DATE or LOGICAL.

    - -An expression return type can be determined with method -GetExpressionResultType after parsing it.

    - -Expressions returning a return type of CHAR are limited to a 200 byte internal -buffer. There is also a 100 byte limit for NDX and MDX index key support. If -the 200 byte limit is not large enough for your application, adjust field -enum { WorkBufMaxLen = 200 }; in file exp.h. - -

    - - - - - - -
    Return TypeXBase Type
    CHARxbString
    NUMERICxbDouble
    DATExbDate
    LOGICALxbBool
    - -

    -Date routines return an xbDate result. In addition, the date value can be -extracted using GetStringResult() which returns YYYYMMDD or GetDoubleResult() -which returns a julian value. - -

    -

    Expression Functions

    -Each expression function also has a corresponding C++ function. It is -slightly more efficient to call the C++ functions directly, rather than -execute the expression parsing routines.

    - -To add a new function, find a function that is similar to what you need, copy -the code and modify xbxbase.h, xbfuncs.cpp, xbexp.cpp and xb_test_expression.cpp. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Function NameReturn TypeDescription
    ABSNCalculate absolute value of numeric expression
    ALLTRIMCTrim leading andtrailing whitespace from a string
    ASCNReturn ASCII code for first character in a string
    ATNReturn starting position of a string within a string
    CDOWCRetun character weekday name for a date
    CHRCConvert numeric expression to a character
    CMONTHCReturn month name for a date
    CTODDReturn date from a character date input
    DATEDReturn system date
    DAYNReturn the day of the month from a date
    DELCReturn record deletion status for a record
    DELETEDLReturn record deletion status for a record<
    DESCEND1Clipper DESCEND function
    DOWNReturn number of day of week
    DTOCCReturn character date from input date
    DTOSCReturn character CCYYMMDD date from input date
    EXPNReturn exponent value
    IIFCImmediate If
    INTNConvert number to integer, truncate any decimals
    ISALPHALCheck if string begins with alpha character
    ISLOWERLCheck if string begins with lower case alpha character
    ISUPPERLCheck if string begins with upper case character
    LEFTCReturn left characters from a string
    LENNReturn lenght of string
    LOGNCalculate logarithm
    LOWERCConvert upper case to lower case
    LTRIMCTrim left side of a string
    MAXNReturn higher of two values
    MINNReturn lesser of two values
    MONTHNReturn number of month for a given date
    RECNONReturn current rec number for a given table
    RECCOUNTNReturn number of records in a given table
    REPLICATECRepeat character expression N times
    RIGHTCReturn right characters from as tring
    RTRIMCTrim right side of string
    SPACECGenerate a string of N spaces
    SQRTNCalculate square root
    STODDConvert 8 byte CCYYMMDD date to date
    STRCConvert number to character string
    STRZEROCConvert number to character string with leading zeroes
    SUBSTRCExtract portion oif one string from another string
    TRIMCTrim left and right sides of a string
    UPPERCConver lower case to upper case
    VALNConvert numeric characters to number
    YEARNReturn year for a given date
    - -

    -

    Expression Components

    -Expressions are made up of one or more tokens. A token is one of literal, -database field, operand or function. Literals are either numeric or character. -Character literals are enclosed in 'single' or "double" quotes. numeric -literals are a series of one or more contiguous numerals, ".", "+" or "-'". -

    -A field is simply a field name in the default database, or is in the form -of database->fieldname. - - -

    -

    Expression Literals

    - - - - - - -
    TypeExample
    CHAR"literal" or 'literal'
    NUMERIC+99999.99
    DATE{10/07/60} or {02/09/1989}
    - - - -

    -

    Expression Operators

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeOperatorPrecedenceResultNotes
    Parens()12
    Numeric Operator+ (unary)11N
    Numeric Operator- (unary)11N
    Numeric Operator--X10N
    Numeric Operator++X10N
    Numeric Operator**9N
    Numeric Operator^9N
    Numeric Operator%8N
    Numeric Operator*8N
    Numeric Operator/8N
    Numeric Operator+ Addition7N
    Numeric Operator- Subtraction7N
    Numeric OperatorX--6N
    Numeric OperatorX++6N
    String Operator+5CConcatonate 1
    String Operator-5CConcatonate 2
    Relational Operator=4LN,C,D
    Relational Operator#, <>, !=4N,C,D
    Relational Operator<4LN,C,D
    Relational Operator>4LN,C,D
    Relational Operator<=4LN,C,D
    Relational Operator>=4LN,C,D
    Relational Operator$4LN,C,D
    Relational Operator==Clipper operator, not implemented yet
    Logical OperatorNOT3LEvaluated after all math and relational operators
    Logical Operator.NOT.3LEvaluated after all math and relational operators
    Logical OperatorAND2LEvaluated after all math and relational operators
    Logical Operator.AND.2LEvaluated after all math and relational operators
    Logical OperatorOR1LEvaluated after all math and relational operators
    Logical Operator.OR.1LEvaluated after all math and relational operators
    - -

    -

    Examples

    -
  • CUSTOMERS->LNAME + ", " + CUSTOMERS->FNAME -
  • LNAME + ", " + FNAME -
  • STARTDT + 90 -
  • YEAR( TODAY() ) -
  • IIF( "A" = "N", "true result", "false result" ) -
  • IIF( "A" = "N" .OR. 2 > 1 , "true result", "false result" ) -
  • IIF( .NOT. "A" = "N", "true result", "false result" ) -
  • .NOT. DELETED() -

    - - -
    -



    - - diff --git a/docs/html/xbc5.html b/docs/html/xbc5.html new file mode 100755 index 0000000..9708b17 --- /dev/null +++ b/docs/html/xbc5.html @@ -0,0 +1,208 @@ + + +Xbase DBMS Chapter 5 + +

    Expression Handling

    +

    Chapter Updated 12/26/22


    + +

    Overview

    + +The main objective of this chapter is to provide information regarding the +basic concepts of using the Xbase64 Expression module.

    + +The Xbase64 library includes an expression parsing routine which assists +application programmers by providing a high level data manipulation tool and +also allows for building complex index keys. + +The functions included were derived from dBASE III Plus, dBASE IV and Clipper. +

    +Expressions are primarily used for index key definitions and filter criteria, but +can also be used for other tasks as well. +

    + +

    Internal fuctioning

    +The expression module works in two phases. Firstly, method +ParseExpression is called and builds an expression tree from +all the components of the expression. The tree is made up of individual +nodes. The expression is checked for valid field names, literals, +operands and functions. Any field references are resolved. If fields +are used in an expression and the database name for the field is not +included in the name with the -> operand, the routines assume the +associated database has been successfully opened. +

    +Secondly, method ProcessExpression is called to process the +expression tree created by ParseExpression(). The routine parses each +node in the expression tree, executing functions, processing operands +and manipulating data to produce the desired result.

    + +If an expression will be processed repeatedly, it is best to pre-parse the +tree using ParseExpression, then for each new call to the expression, +execute method ProcessExpression which processes the tree. + +

    Expression Return Types

    +Expressions will return a type of CHAR, NUMERIC, DATE or LOGICAL.

    + +An expression return type can be determined with method +GetExpressionResultType after parsing it.

    + +Expressions returning a return type of CHAR are limited to a 200 byte internal +buffer. There is also a 100 byte limit for NDX and MDX index key support. If +the 200 byte limit is not large enough for your application, adjust field +enum { WorkBufMaxLen = 200 }; in file exp.h. + +

    + + + + + + +
    Return TypeXBase Type
    CHARxbString
    NUMERICxbDouble
    DATExbDate
    LOGICALxbBool
    + +

    +Date routines return an xbDate result. In addition, the date value can be +extracted using GetStringResult() which returns YYYYMMDD or GetDoubleResult() +which returns a julian value. + +

    +

    Expression Functions

    +Each expression function also has a corresponding C++ function. It is +slightly more efficient to call the C++ functions directly, rather than +execute the expression parsing routines.

    + +To add a new function, find a function that is similar to what you need, copy +the code and modify xbxbase.h, xbfuncs.cpp, xbexp.cpp and xb_test_expression.cpp.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Function NameReturn TypeDescription
    ABSNCalculate absolute value of numeric expression
    ALLTRIMCTrim leading andtrailing whitespace from a string
    ASCNReturn ASCII code for first character in a string
    ATNReturn starting position of a string within a string
    CDOWCRetun character weekday name for a date
    CHRCConvert numeric expression to a character
    CMONTHCReturn month name for a date
    CTODDReturn date from a character date input
    DATEDReturn system date
    DAYNReturn the day of the month from a date
    DELCReturn record deletion status for a record
    DELETEDLReturn record deletion status for a record<
    DESCEND1Clipper DESCEND function
    DOWNReturn number of day of week
    DTOCCReturn character date from input date
    DTOSCReturn character CCYYMMDD date from input date
    EXPNReturn exponent value
    IIFCImmediate If
    INTNConvert number to integer, truncate any decimals
    ISALPHALCheck if string begins with alpha character
    ISLOWERLCheck if string begins with lower case alpha character
    ISUPPERLCheck if string begins with upper case character
    LEFTCReturn left characters from a string
    LENNReturn lenght of string
    LOGNCalculate logarithm
    LOWERCConvert upper case to lower case
    LTRIMCTrim left side of a string
    MAXNReturn higher of two values
    MINNReturn lesser of two values
    MONTHNReturn number of month for a given date
    RECNONReturn current rec number for a given table
    RECCOUNTNReturn number of records in a given table
    REPLICATECRepeat character expression N times
    RIGHTCReturn right characters from as tring
    RTRIMCTrim right side of string
    SPACECGenerate a string of N spaces
    SQRTNCalculate square root
    STODDConvert 8 byte CCYYMMDD date to date
    STRCConvert number to character string
    STRZEROCConvert number to character string with leading zeroes. Clipper Function.
    SUBSTRCExtract portion oif one string from another string
    TRIMCTrim left and right sides of a string
    UPPERCConver lower case to upper case
    VALNConvert numeric characters to number
    YEARNReturn year for a given date
    + +

    +

    Expression Components

    +Expressions are made up of one or more tokens. A token is one of literal, +database field, operand or function. Literals are either numeric or character. +Character literals are enclosed in 'single' or "double" quotes. numeric +literals are a series of one or more contiguous numerals, ".", "+" or "-'". +

    +A field is simply a field name in the default database, or is in the form +of database->fieldname. + + +

    +

    Expression Literals

    + + + + + + +
    TypeExample
    CHAR"literal" or 'literal'
    NUMERIC+99999.99
    DATE{10/07/60} or {02/09/1989}
    + +

    +

    Expression Operators

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeOperatorPrecedenceResultNotes
    Parens()12
    Numeric Operator+ (unary)11N
    Numeric Operator- (unary)11N
    Numeric Operator--X10N
    Numeric Operator++X10N
    Numeric Operator**9N
    Numeric Operator^9N
    Numeric Operator%8N
    Numeric Operator*8N
    Numeric Operator/8N
    Numeric Operator+ Addition7N
    Numeric Operator- Subtraction7N
    Numeric OperatorX--6N
    Numeric OperatorX++6N
    String Operator+5CConcatonate 1
    String Operator-5CConcatonate 2
    Relational Operator=4LN,C,D
    Relational Operator#, <>, !=4N,C,D
    Relational Operator<4LN,C,D
    Relational Operator>4LN,C,D
    Relational Operator<=4LN,C,D
    Relational Operator>=4LN,C,D
    Relational Operator$4LN,C,D
    Relational Operator==Clipper operator, not implemented yet
    Logical OperatorNOT3LEvaluated after all math and relational operators
    Logical Operator.NOT.3LEvaluated after all math and relational operators
    Logical OperatorAND2LEvaluated after all math and relational operators
    Logical Operator.AND.2LEvaluated after all math and relational operators
    Logical OperatorOR1LEvaluated after all math and relational operators
    Logical Operator.OR.1LEvaluated after all math and relational operators
    + +

    +

    Example Expressions

    +
  • CUSTOMERS->LNAME + ", " + CUSTOMERS->FNAME +
  • LNAME + ", " + FNAME +
  • STARTDT + 90 +
  • DATE() - 7 +
  • YEAR( TODAY() ) +
  • IIF( "A" = "N", "true result", "false result" ) +
  • IIF( "A" = "N" .OR. 2 > 1 , "true result", "false result" ) +
  • IIF( .NOT. "A" = "N", "true result", "false result" ) +
  • .NOT. DELETED() +

    + + +

    Example program

    +For an example on how to use the expression logic, see program +src/examples/xb_ex_expression.cpp. +

    + +
    +



    + + diff --git a/docs/html/xbc6.htm b/docs/html/xbc6.htm deleted file mode 100755 index a7e1746..0000000 --- a/docs/html/xbc6.htm +++ /dev/null @@ -1,137 +0,0 @@ - - -Xbase DBMS Chapter 6 - -

    Index Overview

    -

    Chapter Updated 11/27/222


    - -The objective of this chapter is to provide information regarding -the basic concepts of index processing for the Xbase library.

    - - -

    Overview

    - -The Xbase library is designed to support multiple index types simultaneously. -Dbase, Clipper and Foxbase each had their own index formats and ultimately the -goal is to provide support for all the legacy index file formats. - -

    -The 4.0.x rewrite includes the NDX and MDX formats. Earlier versions of the -library included NTX and CDX formats which will be brought forward into the -library rewrite at some point in the future. - - -

    Tags

    - -Each index file contains one or more tags depending on the file type. Each tag is a sort order -and has characteristics: Sort order (ASC or DESC), unique or not unique and some formats support filtering. -Each open table (dbf file) has an "active tag" for database operations. - - -

    Index updates

    - -The library automatically updates all tags in all open index files. - - -

    -

    Index File Types

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    File
    Type
    SourceMax Tags
    Per File
    Auto OpenedSort OrderUnique KeysReclaimed NodesFilter SupportStatus
    NDXdBase
    1
    Optional
    ASC only
    Y
    N
    N
    Available in 4.0.1
    MDXdBase
    47
    Yes
    ASC or DESC
    Y
    Y
    Y
    Available in 4.0.1
    NTXClipper
    1
    Optional
    ?
    ?
    ?
    ?
    Pending upgrades
    CDXFox Pro
    ?
    ?
    ?
    ?
    ?
    ?
    Pending upgrades
    IDXFox ProUndeveloped
    - -

    -

    Index/Tag Methods

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    MethodDescription
    xbDbf::CheckTagIntegrityChecks a tag for missing or duplicate entries. Available if XB_DEBUG_SUPPORT is on.
    xbDbf::CreateTagCreate a new tag.
    xbDbf::DeleteTagDelete existing tag.
    xbDbf::FindFind key value for the active tag.
    xbDbf::GetFirsKeyRetrieve the first key for the active tag.
    xbDbf::GetLastKeyRetrieve the last key for the active tag.
    xbDbf::GetNextKeyRetrieve the next key for the active tag.
    xbDbf::GetPrevKeyRetrieve the previous key for the active tag.
    xbDbf::GetCurTagRetrieve the tag name key for the active tag.
    xbDbf::OpenIndexOpen an index file. Only used for index files that aren't automatically opened.
    xbDbf::ReindexRebuild a tag. Available if XB_DEBUG_SUPPORT is on.
    xbDbf::SetCurTagSet current tag.
    - -

    -
    -



    - - diff --git a/docs/html/xbc6.html b/docs/html/xbc6.html new file mode 100755 index 0000000..094545f --- /dev/null +++ b/docs/html/xbc6.html @@ -0,0 +1,153 @@ + + +Xbase DBMS Chapter 6 + +

    Index Overview

    +

    Chapter Updated 12/09/22


    + +The objective of this chapter is to provide information regarding +the basic concepts of index processing for the Xbase library.

    + + +

    Overview

    + +The Xbase library is designed to support multiple index types simultaneously. +Dbase, Clipper and Foxbase each had their own index formats and ultimately the +goal is to provide support for all the legacy index file formats. + +

    +The 4.0.x rewrite includes the NDX and MDX formats. Earlier versions of the +library included NTX and CDX formats which will be brought forward into the +library rewrite at some point in the future. + + +

    Tags

    + +Each index file contains one or more tags depending on the file type. Each tag is a sort order +and has characteristics: Sort order (ASC or DESC), unique or not unique and some formats support filtering. +Each open table (dbf file) has an "active tag" for database operations. + +

    Index processing design

    + +The library is construcuted to handle index files with multiple tags per file. Single tag files like the NDX indices +are treated as a multi tag file, but there is only one tag. This allows for maximum flexibility for future +additional index types. + + + +

    Index updates

    + +The library automatically updates all tags in all open index files. + + +

    +

    Index File Types

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    File
    Type
    SourceMax Tags
    Per File
    Auto OpenedSort OrderUnique KeysReclaimed NodesFilter SupportStatus
    NDXdBase
    1
    Optional
    ASC only
    Y
    N
    N
    Available in 4.0.1
    MDXdBase
    47
    Yes
    ASC or DESC
    Y
    Y
    Y
    Available in 4.0.1
    NTXClipper
    1
    Optional
    ?
    ?
    ?
    ?
    Pending upgrades
    CDXFox Pro
    ?
    ?
    ?
    ?
    ?
    ?
    Pending upgrades
    IDXFox ProUndeveloped
    + +

    +

    Index/Tag Methods

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MethodDescription
    xbDbf::CheckTagIntegrityChecks a tag for missing or duplicate entries. Available if XB_DEBUG_SUPPORT is on.
    xbDbf::CreateTagCreate a new tag.
    xbDbf::DeleteTagDelete existing tag.
    xbDbf::FindFind key value for the active tag.
    xbDbf::GetFirsKeyRetrieve the first key for the active tag.
    xbDbf::GetLastKeyRetrieve the last key for the active tag.
    xbDbf::GetNextKeyRetrieve the next key for the active tag.
    xbDbf::GetPrevKeyRetrieve the previous key for the active tag.
    xbDbf::GetCurTagRetrieve the tag name key for the active tag.
    xbDbf::OpenIndexOpen an index file. Only used for index files that aren't automatically opened.
    xbDbf::ReindexRebuild a tag. Available if XB_DEBUG_SUPPORT is on.
    xbDbf::SetCurTagSet current tag.
    +

    +

    Internal Data Storage

    + + + + + + + +
    TypeStored in DBF asStored in NDX asStored in MDX as
    CCharacter dataCharacter dataCharacter data
    FText numbersxbDoublexbBcd
    NText numbersxbDoublexbBcd
    DText YYYYMMDDxbDouble JulianxbDouble Julian
    +

    +
    +



    + + diff --git a/docs/html/xbc7.htm b/docs/html/xbc7.htm deleted file mode 100755 index 20a60de..0000000 --- a/docs/html/xbc7.htm +++ /dev/null @@ -1,153 +0,0 @@ - - -Xbase DBMS Chapter 7 - -

    NDX Indices

    -

    Chapter Updated 11/27/22


    - -The objective of this chapter is to provide information regarding the -basic concepts of how .NDX index files work in the Xbase environment.

    - -The information in this chapter has been gathered by searching the internet -and by examining the structure of known good NDX indexes.

    - -

    NDX Index File Characteristics

    - -
  • NDX indices maintain keys in ascending sort order only.

    -
  • NDX indices support unique or non unique keys.

    - -Unique keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE. -If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will -add a record to the table, but not add a corresponding duplicate key to the index tag. -The UniqueKeyOption is off (don't allow duplicates) by default. -

    - -Non-unique Keys are not required to be unique, duplicate -keys are allowed if the index is created with the XB_NOT_UNIQUE -setting. Duplicate keys are stored in record number order.

    - -
  • NDX indexes are automatically updated by the Xbase library after the -indices are opened.

    - -
  • Character keys are left justified and padded on the right with spaces.

    - -
  • Numeric keys are stored as eight byte double values.

    - -

    NDX File Internals

    - -NDX files are comprised of two or more 512 byte blocks or nodes of -information. There are three types of nodes: Head Nodes, Interior -Nodes and Leaf Nodes.

    - -
  • The Head Node is the first node in the file starting at -position zero (0) and contains information about the NDX file. There -is only one Head Node in each index and it always starts at the -beginning of the file.

    - - - - - -

    NDX Header Node

    TypeSizeField NameDescription -
    xbLong4StartNodeThis identifies the root node of - the index. The Header node is node 0. -
    xbLong4Total NodesThis is the count of the total - nodes in the index. The count includes the header node. -
    xbLong4NoOfKeysTotal number of keys in the index +1 -
    xbUShort2KeyLenThe index key length -
    xbUShort2KeysPerNodeThe maximum number of keys per node -
    xbUShort2KeyTypeType of key
    -00 - Character
    01 - Numeric -
    xbLong4KeysizeKey record size + 8 -
    char1UnknownReserved -
    char1UniqueUnique indicator
    -00 - Not Unique - XB_NON_UNIQUE
    01 - Unique - XB_UNIQUE -
    char488KeyExpressionKey expression string -
    512Total bytes in node -
    -

    -The following structure is used by the Xbase NDX routines: - - struct NdxHeadNode{ - xbLong StartNode; /* header node is node 0 */ - xbLong TotalNodes; /* includes header node */ - xbLong NoOfKeys; /* actual count + 1 */ - xbUShort KeyLen; /* length of key data */ - xbUShort KeysPerNode; /* max number of keys per node */ - xbUShort KeyType; /* 00 = Char, 01 = Numeric */ - xbLong KeySize; /* KeyLen + 8 */ - char Reserved1; /* Not sure about this one */ - char Unique; /* 00 = not unique, 01 = unique*/ - char KeyExpression[488]; /* key definition */ - } - -

    - -

    Interior and Leaf Nodes

    - -Interior Nodes and Leaf Nodes share the same structure in an NDX file. -The difference between the two types is that interior nodes point to -other interior nodes or leaf nodes and leaf nodes point to records in -a DBF file. Interior nodes are optional nodes in an NDX file, -however if there are more than a few keys in the index there will -certainly be one or more interior nodes in the file. There will -always be at least one leaf node in the file. Leaf nodes contain DBF -record numbers which point to the location of the record in the -DBF file.

    - -Interior nodes have field LeftNodeNo valued which points to the node -which points to the keys which are less than the key value in the KeyVal -field. There is one more LeftNodeNo value in the node than there are keys. -The Last LeftNodeNo points to the node which is greater than the highest -key value in the node. Interior nodes have 0 in the value for the -DbfRecNo field.

    - -Leaf nodes have 0 in the LeftNodeNo field but do have a value in the -DbfRecNo field which points to a DFB record.

    - - - - - -

    NDX Interior Node and Leaf Node Structure

    TypeSizeField NameDescription -
    xbLong4NoOfKeysThisNodeThe number of key values in this node. -
    char508KeyRecA repeating structure of - pointers and keys. See the next table for the KeyRec structure. -
    -

    - - - -

    KeyRec Structure

    TypeSizeField NameDescription -
    xbLong4LeftNodeNoThe node number of the lower node - for this key. 0 in Leaf Nodes. -
    xbLong4DbfRecNoThe DBF record number for this key. - 0 in Interior Nodes. -
    charKeyLenKeyValueThe key value. -
    - -

    -For those interested in knowing how the Xbase DBMS manipulates and -navigates index files, the following discussion may be helpfull.

    - -Xbase DBMS navigates through NDX files by using an in-memory chain -of nodes of the current location / key in use. It starts by reading the -Head Node of the index, which points to the first node of the file. The -first node of the file will be a leaf node if the index is small or will -be an interior node if the index has more than one leaf node. The first -interior node is loaded into memory, added to the node chain and points -to the next node to read. The node is made up of one or more keys. If -it is a leaf node, the logic looks for a matching key on the node. -Otherwise, if it is an interior node, the logic looks at the keys until the -search key is greater than or equal to the key in the node and then -traverses down the tree to the next node. It continues down the tree, -adding the nodes to the in-memory node chain until it reaches the correct -leaf node. If it finds a matching key in the leaf node, it returns a -XB_FOUND condition. If it doesn't find an exact match in the leaf node, it -returns a XB_NOT_FOUND condition and stops on the key which is greater than -the search key given. - -
    -



    - - diff --git a/docs/html/xbc7.html b/docs/html/xbc7.html new file mode 100755 index 0000000..20a60de --- /dev/null +++ b/docs/html/xbc7.html @@ -0,0 +1,153 @@ + + +Xbase DBMS Chapter 7 + +

    NDX Indices

    +

    Chapter Updated 11/27/22


    + +The objective of this chapter is to provide information regarding the +basic concepts of how .NDX index files work in the Xbase environment.

    + +The information in this chapter has been gathered by searching the internet +and by examining the structure of known good NDX indexes.

    + +

    NDX Index File Characteristics

    + +
  • NDX indices maintain keys in ascending sort order only.

    +
  • NDX indices support unique or non unique keys.

    + +Unique keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE. +If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will +add a record to the table, but not add a corresponding duplicate key to the index tag. +The UniqueKeyOption is off (don't allow duplicates) by default. +

    + +Non-unique Keys are not required to be unique, duplicate +keys are allowed if the index is created with the XB_NOT_UNIQUE +setting. Duplicate keys are stored in record number order.

    + +
  • NDX indexes are automatically updated by the Xbase library after the +indices are opened.

    + +
  • Character keys are left justified and padded on the right with spaces.

    + +
  • Numeric keys are stored as eight byte double values.

    + +

    NDX File Internals

    + +NDX files are comprised of two or more 512 byte blocks or nodes of +information. There are three types of nodes: Head Nodes, Interior +Nodes and Leaf Nodes.

    + +
  • The Head Node is the first node in the file starting at +position zero (0) and contains information about the NDX file. There +is only one Head Node in each index and it always starts at the +beginning of the file.

    + + + + + +

    NDX Header Node

    TypeSizeField NameDescription +
    xbLong4StartNodeThis identifies the root node of + the index. The Header node is node 0. +
    xbLong4Total NodesThis is the count of the total + nodes in the index. The count includes the header node. +
    xbLong4NoOfKeysTotal number of keys in the index +1 +
    xbUShort2KeyLenThe index key length +
    xbUShort2KeysPerNodeThe maximum number of keys per node +
    xbUShort2KeyTypeType of key
    +00 - Character
    01 - Numeric +
    xbLong4KeysizeKey record size + 8 +
    char1UnknownReserved +
    char1UniqueUnique indicator
    +00 - Not Unique - XB_NON_UNIQUE
    01 - Unique - XB_UNIQUE +
    char488KeyExpressionKey expression string +
    512Total bytes in node +
    +

    +The following structure is used by the Xbase NDX routines: + + struct NdxHeadNode{ + xbLong StartNode; /* header node is node 0 */ + xbLong TotalNodes; /* includes header node */ + xbLong NoOfKeys; /* actual count + 1 */ + xbUShort KeyLen; /* length of key data */ + xbUShort KeysPerNode; /* max number of keys per node */ + xbUShort KeyType; /* 00 = Char, 01 = Numeric */ + xbLong KeySize; /* KeyLen + 8 */ + char Reserved1; /* Not sure about this one */ + char Unique; /* 00 = not unique, 01 = unique*/ + char KeyExpression[488]; /* key definition */ + } + +

    + +

    Interior and Leaf Nodes

    + +Interior Nodes and Leaf Nodes share the same structure in an NDX file. +The difference between the two types is that interior nodes point to +other interior nodes or leaf nodes and leaf nodes point to records in +a DBF file. Interior nodes are optional nodes in an NDX file, +however if there are more than a few keys in the index there will +certainly be one or more interior nodes in the file. There will +always be at least one leaf node in the file. Leaf nodes contain DBF +record numbers which point to the location of the record in the +DBF file.

    + +Interior nodes have field LeftNodeNo valued which points to the node +which points to the keys which are less than the key value in the KeyVal +field. There is one more LeftNodeNo value in the node than there are keys. +The Last LeftNodeNo points to the node which is greater than the highest +key value in the node. Interior nodes have 0 in the value for the +DbfRecNo field.

    + +Leaf nodes have 0 in the LeftNodeNo field but do have a value in the +DbfRecNo field which points to a DFB record.

    + + + + + +

    NDX Interior Node and Leaf Node Structure

    TypeSizeField NameDescription +
    xbLong4NoOfKeysThisNodeThe number of key values in this node. +
    char508KeyRecA repeating structure of + pointers and keys. See the next table for the KeyRec structure. +
    +

    + + + +

    KeyRec Structure

    TypeSizeField NameDescription +
    xbLong4LeftNodeNoThe node number of the lower node + for this key. 0 in Leaf Nodes. +
    xbLong4DbfRecNoThe DBF record number for this key. + 0 in Interior Nodes. +
    charKeyLenKeyValueThe key value. +
    + +

    +For those interested in knowing how the Xbase DBMS manipulates and +navigates index files, the following discussion may be helpfull.

    + +Xbase DBMS navigates through NDX files by using an in-memory chain +of nodes of the current location / key in use. It starts by reading the +Head Node of the index, which points to the first node of the file. The +first node of the file will be a leaf node if the index is small or will +be an interior node if the index has more than one leaf node. The first +interior node is loaded into memory, added to the node chain and points +to the next node to read. The node is made up of one or more keys. If +it is a leaf node, the logic looks for a matching key on the node. +Otherwise, if it is an interior node, the logic looks at the keys until the +search key is greater than or equal to the key in the node and then +traverses down the tree to the next node. It continues down the tree, +adding the nodes to the in-memory node chain until it reaches the correct +leaf node. If it finds a matching key in the leaf node, it returns a +XB_FOUND condition. If it doesn't find an exact match in the leaf node, it +returns a XB_NOT_FOUND condition and stops on the key which is greater than +the search key given. + +
    +



    + + diff --git a/docs/html/xbc8.htm b/docs/html/xbc8.htm deleted file mode 100755 index cb47657..0000000 --- a/docs/html/xbc8.htm +++ /dev/null @@ -1,79 +0,0 @@ - - -Xbase DBMS Chapter 8 - -

    MDX Indices

    -

    Chapter Updated 11/28/22


    - -The objective of this chapter is to provide information regarding the -basic concepts of how .MDX index files work in the Xbase environment.

    - -The information in this chapter has been gathered by searching the internet -and by examining the structure of known good
    - -

    MDX Index File Characteristics

    - -
  • MDX files are the same name as the corresponding DBF file with an MDX extension. -
  • MDX files are automatically opened by the library when the DBF file is opened. -
  • MDX index files (aka prod indices) contain from one to 47 tags, where each tag has it's own key characteristics. -
  • MDX indices maintain keys in either ascending or descending sort order. -
  • MDX indices support filtered keys. For example, a filter of .NOT. DELETED() will keep deleted records out -of the index tag. -
  • MDX indices are automatically updated by the Xbase library after the -indices are opened. - -
  • MDX indices support unique or non unique keys.

    - -Unique keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE. -If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will -add a record to the table, but not add a corresponding duplicate key to the index tag. -The UniqueKeyOption is off (don't allow duplicates) by default. -

    - -Non-unique Keys are not required to be unique, duplicate -keys are allowed if the index is created with the XB_NOT_UNIQUE -setting. Duplicate keys are stored in record number order.

    - - -
  • Character keys are left justified and padded on the right with spaces. -
  • Numeric keys are stored as twelve byte BCD values. -
  • Date keys are stored as eight byte double julian values. - -

    MDX File Internals

    - -The following information is not needed to use the library, it is just included -for general information.

    - -MDX files are comprised of 512 pages where multiple pages make a block. The default -setting is 1024 blocks, each block containing two pages.

    - -The first four pages contain: -
  • Bytes 0 - 543 contain general file information. -
  • Bytes 544 - 2047 is a 47 item table containing specific tag information. -

    - -Pages five and beyound: -
  • Bytes 2048 and beyond contain tag header blocks, interior nodes and leaf nodes. - -

    - -

    Interior and Leaf Nodes

    - -Interior Nodes and Leaf Nodes share the same structure in an NDX file with -the exception that interior nodes have a non zero number immediately -after the rightmost key on the node. - -Interior nodes point to other interior nodes or leaf nodes and leaf nodes point -to records in a DBF file. Interior nodes are optional nodes in an MDX file, -however if there are more than a few keys in the index there will -certainly be one or more interior nodes in the file. There will -always be at least one leaf node per tag in the file. Leaf nodes -contain DBF record numbers which point to the location of the record -in the DBF file.

    - -

    - -
    -



    - - diff --git a/docs/html/xbc8.html b/docs/html/xbc8.html new file mode 100755 index 0000000..fcc461c --- /dev/null +++ b/docs/html/xbc8.html @@ -0,0 +1,79 @@ + + +Xbase DBMS Chapter 8 + +

    MDX Indices

    +

    Chapter Updated 12/02/22


    + +The objective of this chapter is to provide information regarding the +basic concepts of how .MDX index files work in the Xbase environment.

    + +The information in this chapter has been gathered by searching the internet +and by examining the structure of known good
    + +

    MDX Index File Characteristics

    + +
  • MDX files are the same name as the corresponding DBF file with an MDX extension. +
  • MDX files are automatically opened by the library when the DBF file is opened. +
  • MDX index files (aka prod indices) contain from one to 47 tags, where each tag has it's own key characteristics. +
  • MDX indices maintain keys in either ascending or descending sort order. +
  • MDX indices support filtered keys. For example, a filter of .NOT. DELETED() will keep deleted records out +of the index tag. +
  • MDX indices are automatically updated by the Xbase library after the +indices are opened. + +
  • MDX indices support unique or non unique keys.

    + +Unique keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE. +If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will +add a record to the table, but not add a corresponding duplicate key to the index tag. +The UniqueKeyOption is off (don't allow duplicates) by default. +

    + +Non-unique Keys are not required to be unique, duplicate +keys are allowed if the index is created with the XB_NOT_UNIQUE +setting. Duplicate keys are stored in record number order.

    + + +
  • Character keys are left justified and padded on the right with spaces. +
  • Numeric keys are stored as twelve byte BCD values. +
  • Date keys are stored as eight byte double julian values. + +

    MDX File Internals

    + +The following information is not needed to use the library, it is just included +for general information.

    + +MDX files are comprised of 512 pages where multiple pages make a block. The default +setting is 1024 blocks, each block containing two pages.

    + +The first four pages contain: +
  • Bytes 0 - 543 contain general file information. +
  • Bytes 544 - 2047 is a 47 item table containing specific tag information. +

    + +Pages five and beyound: +
  • Bytes 2048 and beyond contain tag header blocks, interior nodes and leaf nodes. + +

    + +

    Interior and Leaf Nodes

    + +Interior Nodes and Leaf Nodes share the same structure in an NDX file with +the exception that interior nodes have a non zero number immediately +after the rightmost key on the node. + +Interior nodes point to other interior nodes or leaf nodes and leaf nodes point +to records in a DBF file. Interior nodes are optional nodes in an MDX file, +however if there are more than a few keys in the index there will +certainly be one or more interior nodes in the file. There will +always be at least one leaf node per tag in the file. Leaf nodes +contain DBF record numbers which point to the location of the record +in the DBF file.

    + +

    + +
    +



    + + diff --git a/docs/html/xbc9.htm b/docs/html/xbc9.htm deleted file mode 100755 index 297a702..0000000 --- a/docs/html/xbc9.htm +++ /dev/null @@ -1,179 +0,0 @@ - - -Xbase DBMS Chapter 9 - -

    NTX Indices

    -

    Chapter Updated 11/28/22


    - - -

    This chapter might be out of date. The NTX module is pending review and updates for release 4.x.x

    - -The objective of this chapter is to provide information regarding the -basic concepts of how .NTX index files work in the Xbase environment.

    - -The information in this chapter has been gathered by searching the internet -and by examining the structure of known good NTX indexes.

    - -

    NTX Index File Characteristics

    - -
    • NTX indices maintain keys in ascending sort order only.

      -
    • NTX indices support unique or non unique keys.

      - -Unique keys must be unique. The database update routines will -fail if an attempt to add a non-unique key is performed.

      - -Non-unique Keys are not required to be unique, duplicate -keys are allowed if the index is created with the XB_NOT_UNIQUE -setting. Duplicate keys are stored in record number order.

      - -
    • NTX indexes are automatically updated by the Xbase library after the -indices are opened.

      - -
    • Character keys are left justified and padded on the right with spaces.

      - -
    • Numeric keys are stored as eight byte double values.

      - -The numeric key processing logic performs floating point numeric -calculations on eight byte double values. This logic may be compute intensive -and slow on older machines, especially the older intel processors without a -math coprocessor chip. - -
    - - -

    NTX File Internals

    - -NTX files are comprised of two or more 1024 byte blocks or nodes of -information. There are three types of nodes: Head Nodes, Interior -Nodes and Leaf Nodes.

    - -The Head Node is the first node in the file starting at -position zero (0) and contains information about the NTX file. There -is only one Head Node in each index and it always starts at the -beginning of the file.

    - - - - - -

    NTX Header Node

    TypeSizeField NameDescription -
    xbShort2Signature ByteThe Clipper signature byte. 0x003h indicates Clipper 87. 0x006h indicates Clipper 5.x -
    xbShort2Indexing Version NumberDocumented as the "Compiler Version" but I have observed an increasing number. Incremented whenever the index is changed. -
    xbLong4First Node OffsetThe offset to the first node. -
    xbLong4First Unused Page OffsetThe offset to the first unused node. -
    xbShort2Key Size + 8The Key Size plus 8 bytes. -
    xbShort2Key SizeThe size (length) of the key. -
    xbShort2Number of DecimalsNumber of decimal places in key. -
    xbShort2Max Items Per NodeThe maximum number of key per node. -
    xbShort21/2 The Max Items Per NodeHalf the maximum number of key per node. Important in a B-tree system, as this is the minimum number of keys that must be on a page. -
    char256KeyExpressionKey expression string -
    char1UniqueUnique indicator
    - 00 - Not Unique - XB_NON_UNIQUE
    - 01 - Unique - XB_UNIQUE -
    char745UnusedUnused - - -
    1024Total bytes in node -
    -

    -The following structure is used by the Xbase NTX routines: - - -struct NtxHeadNode { /* ntx header on disk */ - xbUShort Signature; /* Clipper 5.x or Clipper 87 */ - xbUShort Version; /* Compiler Version */ - /* Also turns out to be */ - /* a last modified counter */ - xbULong StartNode; /* Offset in file for first node */ - xbULong UnusedOffset; /* First free node offset */ - xbUShort KeySize; /* Size of items (KeyLen + 8) */ - xbUShort KeyLen; /* Size of the Key */ - xbUShort DecimalCount; /* Number of decimal positions */ - xbUShort KeysPerNode; /* Max number of keys per node */ - xbUShort HalfKeysPerNode; /* Min number of keys per node */ - char KeyExpression[256]; /* Null terminated key expression */ - unsigned Unique; /* Unique Flag */ - char NotUsed[745]; -}; - - - -

    - -

    Interior and Leaf Nodes

    - -NTX files use a B-tree system to store keys. A B-tree is a balanced, -on disk tree who's design minimizes disk access. Interior Nodes and -Leaf Nodes share the same structure in an NTX file. The difference is -that interior nodes point to other nodes. Leaf nodes point to -nothing. Keys in both interior nodes and leaf nodes point to records -in a DBF file. - -Interior nodes have field LeftNodeNo valued which points to the node -which points to the keys which are less than the key value in the KeyVal -field. There is one more LeftNodeNo value in the node than there are keys. The -Last LeftNodeNo points to the node which is greater than the highest -key value in the node.

    - -Leaf nodes have 0 in the LeftNodeNo field.

    - - - - - -

    NTX Interior Node and Leaf Node Structure

    TypeSizeField NameDescription -
    xbShort2NoOfKeysThisNodeThe number of key values in this node. (N) -
    Array of xbUShort2offsets[]Array of -
    HeadNode.KeysPerNode +1
    unsigned longs. - These values are the offsets (in bytes) of each key - in this node, from the beginning of the node. -
    charvariableKeyRecsA repeating structure of - pointers and keys. See the next table for the KeyRec structure. -
    -

    - -One primary difference between NDX files and NTX files is that NTX -files uses an array of offsets on all interior and leaf nodes. Each -offset is the byte count from the beginning of the node where each -KeyRec will be found. The order of the array of offsets determines -the order of keys on a given node. When keys are added or deleted, -thus changing the order of the keys on a node, only the order of the -offset array is changed. All other key data is not moved. This results -in slightly better index performance. - -
    - - - -

    KeyRec Structure

    TypeSizeField NameDescription -
    xbLong4LeftNodeNoThe node number (offset from beginning of file) of the lower node - for this key. 0 in Leaf Nodes. -
    xbLong4DbfRecNoThe DBF record number for this key. - 0 in Interior Nodes. -
    charKeyLenKeyValueThe key value. -
    - -

    -For those interested in knowing how the Xbase DBMS manipulates and -navigates index files, the following discussion may be helpfull.

    - -Xbase DBMS navigates through NTX files by using an in-memory chain of -nodes of the current location / key in use. It starts by reading the -Head Node of the index, which points to the first node of the -file. The first node of the file will be a leaf node if the index is -small or will be an interior node if the index has more than one leaf -node. The first interior node is loaded into memory, added to the -node chain and points to the next node to read. The node is made up -of one or more keys. If it is a leaf node, the logic looks for a -matching key on the node. It continues down the tree, adding the -nodes to the in-memory node chain until it reaches the correct -node. If it finds a matching key in the leaf node, it returns a XB_FOUND -condition. If it doesn't find an exact match in the leaf node, it -returns a XB_NOT_FOUND condition and stops on the key which is greater -than the search key given. - -
    - -Author: Bob Cotton - bob@synxis.com
    - - diff --git a/docs/html/xbc9.html b/docs/html/xbc9.html new file mode 100755 index 0000000..afcd2fa --- /dev/null +++ b/docs/html/xbc9.html @@ -0,0 +1,180 @@ + + +Xbase DBMS Chapter 9 + +

    NTX Indices

    +

    Chapter Updated 11/28/22


    + + +

    This chapter might be out of date. The NTX module is pending review and updates for release 4.x.x

    + +The objective of this chapter is to provide information regarding the +basic concepts of how .NTX index files work in the Xbase environment.

    + +The information in this chapter has been gathered by searching the internet +and by examining the structure of known good NTX indexes.

    + +

    NTX Index File Characteristics

    + +
    • NTX indices maintain keys in ascending sort order only.

      +
    • NTX indices support unique or non unique keys.

      + +Unique keys must be unique. The database update routines will +fail if an attempt to add a non-unique key is performed.

      + +Non-unique Keys are not required to be unique, duplicate +keys are allowed if the index is created with the XB_NOT_UNIQUE +setting. Duplicate keys are stored in record number order.

      + +
    • NTX indexes are automatically updated by the Xbase library after the +indices are opened.

      + +
    • Character keys are left justified and padded on the right with spaces.

      + +
    • Numeric keys are stored as eight byte double values.

      + +The numeric key processing logic performs floating point numeric +calculations on eight byte double values. This logic may be compute intensive +and slow on older machines, especially the older intel processors without a +math coprocessor chip. + +
    + + +

    NTX File Internals

    + +NTX files are comprised of two or more 1024 byte blocks or nodes of +information. There are three types of nodes: Head Nodes, Interior +Nodes and Leaf Nodes.

    + +The Head Node is the first node in the file starting at +position zero (0) and contains information about the NTX file. There +is only one Head Node in each index and it always starts at the +beginning of the file.

    + + + + + +

    NTX Header Node

    TypeSizeField NameDescription +
    xbShort2Signature ByteThe Clipper signature byte. 0x003h indicates Clipper 87. 0x006h indicates Clipper 5.x +
    xbShort2Indexing Version NumberDocumented as the "Compiler Version" but I have observed an increasing number. Incremented whenever the index is changed. +
    xbLong4First Node OffsetThe offset to the first node. +
    xbLong4First Unused Page OffsetThe offset to the first unused node. +
    xbShort2Key Size + 8The Key Size plus 8 bytes. +
    xbShort2Key SizeThe size (length) of the key. +
    xbShort2Number of DecimalsNumber of decimal places in key. +
    xbShort2Max Items Per NodeThe maximum number of key per node. +
    xbShort21/2 The Max Items Per NodeHalf the maximum number of key per node. Important in a B-tree system, as this is the minimum number of keys that must be on a page. +
    char256KeyExpressionKey expression string +
    char1UniqueUnique indicator
    + 00 - Not Unique - XB_NON_UNIQUE
    + 01 - Unique - XB_UNIQUE +
    char745UnusedUnused + + +
    1024Total bytes in node +
    +

    +The following structure is used by the Xbase NTX routines: + + +struct NtxHeadNode { /* ntx header on disk */ + xbUShort Signature; /* Clipper 5.x or Clipper 87 */ + xbUShort Version; /* Compiler Version */ + /* Also turns out to be */ + /* a last modified counter */ + xbULong StartNode; /* Offset in file for first node */ + xbULong UnusedOffset; /* First free node offset */ + xbUShort KeySize; /* Size of items (KeyLen + 8) */ + xbUShort KeyLen; /* Size of the Key */ + xbUShort DecimalCount; /* Number of decimal positions */ + xbUShort KeysPerNode; /* Max number of keys per node */ + xbUShort HalfKeysPerNode; /* Min number of keys per node */ + char KeyExpression[256]; /* Null terminated key expression */ + unsigned Unique; /* Unique Flag */ + char NotUsed[745]; +}; + + + +

    + +

    Interior and Leaf Nodes

    + +NTX files use a B-tree system to store keys. A B-tree is a balanced, +on disk tree who's design minimizes disk access. Interior Nodes and +Leaf Nodes share the same structure in an NTX file. The difference is +that interior nodes point to other nodes. Leaf nodes point to +nothing. Keys in both interior nodes and leaf nodes point to records +in a DBF file. + +Interior nodes have field LeftNodeNo valued which points to the node +which points to the keys which are less than the key value in the KeyVal +field. There is one more LeftNodeNo value in the node than there are keys. The +Last LeftNodeNo points to the node which is greater than the highest +key value in the node.

    + +Leaf nodes have 0 in the LeftNodeNo field.

    + + + + + +

    NTX Interior Node and Leaf Node Structure

    TypeSizeField NameDescription +
    xbShort2NoOfKeysThisNodeThe number of key values in this node. (N) +
    Array of xbUShort2offsets[]Array of +
    HeadNode.KeysPerNode +1
    unsigned longs. + These values are the offsets (in bytes) of each key + in this node, from the beginning of the node. +
    charvariableKeyRecsA repeating structure of + pointers and keys. See the next table for the KeyRec structure. +
    +

    + +One primary difference between NDX files and NTX files is that NTX +files uses an array of offsets on all interior and leaf nodes. Each +offset is the byte count from the beginning of the node where each +KeyRec will be found. The order of the array of offsets determines +the order of keys on a given node. When keys are added or deleted, +thus changing the order of the keys on a node, only the order of the +offset array is changed. All other key data is not moved. This results +in slightly better index performance. + +
    + + + +

    KeyRec Structure

    TypeSizeField NameDescription +
    xbLong4LeftNodeNoThe node number (offset from beginning of file) of the lower node + for this key. 0 in Leaf Nodes. +
    xbLong4DbfRecNoThe DBF record number for this key. + 0 in Interior Nodes. +
    charKeyLenKeyValueThe key value. +
    + +

    +For those interested in knowing how the Xbase DBMS manipulates and +navigates index files, the following discussion may be helpfull.

    + +Xbase DBMS navigates through NTX files by using an in-memory chain of +nodes of the current location / key in use. It starts by reading the +Head Node of the index, which points to the first node of the +file. The first node of the file will be a leaf node if the index is +small or will be an interior node if the index has more than one leaf +node. The first interior node is loaded into memory, added to the +node chain and points to the next node to read. The node is made up +of one or more keys. If it is a leaf node, the logic looks for a +matching key on the node. It continues down the tree, adding the +nodes to the in-memory node chain until it reaches the correct +node. If it finds a matching key in the leaf node, it returns a XB_FOUND +condition. If it doesn't find an exact match in the leaf node, it +returns a XB_NOT_FOUND condition and stops on the key which is greater +than the search key given. + +
    + +Author: Bob Cotton - bob@synxis.com
    +



    + + -- cgit v1.2.3