diff options
Diffstat (limited to 'docs/html')
-rwxr-xr-x | docs/html/Xbase64ClassDiagram.jpg | bin | 93778 -> 0 bytes | |||
-rwxr-xr-x | docs/html/gpl-3.0.txt | 674 | ||||
-rwxr-xr-x | docs/html/index.html | 45 | ||||
-rwxr-xr-x | docs/html/xbab.html | 69 | ||||
-rwxr-xr-x | docs/html/xbac.html | 107 | ||||
-rwxr-xr-x | docs/html/xbad.html | 27 | ||||
-rwxr-xr-x | docs/html/xbae.html | 96 | ||||
-rwxr-xr-x | docs/html/xbaf.html | 45 | ||||
-rwxr-xr-x | docs/html/xbase.jpg | bin | 6421 -> 0 bytes | |||
-rwxr-xr-x | docs/html/xbc1.html | 199 | ||||
-rwxr-xr-x | docs/html/xbc10.html | 12 | ||||
-rwxr-xr-x | docs/html/xbc11.html | 12 | ||||
-rwxr-xr-x | docs/html/xbc12.html | 86 | ||||
-rwxr-xr-x | docs/html/xbc13.html | 46 | ||||
-rwxr-xr-x | docs/html/xbc14.html | 113 | ||||
-rwxr-xr-x | docs/html/xbc15.html | 96 | ||||
-rwxr-xr-x | docs/html/xbc16.html | 52 | ||||
-rwxr-xr-x | docs/html/xbc17.html | 219 | ||||
-rwxr-xr-x | docs/html/xbc18.html | 252 | ||||
-rwxr-xr-x | docs/html/xbc2.html | 267 | ||||
-rwxr-xr-x | docs/html/xbc3.html | 73 | ||||
-rwxr-xr-x | docs/html/xbc4.html | 81 | ||||
-rwxr-xr-x | docs/html/xbc5.html | 208 | ||||
-rwxr-xr-x | docs/html/xbc6.html | 153 | ||||
-rwxr-xr-x | docs/html/xbc7.html | 153 | ||||
-rwxr-xr-x | docs/html/xbc8.html | 79 | ||||
-rwxr-xr-x | docs/html/xbc9.html | 180 |
27 files changed, 0 insertions, 3344 deletions
diff --git a/docs/html/Xbase64ClassDiagram.jpg b/docs/html/Xbase64ClassDiagram.jpg Binary files differdeleted file mode 100755 index 81bb539..0000000 --- a/docs/html/Xbase64ClassDiagram.jpg +++ /dev/null diff --git a/docs/html/gpl-3.0.txt b/docs/html/gpl-3.0.txt deleted file mode 100755 index 94a9ed0..0000000 --- a/docs/html/gpl-3.0.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - <program> Copyright (C) <year> <name of author> - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/docs/html/index.html b/docs/html/index.html deleted file mode 100755 index 0e8db33..0000000 --- a/docs/html/index.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML><TITLE>Xbase DBMS Documentation Table of Contents</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H1><p align="center">Xbase DBMS<br> -Last Updated 2/11/23<br>Version 4.1.0</p></H1> -<h2>Documentation Table Of Contents</h2> -<h3>Section 1 - Xbase Concepts</h3> -<h4> -<A HREF="xbc1.html">Chapter 1 - Getting Started</A><br> -<A HREF="xbc2.html">Chapter 2 - Database Overview</A><br> -<A HREF="xbc3.html">Chapter 3 - Fields and Strings</A><br> -<A HREF="xbc4.html">Chapter 4 - Date Processing</A><br> -<A HREF="xbc5.html">Chapter 5 - Expression Handling</A><br> -<A HREF="xbc6.html">Chapter 6 - Index Overview</A><br> -<A HREF="xbc7.html">Chapter 7 - NDX (DBase) Indices</A><br> -<A HREF="xbc8.html">Chapter 8 - MDX (DBase) Indices</A><br> -<A HREF="xbc9.html">Chapter 9 - NTX (Clipper) Indices</A><br> -<A HREF="xbc10.html">Chapter 10 - CDX (FoxPro) Indices</A><br> -<A HREF="xbc11.html">Chapter 11 - IDX (FoxPro) Indices</A><br> -<A HREF="xbc12.html">Chapter 12 - Record and File Locking</A><br> -<A HREF="xbc13.html">Chapter 13 - Logfile Support</A><br> -<A HREF="xbc14.html">Chapter 14 - SQL Support</A><br> -<A HREF="xbc15.html">Chapter 15 - Sequential Block Read</A><br> - -</h4> -<h3>Section 2 - Classes and Objects</h3> -<h4> -<A HREF="xbc16.html">Chapter 16 - General Class Information</A><br> -<A HREF="xbc17.html">Chapter 17 - Class xbSsv - Shared System Values</A><br> -<A HREF="xbc18.html">Chapter 18 - Class xbXBase - The class that links it all together</A><br> - -</h4> -<h3>Section 3 - Appendices</h3> -<h4> -<A HREF="gpl-3.0.txt">Appendix A - GPL Library License</A><br> -<A HREF="xbab.html">Appendix B - Bibliography</A><br> -<A HREF="xbac.html">Appendix C - Library Build Options</A><br> -<A HREF="xbad.html">Appendix D - File Types</A><br> -<A HREF="xbae.html">Appendix E - Error Codes</A><br> -<A HREF="xbaf.html">Appendix F - Utility and Example Programs</A><br> - -</h4> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbab.html b/docs/html/xbab.html deleted file mode 100755 index 809c2ea..0000000 --- a/docs/html/xbab.html +++ /dev/null @@ -1,69 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Bibliography</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H1><p align="center">Xbase DBMS Bibliography</p></H1> -<p align="center">Page Updated 12/9/22</p><hr> - -Bachman, Erik<br> -Xbase File Format Description / Erik Bachman, Roskilde, Denmark: Clickety -Click Software, 1996-1998, 44 pages<br><br> - -Loomis, Mary:<br> -The Database Book, Macmillan Publishing Company, 1987, New York, New York: -ISBN 0-02-371760-2<br><br> - -Dorfman, Len:<br> -Building C Libraries, Windcrest, 1990, Blue Ridge Summit, PA: -ISBN 0-8306-3418-5<br><br> - -Eckel, Bruce:<br> -Using C++, Osborne, McGraw-Hill, 1990, Berkeley, CA: -ISBN 0-07-881522-3<br><br> - -Aho, Alfred: Hopcroft, John: Ullman, Jeffrey:<br> -Data Structures and Algorithms, Addison-Wesley Publishing, 1983, -Reading Massachusetts: ISBN 0-201-00023-7<br><br> - -Stevens, Al:<br> -C Database Development, MIS Press, 1991, Portland Oregon: -ISBN 1-55828-136-3<br><br> - -Pressman, Roger:<br> -Software Engineering: A Practitioner's Approach, McGraw-Hill, 1982, -New York ISBN 0-07-050781-3<br><br> - -Chou, George Tsu-der:<br> -2nd Edition dBase III Plus Handbook: Que Corporation, 1986, -Indianapolis, Indiana ISBN 0-88022-269-7<br><br> - -Krumm, Rob:<br> -Understanding and Using dBase II & III, Brady Communications Company, Inc, -1985, Bowie MD ISBN 0-89303-917-9<br><br> - -Hursch, Jack: Hursch, Carulyn:<br> -dBase IV Essentials, Windcrest, 1988, Blue Ridge Summit, PA -ISBN 0-8306-9616-4<br><br> - -Borland:<br> -Turbo C++, Programmer's Guide, Borland International, 1990, -Scotts Valley CA<br><br> - -Borland:<br> -Turbo C++, Library Reference, Borland International 1990, -Scotts Valley CA<br><br> - -The Draft Standard C++ Library by P.J. Plauger, Prentice Hall, New Jersey, -1995.<br><br> - -H.M Dietel/P.J. Deitel: C++ How To Program, Prentice Hall, Englewod Cliffs, -New Jersey 07632<br><br> - -Molinaro, Anthony:<br> -SQL Cookbook, O'Reilly Media, Inc, 2005, -Sebastopol CA: ISBN 978-0-596-00976-2<br><br> - -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbac.html b/docs/html/xbac.html deleted file mode 100755 index e022890..0000000 --- a/docs/html/xbac.html +++ /dev/null @@ -1,107 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Appendix C</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">Library Build Compile Options</p></H2> -<p align="center">Chapter Updated 2/1/23</p><hr> - - - -<center> -<H2>Library Build Compile Options</H2> -<table > -<TABLE BORDER> -<TR VALIGN="BASELINE"> -<TR><TH>Options</TH><TH>Description</TH><TH>Prerequisites - Notes</TH></TR> -<TR><TD>XB_DEBUG_SUPPORT</TD><TD>Include library debugging functionality</TD></TR> -<TR><TD>XB_UTILS_SUPPORT</TD><TD>Build utility programs?</TD></TR> -<TR><TD>XB_EXAMPLES_SUPPORT</TD><TD>Build example programs?</TD></TR> -<TR><TD>XB_MEMO_SUPPORT</TD><TD>Include Memo file support?</TD><TD>Prereq: XB_LINKLIST_SUPPORT</TD></TR> -<TR><TD>XB_LOGGING_SUPPORT</TD><TD>Include logging support?</TD></TR> -<TR><TD>XB_DBF3_SUPPORT</TD><TD>Include DBF Version III support?</TD><TD>At lease one of XB_DBF3_SUPPORT or<br> XB_DBF4_SUPPORT required</TD></TR> -<TR><TD>XB_DBF4_SUPPORT</TD><TD>Include DBF Version IV support?</TD><TD>At least one of XB_DBF3_SUPPORT or<br> XB_DBF4_SUPPORT required</TD></TR> -<TR><TD>XB_LINKLIST_SUPPORT</TD><TD>Include Linklist functionality?</TD></TR> -<TR><TD>XB_LOCKING_SUPPORT</TD><TD>Include File and Record locking support?</TD><TD>Prereq: XB_LINKLIST_SUPPORT</TD></TR> -<TR><TD>XB_FUNCTION_SUPPORT</TD><TD>Include Expression Function support?</TD></TR> -<TR><TD>XB_EXPRESSION_SUPPORT</TD><TD>Include Expression support?</TD><TD>Prereq: XB_FUNCTION_SUPPORT<br>and XB_LINKLIST_SUPPORT</TD></TR> -<TR><TD>XB_NDX_SUPPORT</TD><TD>Include NDX Index support?</TD><TD>Prereq: XB_EXPRESSION_SUPPORT</TD></TR> -<TR><TD>XB_MDX_SUPPORT</TD><TD>Include MDX Index support?</TD><TD>Prereq: XB_EXPRESSION_SUPPORT</TD></TR> -<TR><TD>XB_SQL_SUPPORT</TD><TD>Include SQL support?</TD><TD>Prereq: XB_MEMO_SUPPORT<br>and XB_DBF4_SUPPORT<br>and XB_BLOCKREAD_SUPPORT<br>and XB_EXPRESSION_SUPPORT</TR> -<TR><TD>XB_INF_SUPPORT</TD><TD>Include INF support (Provides auto open functions for NDX indices)</TD></TR> -<TR><TD>XB_FILTER_SUPPORT</TD><TD>Include Filter support</TD><TD>Prereq: XB_EXPRESSION_SUPPORT</TD></TR> -<TR><TD>XB_BLOCKREAD_SUPPORT</TD><TD>Include Block Read support</TD></TR> -</TABLE></center> - - - -<br><br><hr><br><br> -<center><h2>CMake</h2></center> -The Xbase library is built using the CMake build manager. Cmake provides the architecture for -building cross platform projects with a unified build system. If you are not familiar with CMake, -you can familiarize yourself with it at https://cmake.org -<br><br> -To modify the XBase64 compile options take the following steps:<br><br><br> - -1) Identify which platform you want to build and identify the correct build folder -<table border=1> -<tr><td>/xbase64-4.x.x/build/borland5.5</td><td>Older free Borland 5.5 32 bit Windows compiler</td></tr> -<tr><td>/xbase64-4.x.x/build/linux32</td><td>Linux 32 bit build folder</td></tr> -<tr><td>/xbase64-4.x.x/build/linux64</td><td>Linux 64 bit build folder</td></tr> -<tr><td>/xbase64-4.x.x/build/win32vs</td><td>Windows 32 bit Visual Studio folder</td></tr> -<tr><td>/xbase64-4.x.x/build/win64vs</td><td>Windows 64 bit Visual Studio folder</td></tr> -<tr><td>/xbase64-4.x.x/build/mac64</td><td>MAC 64 but folder</td></tr> -</table> - -<br><br><br> -2) Navigate to the appropriate folder identified in step 1. Once you are in the correct folder, -verify there is a <em>CmakeLists.txt</em> file. That file is the main librbary build configuration file. -<br><br> - -3) Select one if the following methods to update the config options -<table border=1> -<tr><td>For Windows users, use program cmake-gui.exe</td></tr> -<tr><td>For Unix/Linux/Mac users, use program cmake-gui</td></tr> -<tr><td>For Unix command line, use program "ccmake ."</td></tr> -<tr><td>Or manually edit the <em>CmakeLists.txt</em> file with your favorite text editor</td></tr> -</table> -<br><br><br> -<hr><br><br><br> -<center><h2>Debug Support <em>(Option: XB_DEBUG_SUPPORT)</em></h2></center> -The following methods are included in the build when the XB_DEBUG_OPTION is turned on and are mainly used for library debugging purposes. -The option can be safely left turned off.<br> -The <em>dump</em> routines print output to sdtout or an open log file.<br><br><br> - -<center><table border=1> -<TR><TH>Method/Function</TH><TH>Description</TH></TR> -<tr><td>xbDate::Dump()</td><td>Dump the xbDate object internals to stdout</td></tr> -<tr><td>xbDate::DumpDateTable()</td><td>Dump internal date tables to stdout</td></tr> -<tr><td>xbDbf::DumpTableLockStatus()</td><td>Dump internal locking status / structures</td></tr> -<tr><td>xbExp::DumpToken()</td><td>Dump expression values</td></tr> -<tr><td>xbExp::DumpTree()</td><td>Dump expression token tree</td></tr> -<tr><td>xbExpNode::DumpToken()</td><td>Dump expression node values</td></tr> -<tr><td>xbFile::DumpBlockToDisk</td><td>Dump specified block of data to a disk file</td></tr> -<tr><td>xbFile::DumpMemToDisk</td><td>Dump specified memory to a disk file</td></tr> -<tr><td>xbIx::DumpNode</td><td>Dump index node header</td></tr> -<tr><td>xbIxMdx::DumpBlock</td><td>Dump MDX index block</td></tr> -<tr><td>xbIxMdx::DumpFreeBlocks</td><td>Dump MDX free block chain</td></tr> -<tr><td>xbIxMdx::DumpHeader</td><td>Dump MDX file header info</td></tr> -<tr><td>xbIxMdx::DumpIxForTag</td><td>Dump MDX index keys and values for a given tag</td></tr> -<tr><td>xbIxMdx::DumpIxNodeChain</td><td>Dump MDX current memory node linked list for a given tag</td></tr> -<tr><td>xbIxMdx::DumpTagBlocks</td><td>Dump MDX blocks for a given tag</td></tr> -<tr><td>xbIxNdx::DumpHeader</td><td>Dump MDX file header info</td></tr> -<tr><td>xbIxNdx::DumpIxNodeChain</td><td>Dump MDX current memory node linked list for a given tag</td></tr> -<tr><td>xbIxNdx::DumpNode</td><td>Dump index node header</td></tr> -<tr><td>xbIxNdx::DumpTagBlocks</td><td>Dump NDX blocks for a given tag</td></tr> -<tr><td>xbMemoDbt3::DumpMemoFreeChain()</td><td>Place holder</td></tr> -<tr><td>xbMemoDbt4::DumpMemoFreeChain()</td><td>Dump list of free blocks available for reuse</td></tr> -<tr><td>xbMemoDbt4::DumpMemoInternals()</td><td>Dump V4 memo file internals</td></tr> -<tr><td>xbString::Dump()</td><td>Dump string internals</td></tr> -<tr><td>xbString::DumpHex()</td><td>Dump string internals in hex</td></tr> -<tr><td>xbBlockRead::DumpReadBlockInternals</td><td>Dump sequential read block internals</td></tr> -</table></center> - - -<br><hr><br><br> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbad.html b/docs/html/xbad.html deleted file mode 100755 index 7356b7b..0000000 --- a/docs/html/xbad.html +++ /dev/null @@ -1,27 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Appendix D</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">File Types</p></H2> -<p align="center">Chapter Updated 12/09/22</p><hr> - -<h3>Supported File Types.</h3> - -All supported file types have one the following file extensions: -The extensions are allway upper case.<br><br> - - -<table > -<TABLE BORDER> -<TR VALIGN="BASELINE"> -<TR><TH>File Type</TH><TH>Description</TH></TR> -<TR><TD>*.DBF</TD><TD>Main database file or Table</TD></TR> -<TR><TD>*.DBT</TD><TD>Memo file data</TD></TR> -<TR><TD>*.INF</TD><TD>INF - Behave like MS ODBC File. Used to auto open NDX index file</TD></TR> -<TR><TD>*.MDX</TD><TD>Production V4 index file, contains up to 47 tags. Automatically opened.</TD></TR> -<TR><TD>*.NDX</TD><TD>Non production V3 index files. Contains one tag per file. Automatically opened if included in ocrreespondin INF file.</TD></TR> -</TABLE> -<br><hr><br> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbae.html b/docs/html/xbae.html deleted file mode 100755 index e860911..0000000 --- a/docs/html/xbae.html +++ /dev/null @@ -1,96 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Appendix E</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">Eror Codes</p></H2> -<p align="center">Chapter Updated 1/31/23</p><hr> - -<h3>Error Codes and Error Processing</h3> - -Alomost all Xbase64 methods and functions return and xbInt16 return code, which is zero or positive on success and negative -if an error condition occurs. -<br><br> -As of the 4.x.x release, the library has been extensively updated to use exception processing and most error -conditions will result in a mesage written to the logfile if logfile processing is enabled. The error routines -typically write two values to the logfile, an error code value and an iErrorStop value which identifies where -exactly in the library code the error occurred. -<br><br> -Error codes are defined in the xbretcod.h file.<br><br><br> - - -<TR><TH>File Type</TH><TH>Description</TH></TR> -<TR><TD>*.DBF</TD><TD>Main database file or Table</TD></TR> -<TR><TD>*.DBT</TD><TD>Memo file data</TD></TR> -<TR><TD>*.INF</TD><TD>INF - Behave like MS ODBC File. Used to auto open NDX index file</TD></TR> -<TR><TD>*.MDX</TD><TD>Production V4 index file, contains up to 47 tags. Automatically opened.</TD></TR> -<TR><TD>*.NDX</TD><TD>Non production V3 index files. Contains one tag per file. Automatically opened if included in ocrreespondin INF file.</TD></TR> - - -<br><br><br> -<table > -<TABLE BORDER> -<TR VALIGN="BASELINE"> -<TR><TH>Description</TH><TH>Error Code</TH><TH>Category</TH></TR> -<TR><TD> XB_NO_ERROR </TD><TD> 0 </TD><TD> general </TD></TR> -<TR><TD> XB_NO_MEMORY </TD><TD> -100 </TD><TD> general </TD></TR> -<TR><TD> XB_INVALID_OPTION </TD><TD> -101 </TD><TD> general </TD></TR> -<TR><TD> XB_DUP_TABLE_OR_ALIAS </TD><TD> -110 </TD><TD> table manager </TD></TR> -<TR><TD> XB_INVALID_NODELINK </TD><TD> -120 </TD><TD> linklist </TD></TR> -<TR><TD> XB_KEY_NOT_UNIQUE </TD><TD> -121 </TD><TD> linklist </TD></TR> -<TR><TD> XB_FILE_EXISTS </TD><TD> -200 </TD><TD> file </TD></TR> -<TR><TD> XB_ALREADY_OPEN </TD><TD> -201 </TD><TD> file </TD></TR> -<TR><TD> XB_DBF_FILE_NOT_OPEN </TD><TD> -202 </TD><TD> file </TD></TR> -<TR><TD> XB_FILE_NOT_FOUND </TD><TD> -203 </TD><TD> file </TD></TR> -<TR><TD> XB_FILE_TYPE_NOT_SUPPORTED</TD><TD> -204 </TD><TD> file </TD></TR> -<TR><TD> XB_RENAME_ERROR </TD><TD> -205 </TD><TD> file </TD></TR> -<TR><TD> XB_INVALID_OBJECT </TD><TD> -206 </TD><TD> file </TD></TR> -<TR><TD> XB_NOT_OPEN </TD><TD> -207 </TD><TD> file </TD></TR> -<TR><TD> XB_NOT_FOUND </TD><TD> -208 </TD><TD> file </TD></TR> -<TR><TD> XB_OPEN_ERROR </TD><TD> -209 </TD><TD> file </TD></TR> -<TR><TD> XB_CLOSE_ERROR </TD><TD> -210 </TD><TD> file </TD></TR> -<TR><TD> XB_SEEK_ERROR </TD><TD> -211 </TD><TD> file </TD></TR> -<TR><TD> XB_READ_ERROR </TD><TD> -212 </TD><TD> file </TD></TR> -<TR><TD> XB_WRITE_ERROR </TD><TD> -213 </TD><TD> file </TD></TR> -<TR><TD> XB_EOF </TD><TD> -214 </TD><TD> file </TD></TR> -<TR><TD> XB_BOF </TD><TD> -215 </TD><TD> file </TD></TR> -<TR><TD> XB_INVALID_BLOCK_SIZE </TD><TD> -216 </TD><TD> file </TD></TR> -<TR><TD> XB_INVALID_BLOCK_NO </TD><TD> -217 </TD><TD> file </TD></TR> -<TR><TD> XB_INVALID_RECORD </TD><TD> -218 </TD><TD> file </TD></TR> -<TR><TD> XB_DELETE_FAILED </TD><TD> -219 </TD><TD> file </TD></TR> -<TR><TD> XB_INVALID_TABLE_NAME </TD><TD> -220 </TD><TD> file </TD></TR> -<TR><TD> XB_EMPTY </TD><TD> -221 </TD><TD> file </TD></TR> -<TR><TD> XB_LIMIT_REACHED </TD><TD> -222 </TD><TD> file </TD></TR> -<TR><TD> XB_BLOCKREAD_NOT_ENABLED </TD><TD> -223 </TD><TD> file </TD></TR> -<TR><TD> XB_DIRECTORY_ERROR </TD><TD> -224 </TD><TD file </TD></TR> -<TR><TD> XB_INVALID_FIELD_TYPE </TD><TD> -300 </TD><TD> field </TD></TR> -<TR><TD> XB_INVALID_FIELD_NO </TD><TD> -301 </TD><TD> field </TD></TR> -<TR><TD> XB_INVALID_DATA </TD><TD> -302 </TD><TD> field </TD></TR> -<TR><TD> XB_INVALID_FIELD_NAME </TD><TD> -303 </TD><TD> field </TD></TR> -<TR><TD> XB_INVALID_MEMO_FIELD </TD><TD> -304 </TD><TD> field </TD></TR> -<TR><TD> XB_INVALID_FIELD </TD><TD> -305 </TD><TD> field </TD></TR> -<TR><TD> XB_INVALID_FIELD_LEN </TD><TD> -306 </TD><TD> field </TD></TR> -<TR><TD> XB_INVALID_DATE </TD><TD> -307 </TD><TD> date field </TD></TR> -<TR><TD> XB_INVALID_LOCK_OPTION </TD><TD> -400 </TD><TD> lock </TD></TR> -<TR><TD> XB_LOCK_FAILED </TD><TD> -401 </TD><TD> lock </TD></TR> -<TR><TD> XB_TABLE_NOT_LOCKED </TD><TD> -402 </TD><TD> lock - need table locked for operation </TD></TR> -<TR><TD> XB_PARSE_ERROR </TD><TD> -500 </TD><TD> expression </TD></TR> -<TR><TD> XB_INVALID_FUNCTION </TD><TD> -501 </TD><TD> expression </TD></TR> -<TR><TD> XB_INVALID_PARM </TD><TD> -502 </TD><TD> expression </TD></TR> -<TR><TD> XB_INCONSISTENT_PARM_LENS </TD><TD> -503 </TD><TD> expression </TD></TR> -<TR><TD> XB_INCOMPATIBLE_OPERANDS </TD><TD> -504 </TD><TD> expression </TD></TR> -<TR><TD> XB_UNBALANCED_PARENS </TD><TD> -505 </TD><TD> expression </TD></TR> -<TR><TD> XB_UNBALANCED_QUOTES </TD><TD> -506 </TD><TD> expression </TD></TR> -<TR><TD> XB_INVALID_EXPRESSION </TD><TD> -507 </TD><TD> expression </TD></TR> -<TR><TD> XB_INVALID_KEYNO </TD><TD> -600 </TD><TD> index </TD></TR> -<TR><TD> XB_INVALID_INDEX </TD><TD> -601 </TD><TD> index file error </TD></TR> -<TR><TD> XB_INVALID_TAG </TD><TD> -602 </TD><TD> invalid index tag name, must be <= 10 bytes </TD></TR> -<TR><TD> XB_INVALID_PAGE </TD><TD> -603 </TD><TD> invalid index page </TD></TR> -<TR><TD> XB_SYNTAX_ERROR </TD><TD> -700 </TD><TD> sql syntax error </TD></TR> -</TABLE> - - - -<br><hr><br> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbaf.html b/docs/html/xbaf.html deleted file mode 100755 index 110db7b..0000000 --- a/docs/html/xbaf.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 15</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H1><p align=center>Sample Programs</p></H1> -<p align=center>Page Updated 12/20/22</p><hr><br><br> - -<CENTER> -<TABLE BORDER> -<CAPTION ALIGN=TOP><H3>XBase Example Programs</H3></CAPTION> -<TR ALIGN=BASELINE> -<TR><TH ALIGN=LEFT>Program<TD>Program Description -<TR><TH ALIGN=LEFT>xb_ex_string<TD>Example program to demonstrate xbString class usage -<TR><TH ALIGN=LEFT>xb_ex_v3_create_dbf<TD>Example program to create V3 DBF file -<TR><TH ALIGN=LEFT>xb_ex_v3_upd_dbf<TD>Example program to update V3 DBF file -<TR><TH ALIGN=LEFT>xb_ex_v4_create_dbf<TD>Example Program to create V4 DBF file -<TR><TH ALIGN=LEFT>xb_ex_v4_upd_dbf<TD>Example program to update V4 DBF file -</TABLE></CENTER> -<br><br> - - -<CENTER> -<TABLE BORDER> -<CAPTION ALIGN=TOP><H3>XBase Utility Programs</H3></CAPTION> -<TR ALIGN=BASELINE> -<TR><TH ALIGN=LEFT>Program<TD>Program Description -<TR><TH ALIGN=LEFT>xb_cfg_check<TD>This program prints the compile settings and options in use -<TR><TH ALIGN=LEFT>xb_copydbf<TD>This program copies a DBF file structure -<TR><TH ALIGN=LEFT>xb_dbfutil1<TD>Menu program for executing Xbase functions -<TR><TH ALIGN=LEFT>xb_deletall<TD>This program marks all records in a DBF file for deletion -<TR><TH ALIGN=LEFT>xb_dumpdbt<TD>Debug memo files -<TR><TH ALIGN=LEFT>xb_dumphdr<TD>This program opens an Xbase file and prints its header -<TR><TH ALIGN=LEFT>xb_dumprecs<TD>This program dumps records for an XBase file -<TR><TH ALIGN=LEFT>xb_execsql<TD>This program executes SQL statements -<TR><TH ALIGN=LEFT>xb_pack<TD>This program packs (removes deleted records) from a DBF database file -<TR><TH ALIGN=LEFT>xb_undelall<TD>This program undeletes all deleted records in a dbf file -<TR><TH ALIGN=LEFT>xb_zap<TD>This program removes all records from a DBF file -</TABLE></CENTER> -<br><br> - - -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbase.jpg b/docs/html/xbase.jpg Binary files differdeleted file mode 100755 index 5070fcb..0000000 --- a/docs/html/xbase.jpg +++ /dev/null diff --git a/docs/html/xbc1.html b/docs/html/xbc1.html deleted file mode 100755 index c07e5f6..0000000 --- a/docs/html/xbc1.html +++ /dev/null @@ -1,199 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 1</TITLE> -<BODY BGCOLOR=#FFFFFF> - -<h1><p align="center">Getting Started</p></h1> -<p align="center">Chapter Updated 12/09/22</p> - -<hr><h2>Overview</h2> - -Welcome to Xbase64 DBMS, a collection of specifications, programs, -utilities and a C++ class library for manipulating legacy Xbase (DBF) type -data files and indices. -<br><br> - -The term Xbase is often used used to describe the format of the original -DBase, Clipper and Foxbase (.DBF) files. The XBase file format is well -documented and has stood the test of time. Various popular programs -still create and read xbase formatted files.<br><br> - -The purpose of the Xbase64 library is to provide reliable and usable -programming tools for reading, writing and updating DBF databases, -indices and memo fields. Version 4.x.x has been tested for compatability -with DBase III (TM) and DBase IV (TM) version data files and indices -*.DBF (data), *.NDX (single tag index), *.MDX (multi tag index) and -*.DBT (memo).<br><br> - -Version 4.x.x is a major rewrite of the library to strengthen error -processing and bring consistency across modules. It includes updates -to the locking process and also includes a module to support MDX multi -tag indices.<br><br> - -Earlier versions of the library have included NTX and CDX index formats -and that code will be re-incorporated into the latest version in the -future. - - -<br><br> -<B>Why use the Xbase library? </B> -The DBF file format is a ubiquitous industry standard with -widespread usage and application. Using this standard file format removes any -<em>vender specific</em> locks that bind you to a particular platform. -Additionally, with Xbase64 only the options needed can be compiled into or out of the library -to provide a custom configuration specific to project requirements. -For a small footprint, locking, memo fields and indices could be excluded from -the library build which would reduce the library size. -This tool is usefull for small to medium sized apps that don't need all the -overhead, sophistication and cost of a complex client server configuration. -The Xbase library is designed to be flexible in which options can be compiled -into or out fo the library and also which environments it can be run on. - - -<br><br><br> - -<hr><h2>System Requirements</h2> - -To build the Xbase64 library, the following items are needed:<br><br> - -A computer, a C/C++ compiler and CMAKE.<br><br> - -The original source code was developed on a Linux platform with the GCC -public domain C/C++ compiler. -<br><br> - -Xbase64 DBMS has been successfully ported and runs on Linux, Mac and and Windows. -<br><br> - -<hr><h2>Classes and User Interface</h2> - -<a href="..\doxygen\html\index.html">Classes and User Interface Documentation via Doxygen</a> - -<br><br> -<hr><h2>Portability, Type Defs and Structures</h2> - -To make the Xbase64 library as portable as possible, the following things occurred: -<br><br> -<li>The software was developed to compile and run on either 32 or 64 bit architectures. -<li>The software was developed to compile and run on either big endian or little endian archtectures. -<li>All numeric data is stored in little endian format. -<li>The library is built using <a href="https://cmake.org">Cmake</a> to provide support on a wide variety of platforms. -<li>Field types were defined to be consistent across various OS and CPU configurations. -Xbase64 defines the following field types:<br><br><br> -<CENTER> -<TABLE BORDER> -<CAPTION ALIGN=TOP><h3>Field Types</h3></CAPTION> -<TR ALIGN=BASELINE> -<TR><TH ALIGN=LEFT>Type<TD>Description -<TR><TH ALIGN=LEFT>xbBool<TD>Contains xbTrue (0) or xbFalse (1) -<TR><TH ALIGN=LEFT>xbInt16<TD>16 bit int -<TR><TH ALIGN=LEFT>xbUInt16<TD>16 bit unsigned int -<TR><TH ALIGN=LEFT>xbInt32<TD>32 bit int -<TR><TH ALIGN=LEFT>xbUInt32<TD>32 bit unsigned int -<TR><TH ALIGN=LEFT>xbInt64<TD>64 bit int -<TR><TH ALIGN=LEFT>xbUInt64<TD>64 bit unsigned int -<TR><TH ALIGN=LEFT>xbDouble<TD>double -<TR><TH ALIGN=LEFT>char<TD>char -<TR><TH ALIGN=LEFT>void<TD>void -<TR><TH ALIGN=LEFT>struct SCHEMA<TD>Used for defining record structures -</TABLE></CENTER> -<br><br> - -Xbase64 was designed for portability utilizing standard ANSI-C/C++ compliant -code. If you decide to write updates to the Xbase64 project, please try -to keep your work to standard C/C++ generic calls and use the above predefined field types.<br><br> - -<hr><h2>Compilation Overview</h2> -To build the xbase64 library, verify you have:<br> -<li>Xbase64 source code -<li>cmake 2.6 or LATER -<li>Compiler and linker - -<br><br> -Verify you have access rights to the target location of the library - -<br><br> -For Linux: -<br><br> -<li>cd xbase/Linux -<li>cmake . -<li>make -<li>make test -<li>sudo make install -<li>Verify the ld.so.conf file has the library target directory. For example -update file /etc/ld.so.conf to include /usr/local/lib and run ldconfig. -<br><br> - -For Mac: -<br><br> -<li>Verify you have xcode installed and operational. -<li>cd xbase/Mac -<li>cmake . -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -<li>make -<li>make test -<br><br> - -For Windows 64 bit with Visual Studio: -<br><br> -<li>Open a Visual Studio 64 bit Shell -<li>cd xbase\Win64VS -<li>buildwin.bat -<li>nmake test -<li>From a VS Studio 64 bit shell in admin mode: nmake install -<br><br> - -For Windows 32 bit with Visual Studio: -<br><br> -<li>Open a Visual Studio 32 bit Shell -<li>cd xbase\Win32VS -<li>buildwin.bat -<li>nmake test -<li>From a VS Studio 32 bit shell in admin mode: nmake install -<br><br> - -For Windows 32 bit with Borland 5.5 free compiler -<br><br> -<li>cd xbase\Win32Borland -<li>BuildBorland.bat -<li>make test -<br><br> - -For other platforms: -<br><br> -Here is something to start with... -<li>cd xbase -<li>md MyPlatform -<li>cd MyPlatform -<li>cp ../Cmake/CmakeLists.txt. -<li>Enter the appropriate make command for your environment. Check the cmake web site for help.<br> - On Linux, it is .cmake, then make - your mileage may vary - - Send your results to the library maintainer so it can be added to this library - - - -To use the Xbase classes, include the following header file in the program: -<br><br> - -#include <xbase.h><br><br> - -For more information on getting started, check out the sample programs in the src/examples folder. -<br><br> - -<hr><br> -<h2>System Limitations</h2> -<br> -Maximum size of a database file is the size of LONG - 2,147,483,647 bytes<br> -Total number of fields in a database - 255 <br> -Total number of characters in all fields - 32767<br> -Maximum number of characters in a field - 254<br> -Total number of records in a file - 1 billion<br> -Maximum index key length - 100 bytes<br> -Maximum .DBT file memo block size - 32256<br> -Maximum expression result length - 100 bytes<br> -Maximum NDX index key length - 100 bytes<br><br> -<hr><br> -<p><img src=xbase.jpg><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc10.html b/docs/html/xbc10.html deleted file mode 100755 index 04f5158..0000000 --- a/docs/html/xbc10.html +++ /dev/null @@ -1,12 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 10</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">CDX Indices</p></H2> -<p align="center">Chapter Updated 11/28/22</p><hr> - -<h3>Pending CDX index module development.</h3> - -<hr> -</BODY> -</HTML> diff --git a/docs/html/xbc11.html b/docs/html/xbc11.html deleted file mode 100755 index 4230f3f..0000000 --- a/docs/html/xbc11.html +++ /dev/null @@ -1,12 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 10</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">CDX Indices</p></H2> -<p align="center">Chapter Updated 11/28/22</p><hr> - -<h3>Pending IDX index module development.</h3> - -<hr> -</BODY> -</HTML> diff --git a/docs/html/xbc12.html b/docs/html/xbc12.html deleted file mode 100755 index a40c7e0..0000000 --- a/docs/html/xbc12.html +++ /dev/null @@ -1,86 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 12</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H1><p align="center">Record and File Locking</p></H1> -<p align="center">Chapter Updated 12/13/22</p><hr> - -<h3>Locking Overview</h3> - -Xbase64 supports multi-user processing through file and record locks. -Record locking restricts multiple cooperating programs from simultaneously -accessing the same data and corrupting it. Without record and file locking -in a multi-user environment, simultaneous access to the data and index files -can cause the files to become inaccurate and unusable.<br><br> - -Automatic record locking is on by default in the Xbase64 library. To disable it, -use method xbXBase::DisableDefaultAutoLock() and to enable it, use method xbXBase::EnableDefaultAutoLock(). -<br><br> -Locking can also be enabled / disabled at the table level with with xbDbf::SetAutoLock().<br><br> -If autolocking is disabled and the code base is being used in a multi user environment, it is -up to the application program to verify the needed locks are set as there is no checking or -setting any locks if autolocking is turned off. It is only safe to turn off the autolocking functionality -if the library is being used in a single user environment. - -<br><br> -The current Xbase64 record locking logic is modeled after DBase (tm) V7 locking. -<br><br> - -The locking methods return either XB_LOCK_FAILED or XB_NO_ERROR. If they return -XB_LOCK_FAILED the actual reason can be found in the global variable -<em>errno</em> or function <em>perror()</em> can be executed to view the -results. -<br><br> - -The errno field may contain one of the following values if the lock was not -successful.<br><br> -<TABLE BORDER> -<TR VALIGN="BASELINE"> -<TR><TH ALIGN="LEFT">Error Code<TD>Description -<TR><TH ALIGN="LEFT">EBADF<TD>Invalid file descriptor -<TR><TH ALIGN="LEFT">EINVAL<TD>Invalid lock information or file does not support locks -<TR><TH ALIGN="LEFT">EACCESS<BR>EAGAIN<TD>Lock can not be set because it is blocked by an existing lock on the file. -<TR><TH ALIGN="LEFT">ENOLCK<TD>The system is out of lock resources, too many file locks in place. -<TR><TH ALIGN="LEFT">EDEADLK<TD>Deadlock condition -<TR><TH ALIGN="LEFT">EINTR<TD>Process was interrupted by a signal while it was waiting -</TABLE> -<br><br> - -<h3>Linux/Windows File Locking Compatibility Issue</h3> - -There is a compatibility locking issue to be aware of. Windows environments allow for the exclusive -opening of file handles and Linux/Unix platforms do not. If you are writing an application that will be -using a tool like Dbase on a Windows machine, accessing a file on a Linux/Samba configure machine, -be aware that the file could be opened in exclusive mode by DBase on the Windows system, and the same file could -be simultaneously opened with a program on the Unix box. That could cause some issues. - -<br><br> -In Unix, a program can not lock a file so another process can not access it.<br> -In Windows, a program can lock a file so another process can not access it.<br> -DBase(tm) supports routines to open files exclusively, preventing other users from opening a file.<br> -Locking on the Mac/Apple platform only works on NFS shares. It does not work with SMB shares. - -<br><h3>Samba settings</h3> - -If you will be using Samba on Linux/Unix and sharing files between Linux and Windows machines, -you will need to disable oplocks. In the smb.conf file, set:<br> -<br> -[sharename]<br> -oplocks = False<br> -level2 oplocks = False - - -<br><h3>iLockFlavor</h3> - -The library was constructed in a manner so that it could be updated to support alternate lock "flavors". -The 4.x.x library is built to mirror the DBase locking, but the structure is in place to expand to other locking -types if needed. - - - - -<br><br><br> -<hr><br> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc13.html b/docs/html/xbc13.html deleted file mode 100755 index 9f51a85..0000000 --- a/docs/html/xbc13.html +++ /dev/null @@ -1,46 +0,0 @@ - -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 13</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">Logfiles</p></H2> -<p align="center">Chapter Updated 11/29/22</p><hr> - - -<h3>Logging</h3> - -The Xbase library includes a logging module that can be turned on or off for auditing purposes. - -See example code below for how to use the logging routines. - -<hr> - -#include "xbase.h"<br> -using namespace xb;<br> -<br> -int main( int argCnt, char **av ){<br> - - #ifdef XB_LOGGING_SUPPORT<br> - xbString sMsg;<br> - xbString sLogFileName;<br> - xbXBase x;<br> - sLogFileName = "/home/xbase/logfiles/LogFile.txt";<br> - x.SetLogFileName( sLogFileName );<br> - x.EnableMsgLogging(); <br><br> - - - std::cout << "Logfile is [" << x.GetLogFqFileName().Str() << "]" << std::endl;<br> - sMsg.Sprintf( "Program [%s] initializing...", av[0] );<br> - x.WriteLogMessage( sMsg );<br> - std::cout << "Logging status is " << x.GetLogStatus() << std::endl;<br> - sMsg = "A logfile message";<br> - x.WriteLogMessage( sMsg );<br> - x.DisableMsgLogging();<br> - #endif /* XB_LOGGING_SUPPORT */<br> - return 0;<br> -}<br> - -<hr> -<p><img src="xbase.jpg"><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc14.html b/docs/html/xbc14.html deleted file mode 100755 index 2c086df..0000000 --- a/docs/html/xbc14.html +++ /dev/null @@ -1,113 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 14</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">CDX Indices</p></H2> -<p align="center">Chapter Updated 12/08/22</p><hr> - -<h3>SQL Command Status</h3> - -Development of SQL support is still underway and very preliminary. As of the 4.0.3 version, the following SQL commands -are available.<br><br> -The SQL commands are modeled after industry standard SQL specifications and do what you would expect an SQL command to do. -<br> -Use of <em>[brackets]</em> in this chapter identifies optional components of a given command. -<br><br> -<hr> -<h3>ALTER TABLE</h3> -Expected format:<br> -ALTER TABLE tablename.DBF RENAME TO newtablename.DBF -<br><br> -<hr> -<h3>CREATE INDEX</h3> -Expected format to create an Dbase 3, NDX index:<br> -CREATE INDEX ixname.NDX ON tablename.dbf ( EXPRESSION ) [ASSOCIATE] - -<br><br> -Expected format to create an Dbase 4, tag on an MDX index:<br> -CREATE [UNIQUE] INDEX tagname ON tablename.DBF ( EXPRESSION ) [DESC] [FILTER .NOT. DELETED()] - -<br><br> -The ASSOCIATE parameter is specific to Xbase64 library, it is used to associate non production (NDX) index file to a dbf -file so it will be automatically opened with the dbf file whenever the dbf file is opened by the xbase64 routines. -<br><br> -The [ASSOCIATE] parameter is not used with MDX production indices -<br><br> -Xbase first looks for ".NDX" in the file name to determine if an NDX index should be created. -If .NDX is not in the filename, it looks in the uda for "IXTYPE" for either NDX or MDX to -detmermine the index type to create. if IXTYPE is not found, it creates an MDX tag. -<br><br> -The optional DESC parameter defines an entire index key as descending. This is -different than other SQL implementations where specific fields can be descending. -<br><br> -The optional FILTER parameter is specific to the XBASE64 library, is it used to assign a filter to a tag in an -MDX style index. Everything to the right of the keyword FILTER is considered part of the filter. -<br><br> -The original DBASE indices used to '+' to create an index on more than one field -<br>ie: FIELD1+FIELD2+FIELD3 -<br><brSQL uses commas: ie: FIELD1, FIELD2, FIELD3 -<br> -The Xbase library supports either '+' or ',' when creating mutli field indices. -<br><br> -<hr> - - - -<h3>CREATE TABLE</h3> -Expected format:<br> -CREATE TABLE tablename.dbf (Field1 CHAR(10), INTFLD1 INTEGER, ... ) -<br><br> -<table border=1> -<tr><th>SQL TYPE</th><th>XBASE Field Type</th></tr> -<tr><td>SMALLINT</td><td>NUMERIC(6,0)</td></tr> -<tr><td>INTEGER</td><td>NUMERIC(11,0)</td></tr> -<tr><td>DECIMAL(x,y)</td><td>NUMERIC(x+1,y)</td></tr> -<tr><td>NUMERIC(x,y)</td><td>NUMERIC(x,y)</td></tr> -<tr><td>FLOAT(x,y)</td><td>FLOAT(x,y)</td></tr> -<tr><td>CHAR(n)</td><td>CHARACTER(n)</td></tr> -<tr><td>DATE</td><td>DATE</td></tr> -<tr><td>VARCHAR</td><td>MEMO</td></tr> -<tr><td>LOGICAL</td><td>LOGICAL</td></tr> -</table> -<br> -<hr> - - -<h3>DELETE</h3> -Expected format:<br> -DELETE FROM tablename.DBF [WHERE expression] -<br><br> -<hr> - - -<h3>DROP INDEX</h3> -Expected format:<br> -DROP INDEX [IF EXISTS] ixname.NDX ON tablename.DBF<br> -DROP INDEX [IF EXISTS] tagname ON tablename.DBF<br> -<br> - - -<hr> -<h3>DROP TABLE</h3> -Expected format:<br> -DROP TABLE [IF EXISTS] tablename.DBF -<br> -<hr> -<h3>INSERT</h3> -Expexted format:<br> -INSERT INTO tablename (field1, field2, field3,...) VALUES ( 'charval', numval, 'what is the correct odbc date format to use? CCYYMMDD'); -<br><br> -<hr> -<h3>SET</h3> -Used to set a variable name<br> -Expected format:<br> -SET ATTRIBUTE = DATAVALUE<br> -SET ATTRIBUTE = ^ (to delete an entry) <br> -<br> -<hr><br><br> -<p><img src=xbase.jpg><br><hr> - -</BODY> -</HTML> - - diff --git a/docs/html/xbc15.html b/docs/html/xbc15.html deleted file mode 100755 index fde33b8..0000000 --- a/docs/html/xbc15.html +++ /dev/null @@ -1,96 +0,0 @@ - -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 15</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">Block Read Functionality</p></H2> -<p align="center">Chapter Updated 2/1/23</p><hr> - - -<h3>Block Reads</h3> - -As of release 4.1.1, the Xbase library includes functionality for reading a DBF file in blocks, rather than one record at a time.<br><br> - -This functionality can be used to improve application performance in situations where a data file is being read sequentially. -For situations where records are retrieved randomly from the file, enabling this probably won't help much. In short, this -can be turned on when accessing a file sequentially and should be left off when not processing sequentially.<br><br> - -The logic is all handled internally within the library, all that is needed is to enable it and the library handles the rest.<br><br> - -<h3>One Caveat</h3> -This functionality was originally designed with reporting in mind and doesn't currently have any auto locking associated with it. -<br><br> - - -<h3>Sample Code</h3> -See example code below for how to enable and disable the feature. - - -<hr> - -#include "xbase.h"<br> -using namespace xb;<br> -<br> -int main(int ac,char** av)<br> -{<br> - xbXBase x;<br> - xbInt16 iRc;<br> - x.EnableMsgLogging();<br> - x.SetLogSize( 1000000L );<br> -<br> - if (ac <= 1) {<br> - std::cout << "Usage: xb_dumprecs filename..." << std::endl;<br> - return 1;<br> - }<br> -<br> - xbDbf *MyFile = NULL;<br> - if(( iRc = x.OpenHighestVersion( av[1], "", &MyFile )) != XB_NO_ERROR ){<br> - std::cout << "Could not open file iRc = " << iRc << " file = " << av[1] << std::endl;<br> - x.DisplayError( iRc );<br> - return 0;<br> - }<br> -<br> -// std::cout << "Processing file sequentially from beginning..." << std::endl;<br> -<br> -<br> -<b> - // turn on Block Read Processing<br> - #ifdef XB_BLOCKREAD_SUPPORT<br> - MyFile->EnableBlockReadProcessing();<br> - #endif<br> -</b> -<br> - xbUInt32 j = 0;<br> - xbUInt32 ulRecCnt = 0;<br> -<br> - iRc = MyFile->GetRecordCnt( ulRecCnt );<br> -<br> - if( iRc < XB_NO_ERROR )<br> - return iRc;<br> - while( j < ulRecCnt ){<br> - if( j == 0 )<br> - iRc = MyFile->DumpRecord(++j, 2, 2 );<br> - else<br> - iRc = MyFile->DumpRecord(++j, 2, 1 );<br> - if( iRc != XB_NO_ERROR ){<br> - x.DisplayError( iRc );<br> - return 1;<br> - }<br> - }<br> - std::cout << j << " Records processed." << std::endl;<br> -<br> -<br><b> - // optionally turn off Block Read Processing<br> - #ifdef XB_BLOCKREAD_SUPPORT<br> - MyFile->DisableBlockReadProcessing();<br> - #endif<br></b> -<br> - MyFile->Close();<br> - return 0;<br> -}<br> -<br> - -<hr> -<p><img src="xbase.jpg"><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc16.html b/docs/html/xbc16.html deleted file mode 100755 index 873264d..0000000 --- a/docs/html/xbc16.html +++ /dev/null @@ -1,52 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 16</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">Class Inventory</p></H2> -<p align="center">Chapter Updated 2/1/23</p><hr> -<br> -<center><h3>Class Descriptions</h3></center> - -<center> -<table border=1> -<tr><th>Class</th><th>Description</th></tr> -<tr><td>xbBcd</td><td>Supports binary coded decimal data</td></tr> -<tr><td>xbBlockRead<td>Supports block read functionality for improved sequential file access performance.</td></tr> -<tr><td>xbDate</td><td>Support date operations on a given date formatted as YYYYMMDD</td></tr> -<tr><td>xbDbf</td><td>Base class for DBF file handling. If you are adding support for a new file type, <br>derive new file type class from this.</td></tr> -<tr><td>xbDbf3</td><td>Derived from xbDbf, supports DBase V3 files</td></tr> -<tr><td>xbDbf4</td><td>Derived from xbDbf, supports DBase V4 files</td></tr> -<tr><td>xbExp</td><td>Class for supporting expression logic</td></tr> -<tr><td>xbExpNode</td><td>Class definition of a single node, utilized by xbExp</td></tr> -<tr><td>xbFile</td><td>Main file class. If you are porting this library to another platform, start here</td></tr> -<tr><td>xbFilter</td><td>Supports filters</td></tr> -<tr><td>xbIx</td><td>Base class for index file support. If you are adding support for a new index type, <br>derive new index type class from this.</td></tr> -<tr><td>xbIxNdx</td><td>Derived from xbIx, supports NDX style indices.</td></tr> -<tr><td>xbIxMdx</td><td>Derived from xbIx, supports MDX style indices</td></tr> -<tr><td>xbLinkList</td><td>Class supporting linked list functionality</td></tr> -<tr><td>xbLinkListOrd</td><td>Class supporting ordered linked list functionality</td></tr> -<tr><td>xbLinkListNode</td><td>Class defining one node, used by xbLinkList and xbLinkListOrd</td></tr> -<tr><td>xbLog</td><td>Class supporting general log file activity</td></tr> -<tr><td>xbMemo</td><td>Base class for supporting memo (.DBT) files. If you are adding support for a new memo type, <br>derive new memo type class from this.</td></tr> -<tr><td>xbMemoDbt3</td><td>Derived from xbMemo, supports V3 Memo files</td></tr> -<tr><td>xbMemoDbt4</td><td>Derived from xbMemo, supports V3 Memo files</td></tr> -<tr><td>xbSql</td><td>Supports SQL access</td></tr> -<tr><td>xbSsv</td><td>Base class, shared system values</td></tr> -<tr><td>xbString</td><td>String handling class</td></tr> -<tr><td>xbTag</td><td>Class to support index tags</td></tr> -<tr><td>xbTblMgr</td><td>Class used internally in the library for managing multiple open files/tables</td></tr> -<tr><td>xbUda</td><td>Class for supporting fields for the xbSql functions. Stands for User data area</td></tr> -<tr><td>xbXBase</td><td>Class to tie everything together. Every application program starts with one of these</td></tr> -</table> -</center> - -<hr> -<br><br> -Fix me... -<p><img src="Xbase64ClassDiagram.jpg"><br> - -<br><br> -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc17.html b/docs/html/xbc17.html deleted file mode 100755 index c0b2208..0000000 --- a/docs/html/xbc17.html +++ /dev/null @@ -1,219 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 17</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">Class xbSsv</p></H2> -<p align="center">Chapter Updated 2/7/23</p><hr> - -<h3>Class xbSsv - Shared System Values.</h3> - -Base class xbSsv is used for maintaining static variables used system -wide by the XBase library routines and is a base class that is used by the xbXBase class. -See the diagram in chapter 15 to gain an understanding of where the xbSsv class sits in relation to the -other classes. Accessing the methods in this class are done via the xbXBase class instance.<br><br> -Additionally, there are a few other misc routines contained in this class that are available to all -subordinate classes/objects. -<br><br><br><br> - - -<center> -<table border=1> -<tr><th width=40%>Method</th><th>Description</th></tr> - -<tr><td>void BitDump( unsigned char c ) const<br>void BitDump( char c ) const</td><td>These routines dump the bits for a specified char field to stdout.</td></tr> -<tr><td>xbBool BitSet( unsigned char c, xbInt16 iBitNo ) const</td><td>This routine will set a specified bit in a char field.</td></tr> -<tr><td>void DisplayError( xbInt16 ErrorCode ) const</td><td>This routine prints a description for a specifed error to stdout.</td></tr> - -<tr><td>xbString& GetDataDirectory() const<br>void SetDataDirectory( const xbString &sDataDirectory )</td> - <td>Get and Set the current directory where the library routines expect to find the .DBF, .DBT, .NDX and .MDX files.</td></tr> - -<tr><td>xbString& GetDefaultDateFormat() const<br>void SetDefaultDateFormat( const xbString &sDefaultDateFormat )</td> - <td>Get and Set the current default date format used by the date formatting routines if no format specifier is provided.</td></tr> - -<tr><td>xbInt16 GetEndianType() const</td><td>Returns the current Endian type of the machine the library is operating on.</td></tr> -<tr><td>const char *GetErrorMessage( xbInt16 ErrorCode ) const</td><td>Returns a pointer to an error message for a given error number.</td></tr> - -<tr><td>xbBool GetDefaultAutoCommit() const<br>void SetDefaultAutoCommit( xbBool bDefaultAutoCommit )</td> - <td>Get and Set the default auto commit status. If auto commit is on, the library will automatically post any updates to the database when navigating away from an updated record.</td></tr> - -<tr><td>xbBool GetHomeDir( xbString &sHomeDirOut )</td><td>Get the home directory for the current user.</td></tr> - -<tr><td>xbString& GetLogDirectory() const<br>void SetLogDirectory( const xbString &sLogDirectory )</td> - <td>Get and set the directory location for any system generated logfiles.</td></tr> -<tr><td>xbString& GetLogFileName() const</td><td>Returns the default log file name.</td></tr> - - -<tr><td>xbBool GetMultiUser() const<br>void SetMultiUser( xbBool bMultiUser )</td> - <td>Get and set multi user status. This turns the auto locking on and off. For better performance in single user applications, turn multuser off.</td></tr> - -<tr><td>xbInt16 GetUniqueKeyOpt() const<br>xbInt16 SetUniqueKeyOpt( xbInt16 iUniqueKeyOpt )</td> - <td>Determines library behavior for unique key processing. The original Dbase (tm) product allowed duplicate recrds in the .DBF file when the unique option was specified for a given index tag. - The Xbase library supports either the original DBase behavior (XB_EMULATE_DBASE), or the prevention of duplicate records for duplicate keys (XB_HALT_ON_DUPKEY).</td></tr> - - -<tr><td>xbInt16 GetDefaultLockRetries() const<br>void SetDefaultLockRetries( xbInt16 iRetryCount )</td> - <td>Get and Set the number of times to attempt a lock</td></tr> - -<tr><td>xbInt32 GetDefaultLockWait() const<br>void SetDefaultLockWait( xbInt32 lRetryWait ) - </td><td>Get and Set the wait time between lock attempts.</td></tr> - -<tr><td>xbInt16 GetDefaultLockFlavor() const<br>void SetDefaultLockFlavor( xbInt16 iLockFlavor ) - </td><td>For future use. With current versions, only DBase (TM) locking offsets are supported.</td></tr> - -<tr><td>xbBool GetDefaultAutoLock() const<br>void SetDefaultAutoLock( xbBool bAutoLock )<br>void EnableDefaultAutoLock()<br>void DisableDefaultAutoLock() - </td><td>Set, Get or update Auto Lock Status</td></tr> - - -<tr><td>xbInt16 GetCreateMdxBlockSize() const<br>xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize ) - </td><td>Set or get MDX Index block size. Must be a multiple of 512.</td></tr> - -<tr><td>xbUInt32 GetDefaultBlockReadSize() const<br>void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize ) - </td><td>Set or Get the default block size for Block Read functionality. Block reading is used to improve sequentential access performance.</td></tr> -</table> - -<br><br> - -<h3>Example program using xbSsv methods</h3> -</center> -<xmp> -/* xb_ex_ssv.cpp -XBase64 Software Library - -Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel - -The xb64 software library is covered under the terms of the GPL Version 3, 2007 license. - -Email Contact: - - XDB-devel@lists.sourceforge.net - XDB-users@lists.sourceforge.net - -This program demonstrates using functionality of the xbSsv class (Shared system values) - -*/ - -#include "xbase.h" - -using namespace xb; - -int main( int ac, char ** av ){ - - xbXBase x; // set up xbase for business - xbString sMsg; // a message string - - sMsg.Sprintf( "Program [%s] initializing...", av[0] ); - std::cout << sMsg.Str() << std::endl; - - // example code to set up log file usage - #ifdef XB_LOGGING_SUPPORT - char cSeperator; // is this a unix (/) or windows (\) file system - xbString sLog; // general string for log file activities - sLog = x.GetLogFqFileName().Str(); // get the system default log file name - std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl; - - cSeperator = sLog.GetPathSeparator(); // get the seperator from - std::cout << "Path seperator = [" << cSeperator << "]" << std::endl; - - sLog.Sprintf( "..%c", cSeperator ); - x.SetLogDirectory( sLog ); - std::cout << "sLog = [" << sLog.Str() << "]\n"; - - sLog = x.GetLogFqFileName().Str(); // get the system default log file name - std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl; - - // turn on logging after file name set - x.EnableMsgLogging(); - #endif // XB_LOGGING_SUPPORT - - // const char *GetErrorMessage( xbInt16 ErrorCode ) const; - // void DisplayError( xbInt16 ErrorCode ) const; - std::cout << "DisplayError( -100 ) - "; - x.DisplayError( -100 ); - // << "]" << std::endl; - - - // void SetDefaultDateFormat( const xbString &sDefaultDateFormat ); - // xbString& GetDefaultDateFormat() const; - std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl; - - // void SetDataDirectory ( const xbString &sDataDirectory ); - // xbString& GetDataDirectory() const; - std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl; - - // xbInt16 GetEndianType() const; - if( x.GetEndianType() == 'L' ) - std::cout << "Little Endian Architecture." << std::endl; - else - std::cout << "Bid Endian Architecture." << std::endl; - - //xbBool GetDefaultAutoCommit() const; - //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit ); - if( x.GetDefaultAutoCommit()) - std::cout << "AutoCommit is on." << std::endl; - else - std::cout << "AutoCommit is off." << std::endl; - - //xbBool GetMultiUser () const; - //void SetMultiUser ( xbBool bMultiUser ); - if( x.GetMultiUser()) - std::cout << "Multi user (locking) is enabled." << std::endl; - else - std::cout << "Multi user (locking) not enabled." << std::endl; - - #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT) - // xbInt16 GetUniqueKeyOpt () const; - // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt ); - // XB_HALT_ON_DUPKEY - // XB_EMULATE_DBASE - if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY ) - std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl; - else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE ) - std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl; - #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT) - - #ifdef XB_LOCKING_SUPPORT - //xbInt16 GetDefaultLockRetries () const; - //void SetDefaultLockRetries ( xbInt16 iRetryCount ); - //xbInt32 GetDefaultLockWait () const; - //void SetDefaultLockWait ( xbInt32 lRetryWait ); - //xbInt16 GetDefaultLockFlavor () const; - //void SetDefaultLockFlavor ( xbInt16 iLockFlavor ); - //xbBool GetDefaultAutoLock () const; - //void SetDefaultAutoLock ( xbBool bAutoLock ); - //void EnableDefaultAutoLock (); - //void DisableDefaultAutoLock (); - - std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl; - std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl; - std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl; - #endif // XB_LOCKING_SUPPORT - - #ifdef XB_MDX_SUPPORT - // xbInt16 GetCreateMdxBlockSize() const; - // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize ); - std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl; - #endif // XB_MDX_SUPPORT - - #ifdef XB_BLOCKREAD_SUPPORT - // xbUInt32 GetDefaultBlockReadSize() const; - // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize ); - std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl; - #endif // XB_BLOCKREAD_SUPPORT - - //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const; - //void BitDump ( unsigned char c ) const; - //void BitDump ( char c ) const; - std::cout << "BitDump( 'A' ) - "; - x.BitDump( 'A' ); - - return 0; -} - - -</xmp> - -<br><br> -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc18.html b/docs/html/xbc18.html deleted file mode 100755 index 36f3b50..0000000 --- a/docs/html/xbc18.html +++ /dev/null @@ -1,252 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 18</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">Class xbXBase</p></H2> -<p align="center">Chapter Updated 2/7/23</p><hr> - -<h3>Class xbXBase - Core Level Class</h3> - - -The xbXBase class is the core class that needs to be in every application program. -Established an instance of class xbXBase before any other Xbase calls are made. - -<i>xbXBase x</i> - -<br><br> -xbXBase is derived from base classes xbTblMgr and xbSsv. -<br><br><br><br> - - - - - -<center> -<table border=1> -<tr><th width=40%>Method</th><th>Description</th><th>Category</th></tr> - -<tr><td>xbInt16 CloseAllTables()</td><td>Close all open tables.</td><td>Table</tr> - -<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf &dbf, int dummy )</td><td>Open highest version available for sTableName.</td><td>Table</tr> -<tr><td>xbInt16 OpenHighestVersion( const xbString &sTableName, const xbString &sAlias, xbDbf **dbf )</td><td>Open highest version available for sTableName.</td><td>Table</tr> -<tr><td>xbDbf * Open( const xbString &sTableName, xbInt16 &iRc )</td><td>Open the highest available version of the dbf file. Defaults to XB_READ_WRITE and XB_MULTI_USER mode.</td><td>Table</tr> -<tr><td>xbDbf * Open( const xbString &sTableName, const xbString &sAlias, xbInt16 iOpenMode, xbInt16 iShareMode, xbInt16 iVersion, xbInt16 &iRc )</td><td>Open table.</td><td>Table</tr> - -<tr><td colspan=3><hr></td></tr> -<tr><td>void DisableMsgLogging()</td><td>Disable logging routines.</td><td>Logging</td></tr> -<tr><td>void EnableMsgLogging ()</td><td>Enable logging routines.</td><td>Logging</td></tr> -<tr><td>xbInt16 FlushLog()</td><td>Flush any queued logfile updates to disk.</td><td>Logging</td></tr> -<tr><td>const xbString &GetLogDirectory () const</td><td>Get the current logfile directory.</td><td>Logging</td></tr> -<tr><td>const xbString &GetLogFileName () const</td><td>Get the current logfile name.</td><td>Logging</td></tr> -<tr><td>const xbString &GetLogFqFileName() const</td><td>Get fully qualified logfile name.</td><td>Logging</td></tr> -<tr><td>xbBool GetLogStatus () const</td><td>Get the logging status.</td><td>Logging</td></tr> -<tr><td>void SetLogDirectory( const xbString &sLogFileDirectory )</td><td>Set the log directory. Must be done while logging is off.</td><td>Logging</td></tr> -<tr><td>void SetLogFileName( const xbString &sLogFileName )</td><td>Set the log file name. Must be done while logging is off.</td><td>Logging</td></tr> -<tr><td>void SetLogSize( size_t lSize )</td><td>Set the logfile size. After the size is reached, the log file roll.</td><td>Logging</td></tr> -<tr><td>xbInt16 WriteLogBytes ( xbUInt32 lCnt, const char *p )</td><td>Write lCnt bytes pointed to by pointer p to the logfile.</td><td>Logging</td></tr> -<tr><td>xbInt16 WriteLogMessage( const xbString &sLogMessage, xbInt16 iOutputOpt = 0 )</td><td>Write a string to the logfile.</td><td>Logging</td></tr> - -<tr><td colspan=3><hr></td></tr> -<tr><td>xbInt16 xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, xbString &sOptRqst, xbString &sParmOut )<br> -xbXBase::GetCmdLineOpt( xbInt32 lArgc, char **sArgv, const char *sOptRqst, xbString &sParmOut )</td><td>Parse command line values seeking given parameter info.</td><td>Misc</td></tr> - -<tr><td>void xbSleep( xbInt32 lMillisecs )</td><td>Sleep command, used mainly in lock commands for waiting between retries.</td><td>Misc</td></td></tr> - -<tr><td colspan=3><hr></td></tr> -<tr><td>xbInt16 ABS( xbDouble dIn, xbDouble &dOut )</td><td>Dbase ABS function.</td><td>Expression</td></tr> -<tr><td>xbInt16 ALLTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase ALLTRIM function.</td><td>Expression</td></tr> -<tr><td>xbInt16 ASC( const xbString &s, xbDouble &dAscOut )</td><td>Dbase ASC function.</td><td>Expression</td></tr> -<tr><td>xbInt16 AT( const xbString &sSrchFor, const xbString &sBase, xbDouble &dPos )</td><td>Dbase AT function.</td><td>Expression</td></tr> -<tr><td>xbInt16 CDOW( xbDate &dInDate, xbString &sOutDow )</td><td>Dbase CDOW function.</td><td>Expression</td></tr> -<tr><td>xbInt16 CHR( xbDouble dAsciCd, xbString &sOut )</td><td>Dbase CHR function.</td><td>Expression</td></tr> -<tr><td>xbInt16 CMONTH( xbDate &dInDate, xbString &sOutMonth )</td><td>Dbase CMONTH function.</td><td>Expression</td></tr> -<tr><td>xbInt16 CTOD( const xbString &sInDate, xbDate &dOutDate )</td><td>Dbase CTOD function.</td><td>Expression</td></tr> -<tr><td>xbInt16 DATE( xbDate &dOutDate )</td><td>Dbase DATE function.</td><td>Expression</td></tr> -<tr><td>xbInt16 DAY( const xbDate &dInDate, xbDouble &dOutDay )</td><td>Dbase DAY function.</td><td>Expression</td></tr> -<tr><td>xbInt16 DEL( xbDbf * d, xbString &sOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DEL function.</td><td>Expression</td></tr> -<tr><td>xbInt16 DELETED( xbDbf * d, xbBool &bOut, xbInt16 iRecBufSw = 0 )</td><td>Dbase DELETED function.</td><td>Expression</td></tr> -<tr><td>xbInt16 DESCEND( const xbString &sIn,xbString &sOut )<br>xbInt16 DESCEND( const xbDate &dInDate, xbDate &dOutDate )<br>xbInt16 DESCEND( const xbDouble dIn, xbDouble &dsOut )</td><td>Dbase DESCEND function.</td><td>Expression</td></tr> -<tr><td>xbInt16 DOW( const xbDate &sInDate, xbDouble &dDowOut )</td><td>Dbase DOW function.</td><td>Expression</td></tr> -<tr><td>xbInt16 DTOC( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOC function.</td><td>Expression</td></tr> -<tr><td>xbInt16 DTOS( xbDate &dInDate, xbString &sOutFmtDate )</td><td>Dbase DTOS function.</td><td>Expression</td></tr> -<tr><td>xbInt16 EXP( xbDouble dIn, xbDouble &dOut )</td><td>Dbase EXP function.</td><td>Expression</td></tr> -<tr><td>xbInt16 IIF( xbBool bResult, const xbString &sTrueResult, const xbString &sFalseResult, xbString &sResult )</td><td>Dbase IIF function.</td><td>Expression</td></tr> -<tr><td>xbInt16 INT( xbDouble dIn, xbDouble &dOut )</td><td>Dbase INT function.</td><td>Expression</td></tr> -<tr><td>xbInt16 ISALPHA( const xbString &s, xbBool &bResult )</td><td>Dbase ISALPHA function.</td><td>Expression</td></tr> -<tr><td>xbInt16 ISLOWER( const xbString &s, xbBool &bResult )</td><td>Dbase ISLOWER function.</td><td>Expression</td></tr> -<tr><td>xbInt16 ISUPPER( const xbString &s, xbBool &bResult )</td><td>Dbase ISUPPER function.</td><td>Expression</td></tr> -<tr><td>xbInt16 LEFT( const xbString &sIn, xbUInt32 lCharCnt, xbString &sOut )</td><td>Dbase LEF function.</td><td>Expression</td></tr> -<tr><td>xbInt16 LEN( const xbString &sIn, xbDouble &dLen )</td><td>Dbase LEN function.</td><td>Expression</td></tr> -<tr><td>xbInt16 LOG( xbDouble dIn, xbDouble &dOut )</td><td>Dbase LOG function.</td><td>Expression</td></tr> -<tr><td>xbInt16 LOWER( const xbString &sIn, xbString &sOut )</td><td>Dbase LOWER function.</td><td>Expression</td></tr> -<tr><td>xbInt16 LTRIM( const xbString &sIn, xbString & sOut )</td><td>Dbase LTRIM function.</td><td>Expression</td></tr> -<tr><td>xbInt16 MAX( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MAX function.</td><td>Expression</td></tr> -<tr><td>xbInt16 MIN( xbDouble dIn1, xbDouble dIn2, xbDouble &dOut )</td><td>Dbase MIN function.</td><td>Expression</td></tr> -<tr><td>xbInt16 MONTH( xbDate &dInDate, xbDouble &dMonthOut )</td><td>Dbase MONTH function.</td><td>Expression</td></tr> -<tr><td>xbInt16 RECCOUNT( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECCOUNT function.</td><td>Expression</td></tr> -<tr><td>xbInt16 RECNO( xbDbf * d, xbDouble &dRecOut )</td><td>Dbase RECNO function.</td><td>Expression</td></tr> -<tr><td>xbInt16 REPLICATE( const xbString &sIn, xbUInt32 ulRepCnt, xbString &sOut )</td><td>Dbase REPLICATE function.</td><td>Expression</td></tr> -<tr><td>xbInt16 RIGHT( const xbString &sIn, xbUInt32 iCharCnt, xbString &sOut )</td><td>Dbase RIGHT function.</td><td>Expression</td></tr> -<tr><td>xbInt16 RTRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase RTRIM function.</td><td>Expression</td></tr> -<tr><td>xbInt16 SPACE( xbInt32 lCnt, xbString &sOut )</td><td>Dbase SPACE function.</td><td>Expression</td></tr> -<tr><td>xbInt16 SQRT( xbDouble dBase, xbDouble &dSqrRt )</td><td>Dbase SQRT function.</td><td>Expression</td></tr> -<tr><td>xbInt16 STOD( const xbString &sIn, xbDate &sDateOut )</td><td>Dbase STOD function.</td><td>Expression</td></tr> -<tr><td>xbInt16 STR( xbDouble dIn, xbString &sOut )</td><td>Dbase function.</td><td>Expression</td></tr> -<tr><td>xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbString &sOut )<br> - xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )<br> - xbInt16 STR( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sPadChar, xbString &sOut )</td><td>Dbase STR function.</td><td>Expression</td></tr> -<tr><td>xbInt16 STRZERO( xbDouble dIn, xbUInt32 ulLen, xbUInt32 ulDec, xbString &sOut )</td><td>Dbase STRZERO function.</td><td>Expression</td></tr> -<tr><td>xbInt16 SUBSTR( const xbString &sIn, xbUInt32 ulStartPos, xbUInt32 ulLen, xbString &sOut )</td><td>Dbase SUBSTR function.</td><td>Expression</td></tr> -<tr><td>xbInt16 TRIM( const xbString &sIn, xbString &sOut )</td><td>Dbase TRIM function.</td><td>Expression</td></tr> -<tr><td>xbInt16 UPPER( const xbString &sIn, xbString &sOut )</td><td>Dbase UPPER function.</td><td>Expression</td></tr> -<tr><td>xbInt16 VAL( const xbString &sIn, xbDouble &dOut )</td><td>Dbase VAL function.</td><td>Expression</td></tr> -<tr><td>xbInt16 YEAR( xbDate &dInDate, xbDouble &dOutYear )</td><td>Dbase YEAR function.</td><td>Expression</td></tr> -</table> - -<br><br> -<hr> - -<h3>Example program using xbXbase methods</h3> -</center> -<xmp> -/* xb_ex_ssv.cpp -XBase64 Software Library - -Copyright (c) 1997,2003,2014,2021,2022,2023 Gary A Kunkel - -The xb64 software library is covered under the terms of the GPL Version 3, 2007 license. - -Email Contact: - - XDB-devel@lists.sourceforge.net - XDB-users@lists.sourceforge.net - -This program demonstrates using functionality of the xbSsv class (Shared system values) - -*/ - -#include "xbase.h" - -using namespace xb; - -int main( int ac, char ** av ){ - - xbXBase x; // set up xbase for business - xbString sMsg; // a message string - - sMsg.Sprintf( "Program [%s] initializing...", av[0] ); - std::cout << sMsg.Str() << std::endl; - - // example code to set up log file usage - #ifdef XB_LOGGING_SUPPORT - char cSeperator; // is this a unix (/) or windows (\) file system - xbString sLog; // general string for log file activities - sLog = x.GetLogFqFileName().Str(); // get the system default log file name - std::cout << "System default logfile is [" << sLog.Str() << "]" << std::endl; - - cSeperator = sLog.GetPathSeparator(); // get the seperator from - std::cout << "Path seperator = [" << cSeperator << "]" << std::endl; - - sLog.Sprintf( "..%c", cSeperator ); - x.SetLogDirectory( sLog ); - std::cout << "sLog = [" << sLog.Str() << "]\n"; - - sLog = x.GetLogFqFileName().Str(); // get the system default log file name - std::cout << "New logfile is [" << sLog.Str() << "]" << std::endl; - - // turn on logging after file name set - x.EnableMsgLogging(); - #endif // XB_LOGGING_SUPPORT - - // const char *GetErrorMessage( xbInt16 ErrorCode ) const; - // void DisplayError( xbInt16 ErrorCode ) const; - std::cout << "DisplayError( -100 ) - "; - x.DisplayError( -100 ); - // << "]" << std::endl; - - - // void SetDefaultDateFormat( const xbString &sDefaultDateFormat ); - // xbString& GetDefaultDateFormat() const; - std::cout << "GetDefaultDateFormat() - " << x.GetDefaultDateFormat() << std::endl; - - // void SetDataDirectory ( const xbString &sDataDirectory ); - // xbString& GetDataDirectory() const; - std::cout << "GetDataDirectory() - " << x.GetDataDirectory() << std::endl; - - // xbInt16 GetEndianType() const; - if( x.GetEndianType() == 'L' ) - std::cout << "Little Endian Architecture." << std::endl; - else - std::cout << "Bid Endian Architecture." << std::endl; - - //xbBool GetDefaultAutoCommit() const; - //void SetDefaultAutoCommit( xbBool bDefaultAutoCommit ); - if( x.GetDefaultAutoCommit()) - std::cout << "AutoCommit is on." << std::endl; - else - std::cout << "AutoCommit is off." << std::endl; - - //xbBool GetMultiUser () const; - //void SetMultiUser ( xbBool bMultiUser ); - if( x.GetMultiUser()) - std::cout << "Multi user (locking) is enabled." << std::endl; - else - std::cout << "Multi user (locking) not enabled." << std::endl; - - #if defined (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT) - // xbInt16 GetUniqueKeyOpt () const; - // xbInt16 SetUniqueKeyOpt ( xbInt16 iUniqueKeyOpt ); - // XB_HALT_ON_DUPKEY - // XB_EMULATE_DBASE - if( x.GetUniqueKeyOpt() == XB_HALT_ON_DUPKEY ) - std::cout << "UniqueKey option - XB_HALT_ON_DUPKEY" << std::endl; - else if( x.GetUniqueKeyOpt() == XB_EMULATE_DBASE ) - std::cout << "UniqueKey option - XB_EMULATE_DBASE" << std::endl; - #endif // (XB_NDX_SUPPORT) || defined (XB_MDX_SUPPORT) - - #ifdef XB_LOCKING_SUPPORT - //xbInt16 GetDefaultLockRetries () const; - //void SetDefaultLockRetries ( xbInt16 iRetryCount ); - //xbInt32 GetDefaultLockWait () const; - //void SetDefaultLockWait ( xbInt32 lRetryWait ); - //xbInt16 GetDefaultLockFlavor () const; - //void SetDefaultLockFlavor ( xbInt16 iLockFlavor ); - //xbBool GetDefaultAutoLock () const; - //void SetDefaultAutoLock ( xbBool bAutoLock ); - //void EnableDefaultAutoLock (); - //void DisableDefaultAutoLock (); - - std::cout << "GetDefaultLockRetries() - " << x.GetDefaultLockRetries() << std::endl; - std::cout << "GetDefaultLockWait() - " << x.GetDefaultLockWait() << std::endl; - std::cout << "GetDefaultAutoLock() - " << x.GetDefaultAutoLock() << std::endl; - #endif // XB_LOCKING_SUPPORT - - #ifdef XB_MDX_SUPPORT - // xbInt16 GetCreateMdxBlockSize() const; - // xbInt16 SetCreateMdxBlockSize( xbInt16 ulBlockSize ); - std::cout << "GetCreateMdxBlockSize() - " << x.GetCreateMdxBlockSize() << std::endl; - #endif // XB_MDX_SUPPORT - - #ifdef XB_BLOCKREAD_SUPPORT - // xbUInt32 GetDefaultBlockReadSize() const; - // void SetDefaultBlockReadSize( xbUInt32 ulDfltBlockReadSize ); - std::cout << "GetDefaultBlockReadSize() - " << x.GetDefaultBlockReadSize() << std::endl; - #endif // XB_BLOCKREAD_SUPPORT - - //xbBool BitSet ( unsigned char c, xbInt16 iBitNo ) const; - //void BitDump ( unsigned char c ) const; - //void BitDump ( char c ) const; - std::cout << "BitDump( 'A' ) - "; - x.BitDump( 'A' ); - - return 0; -} - - -</xmp> - -<br><br> -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc2.html b/docs/html/xbc2.html deleted file mode 100755 index 72a6009..0000000 --- a/docs/html/xbc2.html +++ /dev/null @@ -1,267 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 2</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">Database Overview</p></H2> -<p align="center">Chapter Updated 11/21/22</p><hr> - -The objective of this chapter is to provide information regarding how -the database files are utilized and document the various record structures. -With the exception of the brief section on the record buffer, the -information presented in this chapter is not required to use the -Xbase library. It is mainly information describing internal file -structures utilized by the Xbase routines.<br><br> - -Xbase DBF files are comprised of a variable length header record which stores -information about the file and describes -the fixed length record format, followed by a series of fixed length -data records. -<br><br> - -Each fixed length data record is preceded by a one byte indicator -which identifiies if the record has been deleted. If the record is -not deleted, the indicator is a space (0x20). If deleted, the -indicator contains an asterisk (0x2A). Data fields are stored in records -without field separators or record terminators.<br><br> - -In earlier releases of dBASE, there is an ASCII NULL character -between the $0D end of header indicator and the start of the data. -This NULL was removed starting with dBASE III Plus, making a Plus -header one byte shorter than an identically structured III file. -The methods documented in the Xbase software and documentation follow -the more recent version where the NULL character is not included. -<br><br> - -Each database file is comprised of zero, one or many records. A record is -comprised of fields. Only one record is accessed at a time.<br><br> - -Zero, one or many database files can be open simultaneously.<br><br> - -<hr> - -<h3>The Record Buffer</h3> - -When using the Xbase routines, each open data file has a record buffer -which is manipulated by calling the database, index and field routines. -<br><br> - -If <i>AutoCommit</i> is turned on (Default), updates are committed from -the record buffer to the database when a write, or append is performed. -The library automatically writes updates to the database if the buffer has -been updated and the record is repositioned or the database is closed. -<br><br> - -If <i>AutoCommit</i> is turned off, updates will need to be explicity -committed to the database file with one of <i>dbf->Put(), dbf->Append() -or dbf->Commit()</i> command depending on context.. -Updates can be cancelled with the <i>Abort()</i> command. -<br><br> -The record buffer is not used for handling the actual data portion of -memo fields. When working with memo fields, the application program must -allocate enough buffer space for reading and writing memo fields or use -the xbString class for handling memo data.<br><br> - -Internal to the library, there is an additional record buffer which -stores the original value of the data record before any changes are made. -This is used by the index routines for finding and deleting original key -values from any open indices before adding the new keys. If the key values -are not changed, no index updates occur. Additionally, calling the Abort() -method will back out any updates to the record buffer. - - -<br><br> - -<hr> -<br> -<h3>Xbase Database File Header - DBF Version III and Version IV</h3> - -The Xbase file header, located at the beginning of the database, describes -the .DBF database. Knowledge of this structure is not necessary to -effectively utilize the Xbase64 libraries.<br><br><br> - -<TABLE BORDER> -<TR valign="BASELINE"> -<TR><TH ALIGN="LEFT">Position<TD>Length<TD>Description -<TR><TH ALIGN="LEFT">0<TD>1 byte<TD>file version number<br> - (03H without a .DBT file)<br> - (83H with a .DBT file) -<TR><TH ALIGN="LEFT">1-3<TD>3 bytes<TD>date of last update<br> - (YY MM DD) in binary format -<TR><TH ALIGN="LEFT">4-7<TD>32 bit number<TD>number of records in data file -<TR><TH ALIGN="LEFT">8-9<TD>16 bit number<TD>length of header structure -<TR><TH ALIGN="LEFT">10-11<TD>16 bit number<TD>length of the record -<TR><TH ALIGN="LEFT">12-31<TD>20 bytes<TD>reserved -<TR><TH ALIGN="LEFT">32-n<TD>32 bytes each<TD>field descriptor record (see below) -<TR><TH ALIGN="LEFT">n+1<TD>1 byte<TD>0DH as the field terminator -</TABLE> -<BR><BR> - -<hr> -<br> -<h3>Xbase Field Descriptor Record</h3> -The Xbase field descriptor record stores information about each field in the -database. Each database has from 1 to 1024 fields. -Knowledge of this structure is not necessary to -effectively utilize the Xbase libraries.<br><br><br> - -<TABLE BORDER> -<TR VALIGN="BASELIGN"> -<TR><TH ALIGN="LEFT">Position<TD>Length<TD>Description -<TR><TH ALIGN="LEFT">0-10<TD>11 bytes<TD>field name in ASCII zero-filled -<TR><TH ALIGN="LEFT">11<TD>1 byte<TD>field type in ASCII (C N L D or M) -<TR><TH ALIGN="LEFT">12-15<TD>32 bit number<TD>field data address -<TR><TH ALIGN="LEFT">16<TD>1 byte<TD>field length in binary -<TR><TH ALIGN="LEFT">17<TD>1 byte<TD>field decimal count in binary -<TR><TH ALIGN="LEFT">18-31<TD>14 bytes<TD>reserved bytes (version 1.00) -</TABLE> -<BR><BR> -<hr> -<br> -<h3>Field Data Format</h3> -Data are stored in ASCII format in the database as follows:<br><br> -<TABLE BORDER> -<TR VALIGN="BASELIGN"> -<TR><TH ALIGN="LEFT">DATA TYPE<TD>DATA RECORD STORAGE -<TR><TH ALIGN="LEFT">Character<TD>ASCII characters, left justified, right blank filled -<TR><TH ALIGN="LEFT">Date<TD>(8 digits in YYYYMMDD format, such as<BR> - 19601007 for October 7, 1960) -<TR><TH ALIGN="LEFT">Logical<TD>? Y y N n T t F f (? when not initialized) -<TR><TH ALIGN="LEFT">Memo<TD>10 digits representing a .DBT block number -<TR><TH ALIGN="LEFT">Numeric<TD>. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled -<TR><TH ALIGN="LEFT">Float (Version IV only)<TD>. 0 1 2 3 4 5 6 7 8 9 + -, right justified, left blank filled -</TABLE> -<BR><BR> - -<hr> -<h3>Memo Fields</h3> - -Memo fields store variable length data elements in a seperate .DBT file. -The main .DBF file maintains a ten byte field which is used by the Xbase -routines for determining the location of the data in the .DBT file. -<br><br> - -Xbase DBMS supports both dBASE III+ and dBASE IV version memo files. -The version IV files are somewhat more efficient in that they reuse -unused memo space when data are deleted or freed from use. With version -III files, all new updates are appended to the end of the file and the -unused space is not reclaimed until the datafiles are packed. -<br><br> - -Memo fields can be used for storing a variety of date type. However, -type 3 files are limited to storing textual data because most internal -memo field processing in a type 3 file relies on two contiguous 0x1a -charaters. <br><br> - -Type 4 memo fields can be used for storing BLOB (binary large object) -data reliably, as the internal file structure does not rely on any -special characters embedded in the data.<br><br> - -A special note on storing string data in a memo field. For those users -that are new to C/C++ programming, string fields typically end with -a null (0x00) terminator character. As a general rule of thumb when using -the library, add one to the length of any string when -specifying the length of the data. This stores the null terminating byte -with the data. For example, when storing string "This is a string" -specified size should be 17, not 16. - - -<h4>Technical memo file information</h4> - -The following info on memo fields is for the curious. -It is not required -reading if you don't need to know the internals.<br><br> - -<li>Memo files are made up of one or more blocks -<li>For version III files, the block size is 512 -<li>For version IV files, the block size is a multiple of 512 -<li>The minimum amout of space necessary to store one memo field is -one block or 512 bytes. -<li>The default block size can be adjusted by manipulating the -XB_DBT_BLOCK_SIZE macro in the options.h file. - - -<li>The main .DBF file maintains a ten byte numeric field which is blank if -no memo data exists for a given field. Otherwise it contains a number, which -when multiplied by the block size, points to the offset in the file of the head -block in the file/ -<br><br> - -For version 3 memo field files, there are two fields in the head block of -the file, <em>NextBlockNo</em> and <em>Version</em>. Depending on the -Xbase software, some vendors products update these two fields, some do not. -The Xbase library keeps the fields updated, but does not rely on them to -be valued with correct data. This helps to support maximum compatibility -amoungst all Xbase tools available.<br><br> - -For version 4 memo field files, -the first block in the .DBT file is a header block which is comprised of -8 bytes of data which maintain the file's block size and the next free -block available in the file. Blocks two through n contain the actual -memo data. A chain of empty blocks is maintained within the file for -potential future use. When an add or update routine executes, it first -attempts to find a spot in a set of blocks which were earlier allocated, -but not currently in use for the data. If no free spot is found, data are -appended to the end of the file. - -The free block chain is sorted in block number order. When blocks of -data are freed and added to the free block chain, the routines will attempt -to concatonate free block chains togethor where possible. When a delete -occurs, or an update which requires less space occurs, the new free space -is added to the free block chain. - -<br><br> - -<h3>Various Memo File Block Types</h3> - -<TABLE BORDER> -<TR VALIGN="BASELIGN"> -<TR><TH ALIGN="LEFT">Valid Block Types -<TR><TH ALIGN="LEFT">Head Block -<TR><TH ALIGN="LEFT">Only data block for memo field -<TR><TH ALIGN="LEFT">First of several contiguous data block set -<TR><TH ALIGN="LEFT">2-n of contiguous data block set -<TR><TH ALIGN="LEFT">Only data block in free chain (version IV only) -<TR><TH ALIGN="LEFT">First of several contiguous free block set (version IV only) -<TR><TH ALIGN="LEFT">2-n of contiguous free block set (type 4 only) -</TABLE> -<BR><BR> - -<h3>Head Block Structure</h3> -<TABLE BORDER> -<TR VALIGN="BASELIGN"> -<TR><TH ALIGN="LEFT">1-4<TD>LONG<TD>Next Block ID -<TR><TH ALIGN="LEFT">5-8<TD>LONG<TD>Not used all 0x00's -<TR><TH ALIGN="LEFT">9-16<TD>CHAR(8)<TD>Filename (Version IV Only) -<TR><TH ALIGN="LEFT">17<TD>CHAR<TD>Version (0x03 = Version III, 0x00 = Version IV) -<TR><TH ALIGN="LEFT">18-20<TD>CHAR(3)<TD>Not used all 0x00's -<TR><TH ALIGN="LEFT">21-22<TD>SHORT<TD>Block Size (Version IV only ) -<TR><TH ALIGN="LEFT">23-Remainder of block<TD>CHAR<TD>Not used -</TABLE> -<BR><BR> - - -<h3>Version IV Head Data Block Structure</h3> -<TABLE BORDER> -<TR VALIGN="BASELIGN"> -<TR><TH ALIGN="LEFT">xbShort<TD>0-1<TD>-1 -<TR><TH ALIGN="LEFT">xbShort<TD>2-3<TD>Starting position of data (always 8 ?) -<TR><TH ALIGN="LEFT">xbLong<TD>4-7<TD>Length of data includes first 8 bytes -<TR><TH ALIGN="LEFT">char (9) - Blocksize<TD>8-15<TD>Data -</TABLE> -<BR><BR> - -<h3>Version IV Head Free Block Structure</h3> -<TABLE BORDER> -<TR VALIGN="BASELIGN"> -<TR><TH ALIGN="LEFT">xbLong<TD>0-3<TD>Next free block in the free block chain -<TR><TH ALIGN="LEFT">xbLong<TD>4-7<TD>Number of free blocks in this contiguous free - block set -</table> -<br><br> -Version 3 and 4 memo fields are terminated with two contiguous 0x1A bytes of data. -<br><br> -<hr> -<p><img src="xbase.jpg"><hr> -</BODY> -</HTML> - diff --git a/docs/html/xbc3.html b/docs/html/xbc3.html deleted file mode 100755 index f2f4a1d..0000000 --- a/docs/html/xbc3.html +++ /dev/null @@ -1,73 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 3</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H1><p align="center">Fields and Strings</p></H1> -<p align="center">Chapter Updated 11/21/22</p><hr> - -<br><br> -The main objective of this chapter is to provide basic information regarding -various field types supported by the library.<br><br> - -Field names can be up to ten bytes in length and can contain characters, numbers -or special characters in the name. The field methods are used to manipulate -the data in a record of a data file. There are several types of fields.<br><br> - - -<TABLE BORDER> -<CAPTION ALIGN="TOP"><h3>Field Types</H3></CAPTION> -<TR VALIGN="BASELINE"> -<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Allowable Values<TD>Schema Value -<TR><TH ALIGN="LEFT">Numeric<TD>0 - 17(include sign and decimal point<TD>+ - . 0 through 9<TD>XB_NUMERIC_FLD -<TR><TH ALIGN="LEFT">Character<TD>0 - 254<TD>Anything<TD>XB_CHAR_FLD -<TR><TH ALIGN="LEFT">Date<TD>8<TD>CCYYMMDD<TD>XB_DATE_FLD -<TR><TH ALIGN="LEFT">Floating Point<TD>0 - 17 (includes sign and decimal point<TD>+ - . 0 through 9<TD>XB_FLOAT_FLD -<TR><TH ALIGN="LEFT">Logical<TD>1<TD>? Y y N n T t F f (? - uninitialized)<TD>XB_LOGICAL_FLD -<TR><TH ALIGN="LEFT">Memo<TD>Fixed length portion - 10<br>Variable length 0 - 32760 -<TD>Type III - Text<br>Type IV - Anything<TD>XB_MEMO_FLD -</TABLE> - -<br><br> -Field names, types and lengths are defined when a data file is created. -After the file is created, the field characteristics can not be changed. To -change field characteristics, a new database table must be defined with the new -field requirements.<br><br> - -<h2>Memo Fields</h2> - -Memo fields are variable length data fields which are stored in two parts. -This first part is a ten byte field which is stored -in the fixed length record of the .DBF file. The variable data is stored in -a seperate .DBT file in 512 byte blocks. The ten byte field in the fixed -length portion of the record points to a .DBT block number.<br><br> - -There are two versions of memo data files type III and type IV. Type IV -is more advanced in that released space can be reused and it also -supports BLOB data. The type III file is older technology, does not -support dynamic space reclamation and only supports string data. -See method xbDbf::SetVersion for controlling which version type you are -using. - -<br><br> -To utilize memo fields, the application program must allocate a buffer -which is large enough to handle the memo data.<br><br> - -<h2>Fields and Field Numbers</h2> - -The Xbase routines can access field data via using field names or field -numbers. Field numbers are numbered 0-n where the first field in a datafile -is field 0 going through the last field n. Accessing fields by number is -slightly more efficient than accessing by name.<br><br> - -<h2>Strings</h2> - -Xbase64 includes support for a string class <em>xbString</em>. -The xbString class interface was originally derived from the -<em>Draft Standard C++ Library by P.J. Plauger</em> and modified. -If you are familiar with other string classes, this one should be similar. -Strings can be used to manage strings of character data. -<br><br> -<hr> -<p><img src="xbase.jpg"><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc4.html b/docs/html/xbc4.html deleted file mode 100755 index a0275ed..0000000 --- a/docs/html/xbc4.html +++ /dev/null @@ -1,81 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 4</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H1><p align="center">Date Processing</p></H1> -<p align="center">Chapter Updated 12/09/22</p><hr> - -The objective of this chapter is to provide information regarding -the basic concepts of date arithmetic and supply generic -C/C++ date methods.<br><br> - -<h2>Leap Years</h2> - -Due to the fact that it actually takes about 365 1/4 days for -the earth to circle the sun, every fourth year and every fourth -century have an extra day added to the end of February and the year -is called a leap year. Leap years have 366 days, non leap years -have 365 days. The following code segment describes how to -determine if a given year is a leap year. - -A leap year is a year having 366 days, which can be evenly -divisible by 4 and not by 100 or divisible by 400. - -There are also leap centuries. Leap centuries are years which -are evenly divisible by 400. - -To calculate a leap year, the following code segment can be used - -<xmp> - int year; - - if(( year % 4 == 0 && year % 100 != 0 ) || year % 400 = 0 ) - LEAP_YEAR = TRUE; - else - LEAP_YEAR = FALSE -</xmp> - - -<h2>Julian Dates</h2> - -Around the time of Jesus Christ, a fellow with the name of Julias Ceasar -established the Julian calendar. The Julian calendar established every -fourth year as a leap year with 366 days and all other years having 365 days. -The months were set up the same as they are with a Gregorian calendar, which -is what we use today. A Julian date is defined as as the number of days from the -first day of the year; February 1 would have a Julian day of 32.<br><br> - -From a programmer's perspective, Julian dates are useful for doing date -arithmetic, determining the difference between two dates or calculating -a future or past date.<br><br> - -To determine the difference between two dates, convert both dates to a -Julian date and subtract one from the other.<br><br> - -To calculate a future or past date, convert the base date to a Julian date, -add (or subtract) the number of days necessary to (from) it and convert the -julian date back to a Gregorian date.<br><br> - -The Julian date routines use a base date of 01/01/0001. DBase julian Dates have an offset of 1721425L, reason unknown. -<br><br> - -<h2>Gregorian Dates</h2> - -In 1582, Pope Gregor XIII introduced a corrected form of the Julian calendar. -Every 4th year still has 366 days except for century years. Century years -were added as leap years if evenly divisible by 400. The year 2000 is a leap century. -<br><br> - -The methods supplied with this software are based on gregorian dates with -the format of CCYYMMDD for century, year, month and day.<br><br> - - -<h2>Date Formats</h2> - -All dates are stored in the .DBF files with format CCYYMMDD.<br><br> -All date routines work with dates formated with the same CCYYMMDD format.<br><br> - -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc5.html b/docs/html/xbc5.html deleted file mode 100755 index 9708b17..0000000 --- a/docs/html/xbc5.html +++ /dev/null @@ -1,208 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<html> -<title>Xbase DBMS Chapter 5</title> -<body bgcolor=#FFFFFF> -<h1><p align="center">Expression Handling<br></h1> -<p align="center">Chapter Updated 12/26/22</p><hr> - -<h3>Overview</h3> - -The main objective of this chapter is to provide information regarding the -basic concepts of using the Xbase64 Expression module.<br><br> - -The Xbase64 library includes an expression parsing routine which assists -application programmers by providing a high level data manipulation tool and -also allows for building complex index keys. - -The functions included were derived from dBASE III Plus, dBASE IV and Clipper. -<br><br> -Expressions are primarily used for index key definitions and filter criteria, but -can also be used for other tasks as well. -<br><br> - -<h3>Internal fuctioning</h3> -The expression module works in two phases. Firstly, method -<em>ParseExpression</em> is called and builds an expression tree from -all the components of the expression. The tree is made up of individual -nodes. The expression is checked for valid field names, literals, -operands and functions. Any field references are resolved. If fields -are used in an expression and the database name for the field is not -included in the name with the -> operand, the routines assume the -associated database has been successfully opened. -<br><br> -Secondly, method <em>ProcessExpression</em> is called to process the -expression tree created by ParseExpression(). The routine parses each -node in the expression tree, executing functions, processing operands -and manipulating data to produce the desired result.<br><br> - -If an expression will be processed repeatedly, it is best to pre-parse the -tree using <em>ParseExpression</em>, then for each new call to the expression, -execute method <em>ProcessExpression</em> which processes the tree. - -<h3>Expression Return Types</h3> -Expressions will return a type of CHAR, NUMERIC, DATE or LOGICAL.<br><br> - -An expression return type can be determined with method <em> -GetExpressionResultType</em> after parsing it.<br><br> - -Expressions returning a return type of CHAR are limited to a 200 byte internal -buffer. There is also a 100 byte limit for NDX and MDX index key support. If -the 200 byte limit is not large enough for your application, adjust field -<em>enum { WorkBufMaxLen = 200 };</em> in file <em>exp.h</em>. - -<br><br> -<table border=1> -<tr><th>Return Type</th><th>XBase Type</th></tr> -<tr><td>CHAR</td><td>xbString</td></tr> -<tr><td>NUMERIC</td><td>xbDouble</td></tr> -<tr><td>DATE</td><td>xbDate</td></tr> -<tr><td>LOGICAL</td><td>xbBool</td></tr> -</table> - -<br><br> -Date routines return an xbDate result. In addition, the date value can be -extracted using GetStringResult() which returns YYYYMMDD or GetDoubleResult() -which returns a julian value. - -<br><br> -<h3>Expression Functions</h3> -Each expression function also has a corresponding C++ function. It is -slightly more efficient to call the C++ functions directly, rather than -execute the expression parsing routines.<br><br> - -To add a new function, find a function that is similar to what you need, copy -the code and modify xbxbase.h, xbfuncs.cpp, xbexp.cpp and xb_test_expression.cpp.<br><br> - - -<table border=1> -<tr><th>Function Name</th><th>Return Type</th><th>Description</th></tr> -<tr><td>ABS</td><td>N</td><td>Calculate absolute value of numeric expression</td></tr> -<tr><td>ALLTRIM</td><td>C</td><td>Trim leading andtrailing whitespace from a string</td></tr> -<tr><td>ASC</td><td>N</td><td>Return ASCII code for first character in a string</td></tr> -<tr><td>AT</td><td>N</td><td>Return starting position of a string within a string</td></tr> -<tr><td>CDOW</td><td>C</td><td>Retun character weekday name for a date</td></tr> -<tr><td>CHR</td><td>C</td><td>Convert numeric expression to a character</td></tr> -<tr><td>CMONTH</td><td>C</td><td>Return month name for a date</td></tr> -<tr><td>CTOD</td><td>D</td><td>Return date from a character date input</td></tr> -<tr><td>DATE</td><td>D</td><td>Return system date</td></tr> -<tr><td>DAY</td><td>N</td><td>Return the day of the month from a date</td></tr> -<tr><td>DEL</td><td>C</td><td>Return record deletion status for a record</td></tr> -<tr><td>DELETED</td><td>L</td><td>Return record deletion status for a record<</td></tr> -<tr><td>DESCEND</td><td>1</td><td>Clipper DESCEND function</td></tr> -<tr><td>DOW</td><td>N</td><td>Return number of day of week</td></tr> -<tr><td>DTOC</td><td>C</td><td>Return character date from input date</td></tr> -<tr><td>DTOS</td><td>C</td><td>Return character CCYYMMDD date from input date</td></tr> -<tr><td>EXP</td><td>N</td><td>Return exponent value</td></tr> -<tr><td>IIF</td><td>C</td><td>Immediate If</td></tr> -<tr><td>INT</td><td>N</td><td>Convert number to integer, truncate any decimals</td></tr> -<tr><td>ISALPHA</td><td>L</td><td>Check if string begins with alpha character</td></tr> -<tr><td>ISLOWER</td><td>L</td><td>Check if string begins with lower case alpha character</td></tr> -<tr><td>ISUPPER</td><td>L</td><td>Check if string begins with upper case character</td></tr> -<tr><td>LEFT</td><td>C</td><td>Return left characters from a string</td></tr> -<tr><td>LEN</td><td>N</td><td>Return lenght of string</td></tr> -<tr><td>LOG</td><td>N</td><td>Calculate logarithm</td></tr> -<tr><td>LOWER</td><td>C</td><td>Convert upper case to lower case</td></tr> -<tr><td>LTRIM</td><td>C</td><td>Trim left side of a string</td></tr> -<tr><td>MAX</td><td>N</td><td>Return higher of two values</td></tr> -<tr><td>MIN</td><td>N</td><td>Return lesser of two values</td></tr> -<tr><td>MONTH</td><td>N</td><td>Return number of month for a given date</td></tr> -<tr><td>RECNO</td><td>N</td><td>Return current rec number for a given table</td></tr> -<tr><td>RECCOUNT</td><td>N</td><td>Return number of records in a given table</td></tr> -<tr><td>REPLICATE</td><td>C</td><td>Repeat character expression N times</td></tr> -<tr><td>RIGHT</td><td>C</td><td>Return right characters from as tring</td></tr> -<tr><td>RTRIM</td><td>C</td><td>Trim right side of string</td></tr> -<tr><td>SPACE</td><td>C</td><td>Generate a string of N spaces</td></tr> -<tr><td>SQRT</td><td>N</td><td>Calculate square root</td></tr> -<tr><td>STOD</td><td>D</td><td>Convert 8 byte CCYYMMDD date to date</td></tr> -<tr><td>STR</td><td>C</td><td>Convert number to character string</td></tr> -<tr><td>STRZERO</td><td>C</td><td>Convert number to character string with leading zeroes. Clipper Function.</td></tr> -<tr><td>SUBSTR</td><td>C</td><td>Extract portion oif one string from another string</td></tr> -<tr><td>TRIM</td><td>C</td><td>Trim left and right sides of a string</td></tr> -<tr><td>UPPER</td><td>C</td><td>Conver lower case to upper case</td></tr> -<tr><td>VAL</td><td>N</td><td>Convert numeric characters to number</td></tr> -<tr><td>YEAR</td><td>N</td><td>Return year for a given date</td></tr> -</table> - -<br><br> -<h3>Expression Components</h3> -Expressions are made up of one or more tokens. A token is one of literal, -database field, operand or function. Literals are either numeric or character. -Character literals are enclosed in 'single' or "double" quotes. numeric -literals are a series of one or more contiguous numerals, ".", "+" or "-'". -<br><br> -A field is simply a field name in the default database, or is in the form -of database->fieldname. - - -<br><br> -<h3>Expression Literals</h3> - -<table border=1> -<tr><th>Type</th><th>Example</th></tr> -<tr><td>CHAR</td><td>"literal" or 'literal'</td></tr> -<tr><td>NUMERIC</td><td>+99999.99</td></tr> -<tr><td>DATE</td><td>{10/07/60} or {02/09/1989}</td></tr> -</table> - -<br><br> -<h3>Expression Operators</h3> -<table border=1> -<tr><th>Type</th><th>Operator</th><th>Precedence</th><th>Result</th><th>Notes</th></tr> -<tr><td>Parens</td><td>()</td><td>12</td></tr> -<tr><td>Numeric Operator</td><td>+ (unary)</td><td>11</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>- (unary)</td><td>11</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>--X</td><td>10</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>++X</td><td>10</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>**</td><td>9</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>^</td><td>9</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>%</td><td>8</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>*</td><td>8</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>/</td><td>8</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>+ Addition</td><td>7</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>- Subtraction</td><td>7</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>X--</td><td>6</td><td>N</td></tr> -<tr><td>Numeric Operator</td><td>X++</td><td>6</td><td>N</td></tr> -<tr></tr> -<tr><td>String Operator</td><td>+</td><td>5</td><td>C</td><td>Concatonate 1</td></tr> -<tr><td>String Operator</td><td>-</td><td>5</td><td>C</td><td>Concatonate 2</td></tr> -<tr></tr> -<tr><td>Relational Operator</td><td>=</td><td>4</td><td>L</td><td>N,C,D</td></tr> -<tr><td>Relational Operator</td><td>#, <>, !=</td><td>4</td><td?L</td><td>N,C,D</td></tr> -<tr><td>Relational Operator</td><td><</td><td>4</td><td>L</td><td>N,C,D</td></tr> -<tr><td>Relational Operator</td><td>></td><td>4</td><td>L</td><td>N,C,D</td></tr> -<tr><td>Relational Operator</td><td><=</td><td>4</td><td>L</td><td>N,C,D</td></tr> -<tr><td>Relational Operator</td><td>>=</td><td>4</td><td>L</td><td>N,C,D</td></tr> -<tr><td>Relational Operator</td><td>$</td><td>4</td><td>L</td><td>N,C,D</td></tr> -<tr><td>Relational Operator</td><td>==</td><td></td><td></td><td>Clipper operator, not implemented yet</td></tr> -<tr></tr> -<tr><td>Logical Operator</td><td>NOT</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr> -<tr><td>Logical Operator</td><td>.NOT.</td><td>3</td><td>L</td><td>Evaluated after all math and relational operators</td></tr> -<tr><td>Logical Operator</td><td>AND</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr> -<tr><td>Logical Operator</td><td>.AND.</td><td>2</td><td>L</td><td>Evaluated after all math and relational operators</td></tr> -<tr><td>Logical Operator</td><td>OR</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr> -<tr><td>Logical Operator</td><td>.OR.</td><td>1</td><td>L</td><td>Evaluated after all math and relational operators</td></tr> -</table> - -<br><br> -<h3>Example Expressions</h3> -<li>CUSTOMERS->LNAME + ", " + CUSTOMERS->FNAME -<li>LNAME + ", " + FNAME -<li>STARTDT + 90 -<li>DATE() - 7 -<li>YEAR( TODAY() ) -<li>IIF( "A" = "N", "true result", "false result" ) -<li>IIF( "A" = "N" .OR. 2 > 1 , "true result", "false result" ) -<li>IIF( .NOT. "A" = "N", "true result", "false result" ) -<li>.NOT. DELETED() -<br><br> - - -<h3>Example program</h3> -For an example on how to use the expression logic, see program -<em>src/examples/xb_ex_expression.cpp</em>. -<br><br> - -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc6.html b/docs/html/xbc6.html deleted file mode 100755 index 094545f..0000000 --- a/docs/html/xbc6.html +++ /dev/null @@ -1,153 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 6</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H1><p align="center">Index Overview</p></H1> -<p align="center">Chapter Updated 12/09/22</p><hr> - -The objective of this chapter is to provide information regarding -the basic concepts of index processing for the Xbase library.<br><br> - - -<h2>Overview</h2> - -The Xbase library is designed to support multiple index types simultaneously. -Dbase, Clipper and Foxbase each had their own index formats and ultimately the -goal is to provide support for all the legacy index file formats. - -<br><br> -The 4.0.x rewrite includes the NDX and MDX formats. Earlier versions of the -library included NTX and CDX formats which will be brought forward into the -library rewrite at some point in the future. - - -<h2>Tags</h2> - -Each index file contains one or more tags depending on the file type. Each tag is a sort order -and has characteristics: Sort order (ASC or DESC), unique or not unique and some formats support filtering. -Each open table (dbf file) has an "active tag" for database operations. - -<h2>Index processing design</h2> - -The library is construcuted to handle index files with multiple tags per file. Single tag files like the NDX indices -are treated as a multi tag file, but there is only one tag. This allows for maximum flexibility for future -additional index types. - - - -<h2>Index updates</h2> - -The library automatically updates all tags in all open index files. - - -<br><br> -<h2>Index File Types</h2> - -<table border=1> -<tr><th>File<br>Type</th><th>Source</th><th>Max Tags<br>Per File</th><th>Auto Opened</th><th>Sort Order</th><th>Unique Keys</th> - <th>Reclaimed Nodes</th><th>Filter Support</th><th>Status</th></tr> -<tr> - <td>NDX</td><td>dBase</td> - <td><center>1</center></td> - <td><center>Optional</center></td> - <td>ASC only</td> - <td><center>Y</center></td> - <td><center>N</center></td> - <td><center>N</center></td> - <td><center>Available in 4.0.1</center></td> -</tr> -<tr> - <td>MDX</td><td>dBase</td> - <td><center>47</center></td> - <td><center>Yes</center></td> - <td><center>ASC or DESC</center></td> - <td><center>Y</center></td> - <td><center>Y</center></td> - <td><center>Y</center></td> - <td><center>Available in 4.0.1</center></td> -</tr> -<tr> - <td>NTX</td> - <td>Clipper</td> - <td><center>1</center></td> - <td><center>Optional</center></td> - <td><center>?</center></td> - <td><center>?</center></td> - <td><center>?</center></td> - <td><center>?</center></td> - <td><center>Pending upgrades</center></td> -</tr> -<tr> - <td>CDX</td> - <td>Fox Pro</td> - <td><center>?</center></td> - <td><center>?</center></td> - <td><center>?</center></td> - <td><center>?</center></td> - <td><center>?</center></td> - <td><center>?</center></td> - <td><center>Pending upgrades</center></td> -<tr> -<tr> - <td>IDX</td><td>Fox Pro</td><td></td><td></td><td></td><td></td><td></td><td></td><td>Undeveloped</td> -<tr> - -</table> - -<br><br> -<h2>Index/Tag Methods</h2> -<table border=1> -<tr><th>Method</th><th>Description</th></tr> - -<tr> - <td>xbDbf::CheckTagIntegrity</td><td>Checks a tag for missing or duplicate entries. Available if XB_DEBUG_SUPPORT is on.</td> -</tr> -<tr> - <td>xbDbf::CreateTag</td><td>Create a new tag.</td> -</tr> -<tr> - <td>xbDbf::DeleteTag</td><td>Delete existing tag.</td> -</tr> -<tr> - <td>xbDbf::Find</td><td>Find key value for the active tag.</td> -</tr> -<tr> - <td>xbDbf::GetFirsKey</td><td>Retrieve the first key for the active tag.</td> -</tr> -<tr> - <td>xbDbf::GetLastKey</td><td>Retrieve the last key for the active tag.</td> -</tr> -<tr> - <td>xbDbf::GetNextKey</td><td>Retrieve the next key for the active tag.</td> -</tr> -<tr> - <td>xbDbf::GetPrevKey</td><td>Retrieve the previous key for the active tag.</td> -</tr> -<tr> - <td>xbDbf::GetCurTag</td><td>Retrieve the tag name key for the active tag.</td> -</tr> -<tr> - <td>xbDbf::OpenIndex</td><td>Open an index file. Only used for index files that aren't automatically opened.</td> -</tr> -<tr> - <td>xbDbf::Reindex</td><td>Rebuild a tag. Available if XB_DEBUG_SUPPORT is on.</td> -</tr> -<tr> - <td>xbDbf::SetCurTag</td><td>Set current tag.</td> -</tr> -</table> -<br><br> -<h2>Internal Data Storage</h2> - -<table border=1> -<tr><th>Type<th>Stored in DBF as</th><th>Stored in NDX as</th><th>Stored in MDX as</th></tr> -<tr><td>C</td><td>Character data</td><td>Character data</td><td>Character data</td></tr> -<tr><td>F</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr> -<tr><td>N</td><td>Text numbers</td><td>xbDouble</td><td>xbBcd</td></tr> -<tr><td>D</td><td>Text YYYYMMDD</td><td>xbDouble Julian</td><td>xbDouble Julian</td></tr> -</table> -<br><br> -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc7.html b/docs/html/xbc7.html deleted file mode 100755 index 20a60de..0000000 --- a/docs/html/xbc7.html +++ /dev/null @@ -1,153 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 7</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">NDX Indices</p></H2> -<p align="center">Chapter Updated 11/27/22</p><hr> - -The objective of this chapter is to provide information regarding the -basic concepts of how .NDX index files work in the Xbase environment.<br><br> - -The information in this chapter has been gathered by searching the internet -and by examining the structure of known good NDX indexes.<br><br> - -<h4>NDX Index File Characteristics</h4> - -<li>NDX indices maintain keys in ascending sort order only.<br><br> -<li>NDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br> - -<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE. -If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will -add a record to the table, but not add a corresponding duplicate key to the index tag. -The UniqueKeyOption is off (don't allow duplicates) by default. -<br><br> - -<em>Non-unique</em> Keys are not required to be unique, duplicate -keys are allowed if the index is created with the XB_NOT_UNIQUE -setting. Duplicate keys are stored in record number order.<br><br> - -<li>NDX indexes are automatically updated by the Xbase library after the -indices are opened.<br><br> - -<li>Character keys are left justified and padded on the right with spaces.<br><br> - -<li>Numeric keys are stored as eight byte double values.<br><br> - -<h4>NDX File Internals</h4> - -NDX files are comprised of two or more 512 byte blocks or nodes of -information. There are three types of nodes: Head Nodes, Interior -Nodes and Leaf Nodes.<br><br> - -<li>The <em>Head Node</em> is the first node in the file starting at -position zero (0) and contains information about the NDX file. There -is only one Head Node in each index and it always starts at the -beginning of the file.<br><br> - - -<TABLE BORDER> -<CAPTION ALIGN="TOP"><h3>NDX Header Node</H3></CAPTION> -<TR VALIGN="BASELINE"> -<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>StartNode<TD>This identifies the root node of - the index. The Header node is node 0. -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Total Nodes<TD>This is the count of the total - nodes in the index. The count includes the header node. -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeys<TD>Total number of keys in the index +1 -<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyLen<TD>The index key length -<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeysPerNode<TD>The maximum number of keys per node -<TR><TH ALIGN="LEFT">xbUShort<TD>2<TD>KeyType<TD>Type of key<br> -00 - Character<br>01 - Numeric -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>Keysize<TD>Key record size + 8 -<TR><TH ALIGN="LEFT">char<TD>1<TD>Unknown<TD>Reserved -<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br> -00 - Not Unique - XB_NON_UNIQUE<br>01 - Unique - XB_UNIQUE -<TR><TH ALIGN="LEFT">char<TD>488<TD>KeyExpression<TD>Key expression string -<TR><TH ALIGN="LEFT"><TD>512<TD><TD>Total bytes in node -</TABLE> -<br><br> -The following structure is used by the Xbase NDX routines: -<xmp> - struct NdxHeadNode{ - xbLong StartNode; /* header node is node 0 */ - xbLong TotalNodes; /* includes header node */ - xbLong NoOfKeys; /* actual count + 1 */ - xbUShort KeyLen; /* length of key data */ - xbUShort KeysPerNode; /* max number of keys per node */ - xbUShort KeyType; /* 00 = Char, 01 = Numeric */ - xbLong KeySize; /* KeyLen + 8 */ - char Reserved1; /* Not sure about this one */ - char Unique; /* 00 = not unique, 01 = unique*/ - char KeyExpression[488]; /* key definition */ - } -</xmp> -<br><br> - -<h4>Interior and Leaf Nodes</h4> - -Interior Nodes and Leaf Nodes share the same structure in an NDX file. -The difference between the two types is that interior nodes point to -other interior nodes or leaf nodes and leaf nodes point to records in -a DBF file. Interior nodes are optional nodes in an NDX file, -however if there are more than a few keys in the index there will -certainly be one or more interior nodes in the file. There will -always be at least one leaf node in the file. Leaf nodes contain DBF -record numbers which point to the location of the record in the -DBF file.<br><br> - -Interior nodes have field LeftNodeNo valued which points to the node -which points to the keys which are less than the key value in the KeyVal -field. There is one more LeftNodeNo value in the node than there are keys. -The Last LeftNodeNo points to the node which is greater than the highest -key value in the node. Interior nodes have 0 in the value for the -DbfRecNo field.<br><br> - -Leaf nodes have 0 in the LeftNodeNo field but do have a value in the -DbfRecNo field which points to a DFB record.<br><br> - - -<TABLE BORDER> -<CAPTION ALIGN="TOP"><h3>NDX Interior Node and Leaf Node Structure</H3></CAPTION> -<TR VALIGN="BASELINE"> -<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>NoOfKeysThisNode<TD>The number of key values in this node. -<TR><TH ALIGN="LEFT">char<TD>508<TD>KeyRec<TD>A repeating structure of - pointers and keys. See the next table for the KeyRec structure. -</TABLE> -<br><br> -<TABLE BORDER> -<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION> -<TR VALIGN="BASELINE"> -<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number of the lower node - for this key. 0 in Leaf Nodes. -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key. - 0 in Interior Nodes. -<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value. -</TABLE> - -<br><br> -For those interested in knowing how the Xbase DBMS manipulates and -navigates index files, the following discussion may be helpfull.<br><br> - -Xbase DBMS navigates through NDX files by using an in-memory chain -of nodes of the current location / key in use. It starts by reading the -Head Node of the index, which points to the first node of the file. The -first node of the file will be a leaf node if the index is small or will -be an interior node if the index has more than one leaf node. The first -interior node is loaded into memory, added to the node chain and points -to the next node to read. The node is made up of one or more keys. If -it is a leaf node, the logic looks for a matching key on the node. -Otherwise, if it is an interior node, the logic looks at the keys until the -search key is greater than or equal to the key in the node and then -traverses down the tree to the next node. It continues down the tree, -adding the nodes to the in-memory node chain until it reaches the correct -leaf node. If it finds a matching key in the leaf node, it returns a -XB_FOUND condition. If it doesn't find an exact match in the leaf node, it -returns a XB_NOT_FOUND condition and stops on the key which is greater than -the search key given. - -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc8.html b/docs/html/xbc8.html deleted file mode 100755 index fcc461c..0000000 --- a/docs/html/xbc8.html +++ /dev/null @@ -1,79 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 8</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">MDX Indices</p></H2> -<p align="center">Chapter Updated 12/02/22</p><hr> - -The objective of this chapter is to provide information regarding the -basic concepts of how .MDX index files work in the Xbase environment.<br><br> - -The information in this chapter has been gathered by searching the internet -and by examining the structure of known good <DX indexes.<br><br> - -<h4>MDX Index File Characteristics</h4> - -<li>MDX files are the same name as the corresponding DBF file with an MDX extension. -<li>MDX files are automatically opened by the library when the DBF file is opened. -<li>MDX index files (aka prod indices) contain from one to 47 tags, where each tag has it's own key characteristics. -<li>MDX indices maintain keys in either ascending or descending sort order. -<li>MDX indices support filtered keys. For example, a filter of <b>.NOT. DELETED()</b> will keep deleted records out -of the index tag. -<li>MDX indices are automatically updated by the Xbase library after the -indices are opened. - -<li>MDX indices support <em>unique</em> or <em>non unique</em> keys.<br><br> - -<em>Unique</em> keys must be unique if the UniqueKeyOption is not set to XB_EMULATE_DBASE. -If the UniqueKeyOption is set to XB_EMULATE_DBASE, then the database update routines will -add a record to the table, but not add a corresponding duplicate key to the index tag. -The UniqueKeyOption is off (don't allow duplicates) by default. -<br><br> - -<em>Non-unique</em> Keys are not required to be unique, duplicate -keys are allowed if the index is created with the XB_NOT_UNIQUE -setting. Duplicate keys are stored in record number order.<br><br> - - -<li>Character keys are left justified and padded on the right with spaces. -<li>Numeric keys are stored as twelve byte BCD values. -<li>Date keys are stored as eight byte double julian values. - -<h4>MDX File Internals</h4> - -The following information is not needed to use the library, it is just included -for general information.<br><br> - -MDX files are comprised of 512 pages where multiple pages make a block. The default -setting is 1024 blocks, each block containing two pages.<br><br> - -The first four pages contain: -<li>Bytes 0 - 543 contain general file information. -<li>Bytes 544 - 2047 is a 47 item table containing specific tag information. -<br><br> - -Pages five and beyound: -<li>Bytes 2048 and beyond contain tag header blocks, interior nodes and leaf nodes. - -<br><br> - -<h4>Interior and Leaf Nodes</h4> - -Interior Nodes and Leaf Nodes share the same structure in an NDX file with -the exception that interior nodes have a non zero number immediately -after the rightmost key on the node. - -Interior nodes point to other interior nodes or leaf nodes and leaf nodes point -to records in a DBF file. Interior nodes are optional nodes in an MDX file, -however if there are more than a few keys in the index there will -certainly be one or more interior nodes in the file. There will -always be at least one leaf node per tag in the file. Leaf nodes -contain DBF record numbers which point to the location of the record -in the DBF file.<br><br> - -<br><br> - -<hr> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> diff --git a/docs/html/xbc9.html b/docs/html/xbc9.html deleted file mode 100755 index afcd2fa..0000000 --- a/docs/html/xbc9.html +++ /dev/null @@ -1,180 +0,0 @@ -<!DOCTYPE HTML PUBLIC> -<HTML> -<TITLE>Xbase DBMS Chapter 9</TITLE> -<BODY BGCOLOR=#FFFFFF> -<H2><p align="center">NTX Indices</p></H2> -<p align="center">Chapter Updated 11/28/22</p><hr> - - -<h3>This chapter might be out of date. The NTX module is pending review and updates for release 4.x.x</h3> - -The objective of this chapter is to provide information regarding the -basic concepts of how .NTX index files work in the Xbase environment.<br><br> - -The information in this chapter has been gathered by searching the internet -and by examining the structure of known good NTX indexes.<br><br> - -<h4>NTX Index File Characteristics</h4> - -<ul><li>NTX indices maintain keys in ascending sort order only.<br><br> -<li>NTX indices support <em>unique</em> or <em>non unique</em> keys.<br><br> - -<em>Unique</em> keys must be unique. The database update routines will -fail if an attempt to add a non-unique key is performed.<br><br> - -<em>Non-unique</em> Keys are not required to be unique, duplicate -keys are allowed if the index is created with the XB_NOT_UNIQUE -setting. Duplicate keys are stored in record number order.<br><br> - -<li>NTX indexes are automatically updated by the Xbase library after the -indices are opened.<br><br> - -<li>Character keys are left justified and padded on the right with spaces.<br><br> - -<li>Numeric keys are stored as eight byte double values.<br><br> - -The numeric key processing logic performs floating point numeric -calculations on eight byte double values. This logic may be compute intensive -and slow on older machines, especially the older intel processors without a -math coprocessor chip. - -</ul> - - -<h4>NTX File Internals</h4> - -NTX files are comprised of two or more 1024 byte blocks or nodes of -information. There are three types of nodes: Head Nodes, Interior -Nodes and Leaf Nodes.<br><br> - -The <em>Head Node</em> is the first node in the file starting at -position zero (0) and contains information about the NTX file. There -is only one Head Node in each index and it always starts at the -beginning of the file.<br><br> - - -<TABLE BORDER> -<CAPTION ALIGN="TOP"><h3>NTX Header Node</H3></CAPTION> -<TR VALIGN="BASELINE"> -<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description -<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Signature Byte<TD>The Clipper signature byte. 0x003h indicates Clipper 87. 0x006h indicates Clipper 5.x -<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Indexing Version Number<TD>Documented as the "Compiler Version" but I have observed an increasing number. Incremented whenever the index is changed. -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Node Offset<TD>The offset to the first node. -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>First Unused Page Offset<TD>The offset to the first unused node. -<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size + 8<TD>The Key Size plus 8 bytes. -<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Key Size<TD>The size (length) of the key. -<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Number of Decimals<TD>Number of decimal places in key. -<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>Max Items Per Node<TD>The maximum number of key per node. -<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>1/2 The Max Items Per Node<TD>Half the maximum number of key per node. Important in a B-tree system, as this is the minimum number of keys that must be on a page. -<TR><TH ALIGN="LEFT">char<TD>256<TD>KeyExpression<TD>Key expression string -<TR><TH ALIGN="LEFT">char<TD>1<TD>Unique<TD>Unique indicator<br> - 00 - Not Unique - XB_NON_UNIQUE<br> - 01 - Unique - XB_UNIQUE -<TR><TH ALIGN="LEFT">char<TD>745<TD>Unused<TD>Unused - - -<TR><TH ALIGN="LEFT"><TD>1024<TD><TD>Total bytes in node -</TABLE> -<br><br> -The following structure is used by the Xbase NTX routines: -<xmp> - -struct NtxHeadNode { /* ntx header on disk */ - xbUShort Signature; /* Clipper 5.x or Clipper 87 */ - xbUShort Version; /* Compiler Version */ - /* Also turns out to be */ - /* a last modified counter */ - xbULong StartNode; /* Offset in file for first node */ - xbULong UnusedOffset; /* First free node offset */ - xbUShort KeySize; /* Size of items (KeyLen + 8) */ - xbUShort KeyLen; /* Size of the Key */ - xbUShort DecimalCount; /* Number of decimal positions */ - xbUShort KeysPerNode; /* Max number of keys per node */ - xbUShort HalfKeysPerNode; /* Min number of keys per node */ - char KeyExpression[256]; /* Null terminated key expression */ - unsigned Unique; /* Unique Flag */ - char NotUsed[745]; -}; - -</xmp> - -<br><br> - -<h4>Interior and Leaf Nodes</h4> - -NTX files use a B-tree system to store keys. A B-tree is a balanced, -on disk tree who's design minimizes disk access. Interior Nodes and -Leaf Nodes share the same structure in an NTX file. The difference is -that interior nodes point to other nodes. Leaf nodes point to -nothing. Keys in both interior nodes and leaf nodes point to records -in a DBF file. - -Interior nodes have field LeftNodeNo valued which points to the node -which points to the keys which are less than the key value in the KeyVal -field. There is one more LeftNodeNo value in the node than there are keys. The -Last LeftNodeNo points to the node which is greater than the highest -key value in the node. <br><br> - -Leaf nodes have 0 in the LeftNodeNo field.<br><br> - - -<TABLE BORDER> -<CAPTION ALIGN="TOP"><h3>NTX Interior Node and Leaf Node Structure</H3></CAPTION> -<TR VALIGN="BASELINE"> -<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description -<TR><TH ALIGN="LEFT">xbShort<TD>2<TD>NoOfKeysThisNode<TD>The number of key values in this node. (N) -<TR><TH ALIGN="LEFT">Array of xbUShort<TD>2<TD>offsets[]<TD>Array of - <pre>HeadNode.KeysPerNode +1</pre> unsigned longs. - These values are the offsets (in bytes) of each key - in this node, from the beginning of the node. -<TR><TH ALIGN="LEFT">char<TD>variable<TD>KeyRecs<TD>A repeating structure of - pointers and keys. See the next table for the KeyRec structure. -</TABLE> -<br><br> - -One primary difference between NDX files and NTX files is that NTX -files uses an array of offsets on all interior and leaf nodes. Each -offset is the byte count from the beginning of the node where each -KeyRec will be found. The order of the array of offsets determines -the order of keys on a given node. When keys are added or deleted, -thus changing the order of the keys on a node, only the order of the -offset array is changed. All other key data is not moved. This results -in slightly better index performance. - -<BR> -<TABLE BORDER> -<CAPTION ALIGN="TOP"><h3>KeyRec Structure</H3></CAPTION> -<TR VALIGN="BASELINE"> -<TR><TH ALIGN="LEFT">Type<TD>Size<TD>Field Name<TD>Description -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>LeftNodeNo<TD>The node number (offset from beginning of file) of the lower node - for this key. 0 in Leaf Nodes. -<TR><TH ALIGN="LEFT">xbLong<TD>4<TD>DbfRecNo<TD>The DBF record number for this key. - 0 in Interior Nodes. -<TR><TH ALIGN="LEFT">char<TD>KeyLen<TD>KeyValue<TD>The key value. -</TABLE> - -<br><br> -For those interested in knowing how the Xbase DBMS manipulates and -navigates index files, the following discussion may be helpfull.<br><br> - -Xbase DBMS navigates through NTX files by using an in-memory chain of -nodes of the current location / key in use. It starts by reading the -Head Node of the index, which points to the first node of the -file. The first node of the file will be a leaf node if the index is -small or will be an interior node if the index has more than one leaf -node. The first interior node is loaded into memory, added to the -node chain and points to the next node to read. The node is made up -of one or more keys. If it is a leaf node, the logic looks for a -matching key on the node. It continues down the tree, adding the -nodes to the in-memory node chain until it reaches the correct -node. If it finds a matching key in the leaf node, it returns a XB_FOUND -condition. If it doesn't find an exact match in the leaf node, it -returns a XB_NOT_FOUND condition and stops on the key which is greater -than the search key given. - -<hr> -<A HREF="mailto:bob@#synxis.com"> -Author: Bob Cotton - bob@synxis.com</A><br> -<p><img src="xbase.jpg"><br><hr> -</BODY> -</HTML> |