From 95f922bb7ecdc4c198e50c8a1b756bddf8576aa5 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 1 Jul 2012 15:02:09 +0200 Subject: [PATCH] Remove distributed built files from version control. --- ChangeLog | 12 + doc/.gitignore | 12 + doc/gperf.dvi | Bin 134248 -> 0 bytes doc/gperf.html | 2482 ----------------- doc/gperf.info | 2096 --------------- doc/gperf.pdf | Bin 243013 -> 0 bytes doc/gperf.ps | 6348 -------------------------------------------- doc/gperf_1.html | 825 ------ doc/gperf_10.html | 135 - doc/gperf_2.html | 49 - doc/gperf_3.html | 42 - doc/gperf_4.html | 99 - doc/gperf_5.html | 720 ----- doc/gperf_6.html | 502 ---- doc/gperf_7.html | 57 - doc/gperf_8.html | 46 - doc/gperf_9.html | 96 - doc/gperf_toc.html | 59 - 18 files changed, 24 insertions(+), 13556 deletions(-) create mode 100644 doc/.gitignore delete mode 100644 doc/gperf.dvi delete mode 100644 doc/gperf.html delete mode 100644 doc/gperf.info delete mode 100644 doc/gperf.pdf delete mode 100644 doc/gperf.ps delete mode 100644 doc/gperf_1.html delete mode 100644 doc/gperf_10.html delete mode 100644 doc/gperf_2.html delete mode 100644 doc/gperf_3.html delete mode 100644 doc/gperf_4.html delete mode 100644 doc/gperf_5.html delete mode 100644 doc/gperf_6.html delete mode 100644 doc/gperf_7.html delete mode 100644 doc/gperf_8.html delete mode 100644 doc/gperf_9.html delete mode 100644 doc/gperf_toc.html diff --git a/ChangeLog b/ChangeLog index 4989f91..ce3d948 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2012-07-01 Bruno Haible + + Remove distributed built files from version control. + * doc/.gitignore: New file. + * doc/gperf.info: Remove file. + * doc/gperf.dvi: Remove file. + * doc/gperf.ps: Remove file. + * doc/gperf.pdf: Remove file. + * doc/gperf.html: Remove file. + * doc/gperf_toc.html, doc/gperf_[0-9].html, doc/gperf_[0-9][0-9].html: + Remove files. + 2012-07-01 Bruno Haible Allow editor backup files in git checkouts. diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 0000000..c84fac8 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1,12 @@ +# Files generated by "make", using makeinfo, texi2html, perl +# and therefore distributed (i.e. kept by "make distclean"). +# Same as DISTRIBUTED_BUILT_FILES in Makefile.in. +/gperf.info +/gperf.dvi +/gperf.ps +/gperf.pdf +/gperf.html +/gperf_toc.html +/gperf_[0-9].html +/gperf_[0-9][0-9].html + diff --git a/doc/gperf.dvi b/doc/gperf.dvi deleted file mode 100644 index 46a06966426fd297dc5f9a5160cfaef377d0d6b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134248 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 - - - - -Perfect Hash Function Generator - - -

User's Guide to gperf 3.1

-

The GNU Perfect Hash Function Generator

-

Edition 3.1, 20 December 2009

-
Douglas C. Schmidt
-
Bruno Haible
-

-


-

Table of Contents

- -


- -

-Copyright (C) 1989-2009 Free Software Foundation, Inc. - -

- -

-Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -

-

-Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -section entitled “GNU General Public License” is included -exactly as in the original, and provided that the entire resulting -derived work is distributed under the terms of a permission notice -identical to this one. - -

-

-Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that the section entitled “GNU General Public License” may be -included in a translation approved by the author instead of in the -original English. - -

- - - -

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.
-
- - -

1.0 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. - -

- -

1.1 TERMS AND CONDITIONS

- - -
    -
  1. 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. - -
  2. 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. - -
  3. 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. - -
  4. 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. - -
  5. 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. - -
  6. 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: - - -
      -
    1. - -The work must carry prominent notices stating that you modified it, -and giving a relevant date. - -
    2. - -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”. - -
    3. - -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. - -
    4. - -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. - -
  7. 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: - - -
      -
    1. - -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. - -
    2. - -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. - -
    3. - -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. - -
    4. - -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. - -
    5. - -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. - -
  8. 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: - - -
      -
    1. - -Disclaiming warranty or limiting liability differently from the terms -of sections 15 and 16 of this License; or - -
    2. - -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 - -
    3. - -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 - -
    4. - -Limiting the use for publicity purposes of names of licensors or -authors of the material; or - -
    5. - -Declining to grant rights under trademark law for use of some trade -names, trademarks, or service marks; or - -
    6. - -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. - -
  9. 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. - -
  10. 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. - -
  11. 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. - -
  12. 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. - -
  13. 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. - -
  14. 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. - -
  15. 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. - -
  16. 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. - -
  17. 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. - -
  18. 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. - -
- - -

1.2 END OF TERMS AND CONDITIONS

- - -

1.3 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. - -

- - -

Contributors to GNU gperf Utility

- - -
    -
  • - - -The GNU gperf perfect hash function generator utility was -written in GNU C++ by Douglas C. Schmidt. The general -idea for the perfect hash function generator was inspired by Keith -Bostic's algorithm written in C, and distributed to net.sources around -1984. The current program is a heavily modified, enhanced, and extended -implementation of Keith's basic idea, created at the University of -California, Irvine. Bugs, patches, and suggestions should be reported -to <bug-gnu-gperf@gnu.org>. - -
  • - -Special thanks is extended to Michael Tiemann and Doug Lea, for -providing a useful compiler, and for giving me a forum to exhibit my -creation. - -In addition, Adam de Boor and Nels Olson provided many tips and insights -that greatly helped improve the quality and functionality of gperf. - -
  • - -Bruno Haible enhanced and optimized the search algorithm. He also rewrote -the input routines and the output routines for better reliability, and -added a testsuite. -
- - - -

2 Introduction

- -

-gperf is a perfect hash function generator written in C++. It -transforms an n element user-specified keyword set W into a -perfect hash function F. F uniquely maps keywords in -W onto the range 0..k, where k >= n-1. If k -= n-1 then F is a minimal perfect hash function. -gperf generates a 0..k element static lookup table and a -pair of C functions. These functions determine whether a given -character string s occurs in W, using at most one probe into -the lookup table. - -

-

-gperf currently generates the reserved keyword recognizer for -lexical analyzers in several production and research compilers and -language processing tools, including GNU C, GNU C++, GNU Java, GNU Pascal, -GNU Modula 3, and GNU indent. Complete C++ source code for gperf is -available from http://ftp.gnu.org/pub/gnu/gperf/. -A paper describing gperf's design and implementation in greater -detail is available in the Second USENIX C++ Conference proceedings -or from http://www.cs.wustl.edu/~schmidt/resume.html. - -

- - -

3 Static search structures and GNU gperf

-

- - -

-

-A static search structure is an Abstract Data Type with certain -fundamental operations, e.g., initialize, insert, -and retrieve. Conceptually, all insertions occur before any -retrievals. In practice, gperf generates a static array -containing search set keywords and any associated attributes specified -by the user. Thus, there is essentially no execution-time cost for the -insertions. It is a useful data structure for representing static -search sets. Static search sets occur frequently in software system -applications. Typical static search sets include compiler reserved -words, assembler instruction opcodes, and built-in shell interpreter -commands. Search set members, called keywords, are inserted into -the structure only once, usually during program initialization, and are -not generally modified at run-time. - -

-

-Numerous static search structure implementations exist, e.g., -arrays, linked lists, binary search trees, digital search tries, and -hash tables. Different approaches offer trade-offs between space -utilization and search time efficiency. For example, an n element -sorted array is space efficient, though the average-case time -complexity for retrieval operations using binary search is -proportional to log n. Conversely, hash table implementations -often locate a table entry in constant time, but typically impose -additional memory overhead and exhibit poor worst case performance. - -

-

- -Minimal perfect hash functions provide an optimal solution for a -particular class of static search sets. A minimal perfect hash -function is defined by two properties: - -

- -
    -
  • - -It allows keyword recognition in a static search set using at most -one probe into the hash table. This represents the “perfect” -property. -
  • - -The actual memory allocated to store the keywords is precisely large -enough for the keyword set, and no larger. This is the -“minimal” property. -
- -

-For most applications it is far easier to generate perfect hash -functions than minimal perfect hash functions. Moreover, -non-minimal perfect hash functions frequently execute faster than -minimal ones in practice. This phenomena occurs since searching a -sparse keyword table increases the probability of locating a “null” -entry, thereby reducing string comparisons. gperf's default -behavior generates near-minimal perfect hash functions for -keyword sets. However, gperf provides many options that permit -user control over the degree of minimality and perfection. - -

-

-Static search sets often exhibit relative stability over time. For -example, Ada's 63 reserved words have remained constant for nearly a -decade. It is therefore frequently worthwhile to expend concerted -effort building an optimal search structure once, if it -subsequently receives heavy use multiple times. gperf removes -the drudgery associated with constructing time- and space-efficient -search structures by hand. It has proven a useful and practical tool -for serious programming projects. Output from gperf is currently -used in several production and research compilers, including GNU C, GNU -C++, GNU Java, GNU Pascal, and GNU Modula 3. The latter two compilers are -not yet part of the official GNU distribution. Each compiler utilizes -gperf to automatically generate static search structures that -efficiently identify their respective reserved keywords. - -

- - -

4 High-Level Description of GNU gperf

- -

-The perfect hash function generator gperf reads a set of -“keywords” from an input file (or from the standard input by -default). It attempts to derive a perfect hashing function that -recognizes a member of the static keyword set with at most a -single probe into the lookup table. If gperf succeeds in -generating such a function it produces a pair of C source code routines -that perform hashing and table lookup recognition. All generated C code -is directed to the standard output. Command-line options described -below allow you to modify the input and output format to gperf. - -

-

-By default, gperf attempts to produce time-efficient code, with -less emphasis on efficient space utilization. However, several options -exist that permit trading-off execution time for storage space and vice -versa. In particular, expanding the generated table size produces a -sparse search structure, generally yielding faster searches. -Conversely, you can direct gperf to utilize a C switch -statement scheme that minimizes data space storage size. Furthermore, -using a C switch may actually speed up the keyword retrieval time -somewhat. Actual results depend on your C compiler, of course. - -

-

-In general, gperf assigns values to the bytes it is using -for hashing until some set of values gives each keyword a unique value. -A helpful heuristic is that the larger the hash value range, the easier -it is for gperf to find and generate a perfect hash function. -Experimentation is the key to getting the most from gperf. - -

- - -

4.1 Input Format to gperf

-

- - - - -You can control the input file format by varying certain command-line -arguments, in particular the ‘-t’ option. The input's appearance -is similar to GNU utilities flex and bison (or UNIX -utilities lex and yacc). Here's an outline of the general -format: - -

- -
-declarations
-%%
-keywords
-%%
-functions
-
- -

-Unlike flex or bison, the declarations section and -the functions section are optional. The following sections describe the -input format for each section. - -

- -

-It is possible to omit the declaration section entirely, if the ‘-t’ -option is not given. In this case the input file begins directly with the -first keyword line, e.g.: - -

- -
-january
-february
-march
-april
-...
-
- - - -

4.1.1 Declarations

- -

-The keyword input file optionally contains a section for including -arbitrary C declarations and definitions, gperf declarations that -act like command-line options, as well as for providing a user-supplied -struct. - -

- - - -

4.1.1.1 User-supplied struct

- -

-If the ‘-t’ option (or, equivalently, the ‘%struct-type’ declaration) -is enabled, you must provide a C struct as the last -component in the declaration section from the input file. The first -field in this struct must be of type char * or const char * -if the ‘-P’ option is not given, or of type int if the option -‘-P’ (or, equivalently, the ‘%pic’ declaration) is enabled. -This first field must be called ‘name’, although it is possible to modify -its name with the ‘-K’ option (or, equivalently, the -‘%define slot-name’ declaration) described below. - -

-

-Here is a simple example, using months of the year and their attributes as -input: - -

- -
-struct month { char *name; int number; int days; int leap_days; };
-%%
-january,   1, 31, 31
-february,  2, 28, 29
-march,     3, 31, 31
-april,     4, 30, 30
-may,       5, 31, 31
-june,      6, 30, 30
-july,      7, 31, 31
-august,    8, 31, 31
-september, 9, 30, 30
-october,  10, 31, 31
-november, 11, 30, 30
-december, 12, 31, 31
-
- -

- -Separating the struct declaration from the list of keywords and -other fields are a pair of consecutive percent signs, ‘%%’, -appearing left justified in the first column, as in the UNIX utility -lex. - -

-

-If the struct has already been declared in an include file, it can -be mentioned in an abbreviated form, like this: - -

- -
-struct month;
-%%
-january,   1, 31, 31
-...
-
- - - -

4.1.1.2 Gperf Declarations

- -

-The declaration section can contain gperf declarations. They -influence the way gperf works, like command line options do. -In fact, every such declaration is equivalent to a command line option. -There are three forms of declarations: - -

- -
    -
  1. - -Declarations without argument, like ‘%compare-lengths’. - -
  2. - -Declarations with an argument, like ‘%switch=count. - -
  3. - -Declarations of names of entities in the output file, like -‘%define lookup-function-name name. -
- -

-When a declaration is given both in the input file and as a command line -option, the command-line option's value prevails. - -

-

-The following gperf declarations are available. - -

-
- -
‘%delimiters=delimiter-list -
- -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. - -
‘%struct-type’ -
- -Allows you to include a struct type declaration for generated -code; see above for an example. - -
‘%ignore-case’ -
- -Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. - -
‘%language=language-name -
- -Instructs gperf to generate code in the language specified by the -option's argument. Languages handled are currently: - -
- -
‘KR-C’ -
-Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking ‘const’. - -
‘C’ -
-Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you #define const to empty -for compilers which don't know about this keyword. - -
‘ANSI-C’ -
-ANSI C. This language is understood by ANSI C (C89, ISO C90) compilers, -ISO C99 compilers, and C++ compilers. - -
‘C++’ -
-C++. This language is understood by C++ compilers. -
- -The default is ANSI-C. - -
‘%define slot-name name -
- -This declaration is only useful when option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is ‘name’. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied struct. - -
‘%define initializer-suffix initializers -
- -This declaration is only useful when option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) has been given. -It permits to specify initializers for the structure members following -slot-name in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following slot-name. - -
‘%define hash-function-name name -
- -Allows you to specify the name for the generated hash function. Default -name is ‘hash’. This option permits the use of two hash tables in -the same file. - -
‘%define lookup-function-name name -
- -Allows you to specify the name for the generated lookup function. -Default name is ‘in_word_set’. This option permits multiple -generated hash functions to be used in the same application. - -
‘%define class-name name -
- -This option is only useful when option ‘-L C++’ (or, equivalently, -the ‘%language=C++’ declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -Perfect_Hash. - -
‘%7bit’ -
- -This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions isalnum and isgraph do -not guarantee that a byte is in this range. Only an explicit -test like ‘c >= 'A' && c <= 'Z'’ guarantees this.) - -
‘%compare-lengths’ -
- -Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (see section 4.3 Use of NUL bytes). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via strcmp. -However, using ‘%compare-lengths’ might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option ‘-S’ or ‘%switch’ is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -
‘%compare-strncmp’ -
- -Generates C code that uses the strncmp function to perform -string comparisons. The default action is to use strcmp. - -
‘%readonly-tables’ -
- -Makes the contents of all generated lookup tables constant, i.e., -“readonly”. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -
‘%enum’ -
- -Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark <jjc@ai.mit.edu>. - -
‘%includes’ -
- -Include the necessary system include file, <string.h>, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -
‘%global-table’ -
- -Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -
‘%pic’ -
- -Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the ‘%struct-type’ declaration (or, -equivalently, the option ‘-t’) is also given, the first field of the -user-defined struct must be of type ‘int’, not ‘char *’, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -‘stringpool + o, where o is the offset. The string pool -name can be changed through the ‘%define string-pool-name’ declaration. - -
‘%define string-pool-name name -
- -Allows you to specify the name of the generated string pool created by -the declaration ‘%pic’ (or, equivalently, the option ‘-P’). -The default name is ‘stringpool’. This declaration permits the use of -two hash tables in the same file, with ‘%pic’ and even when the -‘%global-table’ declaration (or, equivalently, the option ‘-G’) -is given. - -
‘%null-strings’ -
- -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as the declaration ‘%pic’), at the -expense of one more test-and-branch instruction at run time. - -
‘%define word-array-name name -
- -Allows you to specify the name for the generated array containing the -hash table. Default name is ‘wordlist’. This option permits the -use of two hash tables in the same file, even when the option ‘-G’ -(or, equivalently, the ‘%global-table’ declaration) is given. - -
‘%define length-table-name name -
- -Allows you to specify the name for the generated array containing the -length table. Default name is ‘lengthtable’. This option permits the -use of two length tables in the same file, even when the option ‘-G’ -(or, equivalently, the ‘%global-table’ declaration) is given. - -
‘%switch=count -
- -Causes the generated C code to use a switch statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many switch statements are generated. A -value of 1 generates 1 switch containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -switch, etc. This is useful since many C compilers cannot -correctly generate code for large switch statements. This option -was inspired in part by Keith Bostic's original C program. - -
‘%omit-struct-type’ -
- -Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. -
- - - -

4.1.1.3 C Code Inclusion

- -

- - -Using a syntax similar to GNU utilities flex and bison, it -is possible to directly include C source text and comments verbatim into -the generated output file. This is accomplished by enclosing the region -inside left-justified surrounding ‘%{’, ‘%}’ pairs. Here is -an input fragment based on the previous example that illustrates this -feature: - -

- -
-%{
-#include <assert.h>
-/* This section of code is inserted directly into the output. */
-int return_month_days (struct month *months, int is_leap_year);
-%}
-struct month { char *name; int number; int days; int leap_days; };
-%%
-january,   1, 31, 31
-february,  2, 28, 29
-march,     3, 31, 31
-...
-
- - - -

4.1.2 Format for Keyword Entries

- -

-The second input file format section contains lines of keywords and any -associated attributes you might supply. A line beginning with ‘#’ -in the first column is considered a comment. Everything following the -‘#’ is ignored, up to and including the following newline. A line -beginning with ‘%’ in the first column is an option declaration and -must not occur within the keywords section. - -

-

-The first field of each non-comment line is always the keyword itself. It -can be given in two ways: as a simple name, i.e., without surrounding -string quotation marks, or as a string enclosed in double-quotes, in -C syntax, possibly with backslash escapes like \" or \234 -or \xa8. In either case, it must start right at the beginning -of the line, without leading whitespace. -In this context, a “field” is considered to extend up to, but -not include, the first blank, comma, or newline. Here is a simple -example taken from a partial list of C reserved words: - -

- -
-# These are a few C reserved words, see the c.gperf file 
-# for a complete list of ANSI C reserved words.
-unsigned
-sizeof
-switch
-signed
-if
-default
-for
-while
-return
-
- -

-Note that unlike flex or bison the first ‘%%’ marker -may be elided if the declaration section is empty. - -

-

-Additional fields may optionally follow the leading keyword. Fields -should be separated by commas, and terminate at the end of line. What -these fields mean is entirely up to you; they are used to initialize the -elements of the user-defined struct provided by you in the -declaration section. If the ‘-t’ option (or, equivalently, the -‘%struct-type’ declaration) is not enabled -these fields are simply ignored. All previous examples except the last -one contain keyword attributes. - -

- - -

4.1.3 Including Additional C Functions

- -

-The optional third section also corresponds closely with conventions -found in flex and bison. All text in this section, -starting at the final ‘%%’ and extending to the end of the input -file, is included verbatim into the generated output file. Naturally, -it is your responsibility to ensure that the code contained in this -section is valid C. - -

- - -

4.1.4 Where to place directives for GNU indent.

- -

-If you want to invoke GNU indent on a gperf input file, -you will see that GNU indent doesn't understand the ‘%%’, -‘%{’ and ‘%}’ directives that control gperf's -interpretation of the input file. Therefore you have to insert some -directives for GNU indent. More precisely, assuming the most -general input file structure - -

- -
-declarations part 1
-%{
-verbatim code
-%}
-declarations part 2
-%%
-keywords
-%%
-functions
-
- -

-you would insert ‘*INDENT-OFF*’ and ‘*INDENT-ON*’ comments -as follows: - -

- -
-/* *INDENT-OFF* */
-declarations part 1
-%{
-/* *INDENT-ON* */
-verbatim code
-/* *INDENT-OFF* */
-%}
-declarations part 2
-%%
-keywords
-%%
-/* *INDENT-ON* */
-functions
-
- - - -

4.2 Output Format for Generated C Code with gperf

-

- - -

-

-Several options control how the generated C code appears on the standard -output. Two C functions are generated. They are called hash and -in_word_set, although you may modify their names with a command-line -option. Both functions require two arguments, a string, char * -str, and a length parameter, int len. Their default -function prototypes are as follows: - -

-

-

-
Function: unsigned int hash (const char * str, unsigned int len) -
-By default, the generated hash function returns an integer value -created by adding len to several user-specified str byte -positions indexed into an associated values table stored in a -local static array. The associated values table is constructed -internally by gperf and later output as a static local C array -called ‘hash_table’. The relevant selected positions (i.e. indices -into str) are specified via the ‘-k’ option when running -gperf, as detailed in the Options section below (see section 5 Invoking gperf). -
- -

-

-

-
Function: in_word_set (const char * str, unsigned int len) -
-If str is in the keyword set, returns a pointer to that -keyword. More exactly, if the option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) was given, it returns -a pointer to the matching keyword's structure. Otherwise it returns -NULL. -
- -

-

-If the option ‘-c’ (or, equivalently, the ‘%compare-strncmp’ -declaration) is not used, str must be a NUL terminated -string of exactly length len. If ‘-c’ (or, equivalently, the -‘%compare-strncmp’ declaration) is used, str must -simply be an array of len bytes and does not need to be NUL -terminated. - -

-

-The code generated for these two functions is affected by the following -options: - -

-
- -
‘-t’ -
-
‘--struct-type’ -
-Make use of the user-defined struct. - -
‘-S total-switch-statements -
-
‘--switch=total-switch-statements -
- -Generate 1 or more C switch statement rather than use a large, -(and potentially sparse) static array. Although the exact time and -space savings of this approach vary according to your C compiler's -degree of optimization, this method often results in smaller and faster -code. -
- -

-If the ‘-t’ and ‘-S’ options (or, equivalently, the -‘%struct-type’ and ‘%switch’ declarations) are omitted, the default -action -is to generate a char * array containing the keywords, together with -additional empty strings used for padding the array. By experimenting -with the various input and output options, and timing the resulting C -code, you can determine the best option choices for different keyword -set characteristics. - -

- - -

4.3 Use of NUL bytes

-

- - -

-

-By default, the code generated by gperf operates on zero -terminated strings, the usual representation of strings in C. This means -that the keywords in the input file must not contain NUL bytes, -and the str argument passed to hash or in_word_set -must be NUL terminated and have exactly length len. - -

-

-If option ‘-c’ (or, equivalently, the ‘%compare-strncmp’ -declaration) is used, then the str argument does not need -to be NUL terminated. The code generated by gperf will only -access the first len, not len+1, bytes starting at str. -However, the keywords in the input file still must not contain NUL -bytes. - -

-

-If option ‘-l’ (or, equivalently, the ‘%compare-lengths’ -declaration) is used, then the hash table performs binary -comparison. The keywords in the input file may contain NUL bytes, -written in string syntax as \000 or \x00, and the code -generated by gperf will treat NUL like any other byte. -Also, in this case the ‘-c’ option (or, equivalently, the -‘%compare-strncmp’ declaration) is ignored. - -

- - -

4.4 The Copyright of the Output

-

- - -

-

-gperf is under GPL, but that does not cause the output produced -by gperf to be under GPL. The reason is that the output contains -only small pieces of text that come directly from gperf's source -code -- only about 7 lines long, too small for being significant --, and -therefore the output is not a “work based on gperf” (in the -sense of the GPL version 3). - -

-

-On the other hand, the output produced by gperf contains -essentially all of the input file. Therefore the output is a -“derivative work” of the input (in the sense of U.S. copyright law); -and its copyright status depends on the copyright of the input. For most -software licenses, the result is that the the output is under the same -license, with the same copyright holder, as the input that was passed to -gperf. - -

- - -

5 Invoking gperf

- -

-There are many options to gperf. They were added to make -the program more convenient for use with real applications. “On-line” -help is readily available via the ‘--help’ option. Here is the -complete list of options. - -

- - - -

5.1 Specifying the Location of the Output File

- -
- -
‘--output-file=file -
-Allows you to specify the name of the file to which the output is written to. -
- -

-The results are written to standard output if no output file is specified -or if it is ‘-’. - -

- - -

5.2 Options that affect Interpretation of the Input File

- -

-These options are also available as declarations in the input file -(see section 4.1.1.2 Gperf Declarations). - -

-
- -
‘-e keyword-delimiter-list -
-
‘--delimiters=keyword-delimiter-list -
- -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. One useful trick is to use -e'TAB', where TAB is -the literal tab character. - -
‘-t’ -
-
‘--struct-type’ -
-Allows you to include a struct type declaration for generated -code. Any text before a pair of consecutive ‘%%’ is considered -part of the type declaration. Keywords and additional fields may follow -this, one group of fields per line. A set of examples for generating -perfect hash tables and functions for Ada, C, C++, Pascal, Modula 2, -Modula 3 and JavaScript reserved words are distributed with this release. - -
‘--ignore-case’ -
-Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. This option is therefore not -suitable if a properly internationalized or locale aware case mapping -should be used. (For example, in a Turkish locale, the upper case equivalent -of the lowercase ASCII letter ‘i’ is the non-ASCII character -‘capital i with dot above’.) For this case, it is better to apply -an uppercase or lowercase conversion on the string before passing it to -the gperf generated function. -
- - - -

5.3 Options to specify the Language for the Output Code

- -

-These options are also available as declarations in the input file -(see section 4.1.1.2 Gperf Declarations). - -

-
- -
‘-L generated-language-name -
-
‘--language=generated-language-name -
-Instructs gperf to generate code in the language specified by the -option's argument. Languages handled are currently: - -
- -
‘KR-C’ -
-Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking ‘const’. - -
‘C’ -
-Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you #define const to empty -for compilers which don't know about this keyword. - -
‘ANSI-C’ -
-ANSI C. This language is understood by ANSI C compilers and C++ compilers. - -
‘C++’ -
-C++. This language is understood by C++ compilers. -
- -The default is ANSI-C. - -
‘-a’ -
-This option is supported for compatibility with previous releases of -gperf. It does not do anything. - -
‘-g’ -
-This option is supported for compatibility with previous releases of -gperf. It does not do anything. -
- - - -

5.4 Options for fine tuning Details in the Output Code

- -

-Most of these options are also available as declarations in the input file -(see section 4.1.1.2 Gperf Declarations). - -

-
- -
‘-K slot-name -
-
‘--slot-name=slot-name -
- -This option is only useful when option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is ‘name’. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied struct. - -
‘-F initializers -
-
‘--initializer-suffix=initializers -
- -This option is only useful when option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) has been given. -It permits to specify initializers for the structure members following -slot-name in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following slot-name. - -
‘-H hash-function-name -
-
‘--hash-function-name=hash-function-name -
-Allows you to specify the name for the generated hash function. Default -name is ‘hash’. This option permits the use of two hash tables in -the same file. - -
‘-N lookup-function-name -
-
‘--lookup-function-name=lookup-function-name -
-Allows you to specify the name for the generated lookup function. -Default name is ‘in_word_set’. This option permits multiple -generated hash functions to be used in the same application. - -
‘-Z class-name -
-
‘--class-name=class-name -
- -This option is only useful when option ‘-L C++’ (or, equivalently, -the ‘%language=C++’ declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -Perfect_Hash. - -
‘-7’ -
-
‘--seven-bit’ -
-This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions isalnum and isgraph do -not guarantee that a byte is in this range. Only an explicit -test like ‘c >= 'A' && c <= 'Z'’ guarantees this.) This was the -default in versions of gperf earlier than 2.7; now the default is -to support 8-bit and multibyte characters. - -
‘-l’ -
-
‘--compare-lengths’ -
-Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (see section 4.3 Use of NUL bytes). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via strcmp. -However, using ‘-l’ might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option ‘-S’ or ‘%switch’ is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -
‘-c’ -
-
‘--compare-strncmp’ -
-Generates C code that uses the strncmp function to perform -string comparisons. The default action is to use strcmp. - -
‘-C’ -
-
‘--readonly-tables’ -
-Makes the contents of all generated lookup tables constant, i.e., -“readonly”. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -
‘-E’ -
-
‘--enum’ -
-Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark <jjc@ai.mit.edu>. - -
‘-I’ -
-
‘--includes’ -
-Include the necessary system include file, <string.h>, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -
‘-G’ -
-
‘--global-table’ -
-Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -
‘-P’ -
-
‘--pic’ -
-Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) is also given, the first field of the -user-defined struct must be of type ‘int’, not ‘char *’, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -‘stringpool + o, where o is the offset. The string pool -name can be changed through the option ‘--string-pool-name’. - -
‘-Q string-pool-name -
-
‘--string-pool-name=string-pool-name -
-Allows you to specify the name of the generated string pool created by -option ‘-P’. The default name is ‘stringpool’. This option -permits the use of two hash tables in the same file, with ‘-P’ and -even when the option ‘-G’ (or, equivalently, the ‘%global-table’ -declaration) is given. - -
‘--null-strings’ -
-Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as option ‘-P’), at the expense -of one more test-and-branch instruction at run time. - -
‘-W hash-table-array-name -
-
‘--word-array-name=hash-table-array-name -
- -Allows you to specify the name for the generated array containing the -hash table. Default name is ‘wordlist’. This option permits the -use of two hash tables in the same file, even when the option ‘-G’ -(or, equivalently, the ‘%global-table’ declaration) is given. - -
‘--length-table-name=length-table-array-name -
- -Allows you to specify the name for the generated array containing the -length table. Default name is ‘lengthtable’. This option permits the -use of two length tables in the same file, even when the option ‘-G’ -(or, equivalently, the ‘%global-table’ declaration) is given. - -
‘-S total-switch-statements -
-
‘--switch=total-switch-statements -
- -Causes the generated C code to use a switch statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many switch statements are generated. A -value of 1 generates 1 switch containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -switch, etc. This is useful since many C compilers cannot -correctly generate code for large switch statements. This option -was inspired in part by Keith Bostic's original C program. - -
‘-T’ -
-
‘--omit-struct-type’ -
-Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. - -
‘-p’ -
-This option is supported for compatibility with previous releases of -gperf. It does not do anything. -
- - - -

5.5 Options for changing the Algorithms employed by gperf

- -
- -
‘-k selected-byte-positions -
-
‘--key-positions=selected-byte-positions -
-Allows selection of the byte positions used in the keywords' -hash function. The allowable choices range between 1-255, inclusive. -The positions are separated by commas, e.g., ‘-k 9,4,13,14’; -ranges may be used, e.g., ‘-k 2-7’; and positions may occur -in any order. Furthermore, the wildcard '*' causes the generated -hash function to consider all byte positions in each keyword, -whereas '$' instructs the hash function to use the “final byte” -of a keyword (this is the only way to use a byte position greater than -255, incidentally). - -For instance, the option ‘-k 1,2,4,6-10,'$'’ generates a hash -function that considers positions 1,2,4,6,7,8,9,10, plus the last -byte in each keyword (which may be at a different position for each -keyword, obviously). Keywords -with length less than the indicated byte positions work properly, since -selected byte positions exceeding the keyword length are simply not -referenced in the hash function. - -This option is not normally needed since version 2.8 of gperf; -the default byte positions are computed depending on the keyword set, -through a search that minimizes the number of byte positions. - -
‘-D’ -
-
‘--duplicates’ -
- -Handle keywords whose selected byte sets hash to duplicate values. -Duplicate hash values can occur if a set of keywords has the same names, but -possesses different attributes, or if the selected byte positions are not well -chosen. With the -D option gperf treats all these keywords as -part of an equivalence class and generates a perfect hash function with -multiple comparisons for duplicate keywords. It is up to you to completely -disambiguate the keywords by modifying the generated C code. However, -gperf helps you out by organizing the output. - -Using this option usually means that the generated hash function is no -longer perfect. On the other hand, it permits gperf to work on -keyword sets that it otherwise could not handle. - -
‘-m iterations -
-
‘--multiple-iterations=iterations -
-Perform multiple choices of the ‘-i’ and ‘-j’ values, and -choose the best results. This increases the running time by a factor of -iterations but does a good job minimizing the generated table size. - -
‘-i initial-value -
-
‘--initial-asso=initial-value -
-Provides an initial value for the associate values array. Default -is 0. Increasing the initial value helps inflate the final table size, -possibly leading to more time efficient keyword lookups. Note that this -option is not particularly useful when ‘-S’ (or, equivalently, -‘%switch’) is used. Also, -‘-i’ is overridden when the ‘-r’ option is used. - -
‘-j jump-value -
-
‘--jump=jump-value -
- -Affects the “jump value”, i.e., how far to advance the associated -byte value upon collisions. Jump-value is rounded up to an -odd number, the default is 5. If the jump-value is 0 gperf -jumps by random amounts. - -
‘-n’ -
-
‘--no-strlen’ -
-Instructs the generator not to include the length of a keyword when -computing its hash value. This may save a few assembly instructions in -the generated lookup table. - -
‘-r’ -
-
‘--random’ -
-Utilizes randomness to initialize the associated values table. This -frequently generates solutions faster than using deterministic -initialization (which starts all associated values at 0). Furthermore, -using the randomization option generally increases the size of the -table. - -
‘-s size-multiple -
-
‘--size-multiple=size-multiple -
-Affects the size of the generated hash table. The numeric argument for -this option indicates “how many times larger or smaller” the maximum -associated value range should be, in relationship to the number of keywords. -It can be written as an integer, a floating-point number or a fraction. -For example, a value of 3 means “allow the maximum associated value to be -about 3 times larger than the number of input keywords”. -Conversely, a value of 1/3 means “allow the maximum associated value to -be about 3 times smaller than the number of input keywords”. Values -smaller than 1 are useful for limiting the overall size of the generated hash -table, though the option ‘-m’ is better at this purpose. - -If `generate switch' option ‘-S’ (or, equivalently, ‘%switch’) is -not enabled, the maximum -associated value influences the static array table size, and a larger -table should decrease the time required for an unsuccessful search, at -the expense of extra table space. - -The default value is 1, thus the default maximum associated value about -the same size as the number of keywords (for efficiency, the maximum -associated value is always rounded up to a power of 2). The actual -table size may vary somewhat, since this technique is essentially a -heuristic. -
- - - -

5.6 Informative Output

- -
- -
‘-h’ -
-
‘--help’ -
-Prints a short summary on the meaning of each program option. Aborts -further program execution. - -
‘-v’ -
-
‘--version’ -
-Prints out the current version number. - -
‘-d’ -
-
‘--debug’ -
-Enables the debugging option. This produces verbose diagnostics to -“standard error” when gperf is executing. It is useful both for -maintaining the program and for determining whether a given set of -options is actually speeding up the search for a solution. Some useful -information is dumped at the end of the program when the ‘-d’ -option is enabled. -
- - - -

6 Known Bugs and Limitations with gperf

- -

-The following are some limitations with the current release of -gperf: - -

- -
    -
  • - -The gperf utility is tuned to execute quickly, and works quickly -for small to medium size data sets (around 1000 keywords). It is -extremely useful for maintaining perfect hash functions for compiler -keyword sets. Several recent enhancements now enable gperf to -work efficiently on much larger keyword sets (over 15,000 keywords). -When processing large keyword sets it helps greatly to have over 8 megs -of RAM. - -
  • - -The size of the generate static keyword array can get extremely -large if the input keyword file is large or if the keywords are quite -similar. This tends to slow down the compilation of the generated C -code, and greatly inflates the object code size. If this -situation occurs, consider using the ‘-S’ option to reduce data -size, potentially increasing keyword recognition time a negligible -amount. Since many C compilers cannot correctly generate code for -large switch statements it is important to qualify the -S option -with an appropriate numerical argument that controls the number of -switch statements generated. - -
  • - -The maximum number of selected byte positions has an -arbitrary limit of 255. This restriction should be removed, and if -anyone considers this a problem write me and let me know so I can remove -the constraint. -
- - - -

7 Things Still Left to Do

- -

-It should be “relatively” easy to replace the current perfect hash -function algorithm with a more exhaustive approach; the perfect hash -module is essential independent from other program modules. Additional -worthwhile improvements include: - -

- -
    -
  • - -Another useful extension involves modifying the program to generate -“minimal” perfect hash functions (under certain circumstances, the -current version can be rather extravagant in the generated table size). -This is mostly of theoretical interest, since a sparse table -often produces faster lookups, and use of the ‘-S’ switch -option can minimize the data size, at the expense of slightly longer -lookups (note that the gcc compiler generally produces good code for -switch statements, reducing the need for more complex schemes). - -
  • - -In addition to improving the algorithm, it would also be useful to -generate an Ada package as the code output, in addition to the current -C and C++ routines. -
- - - -

8 Bibliography

- -

-[1] Chang, C.C.: A Scheme for Constructing Ordered Minimal Perfect -Hashing Functions Information Sciences 39(1986), 187-195. - -

-

-[2] Cichelli, Richard J. Author's Response to “On Cichelli's Minimal Perfect Hash -Functions Method” Communications of the ACM, 23, 12(December 1980), 729. - -

-

-[3] Cichelli, Richard J. Minimal Perfect Hash Functions Made Simple -Communications of the ACM, 23, 1(January 1980), 17-19. - -

-

-[4] Cook, C. R. and Oldehoeft, R.R. A Letter Oriented Minimal -Perfect Hashing Function SIGPLAN Notices, 17, 9(September 1982), 18-27. - -

-

-[5] Cormack, G. V. and Horspool, R. N. S. and Kaiserwerth, M. -Practical Perfect Hashing Computer Journal, 28, 1(January 1985), 54-58. - -

-

-[6] Jaeschke, G. Reciprocal Hashing: A Method for Generating Minimal -Perfect Hashing Functions Communications of the ACM, 24, 12(December -1981), 829-833. - -

-

-[7] Jaeschke, G. and Osterburg, G. On Cichelli's Minimal Perfect -Hash Functions Method Communications of the ACM, 23, 12(December 1980), -728-729. - -

-

-[8] Sager, Thomas J. A Polynomial Time Generator for Minimal Perfect -Hash Functions Communications of the ACM, 28, 5(December 1985), 523-532 - -

-

-[9] Schmidt, Douglas C. GPERF: A Perfect Hash Function Generator -Second USENIX C++ Conference Proceedings, April 1990. - -

-

-[10] Schmidt, Douglas C. GPERF: A Perfect Hash Function Generator -C++ Report, SIGS 10 10 (November/December 1998). - -

-

-[11] Sebesta, R.W. and Taylor, M.A. Minimal Perfect Hash Functions -for Reserved Word Lists SIGPLAN Notices, 20, 12(September 1985), 47-53. - -

-

-[12] Sprugnoli, R. Perfect Hashing Functions: A Single Probe -Retrieving Method for Static Sets Communications of the ACM, 20 -11(November 1977), 841-850. - -

-

-[13] Stallman, Richard M. Using and Porting GNU CC Free Software Foundation, -1988. - -

-

-[14] Stroustrup, Bjarne The C++ Programming Language. Addison-Wesley, 1986. - -

-

-[15] Tiemann, Michael D. User's Guide to GNU C++ Free Software -Foundation, 1989. - -

- - -

Concept Index

- -

-Jump to: -& -- -a -- -b -- -c -- -d -- -f -- -h -- -i -- -j -- -k -- -m -- -n -- -s -

-

&

- -
  • ‘%%’ -
  • ‘%7bit’ -
  • ‘%compare-lengths’ -
  • ‘%compare-strncmp’ -
  • ‘%define class-name’ -
  • ‘%define hash-function-name’ -
  • ‘%define initializer-suffix’ -
  • ‘%define length-table-name’ -
  • ‘%define lookup-function-name’ -
  • ‘%define slot-name’ -
  • ‘%define string-pool-name’ -
  • ‘%define word-array-name’ -
  • ‘%delimiters’ -
  • ‘%enum’ -
  • ‘%global-table’ -
  • ‘%ignore-case’ -
  • ‘%includes’ -
  • ‘%language’ -
  • ‘%null-strings’ -
  • ‘%omit-struct-type’ -
  • ‘%pic’ -
  • ‘%readonly-tables’ -
  • ‘%struct-type’ -
  • ‘%switch’ -
  • ‘%{’ -
  • ‘%}’ -
  • -

    a

    - -
  • Array name, Array name -
  • -

    b

    - -
  • Bugs -
  • -

    c

    - -
  • Class name -
  • Copyright -
  • -

    d

    - -
  • Declaration section -
  • Delimiters -
  • Duplicates -
  • -

    f

    - -
  • Format -
  • Functions section -
  • -

    h

    - -
  • hash -
  • hash table -
  • -

    i

    - -
  • in_word_set -
  • Initializers -
  • -

    j

    - -
  • Jump value -
  • -

    k

    - -
  • Keywords section -
  • -

    m

    - -
  • Minimal perfect hash functions -
  • -

    n

    - -
  • NUL -
  • -

    s

    - -
  • Slot name -
  • Static search structure -
  • switch, switch -
  • - -

    - -


    -This document was generated on 20 December 2009 using the -texi2html -translator version 1.52b.

    - - diff --git a/doc/gperf.info b/doc/gperf.info deleted file mode 100644 index 8353e43..0000000 --- a/doc/gperf.info +++ /dev/null @@ -1,2096 +0,0 @@ -This is gperf.info, produced by makeinfo version 4.13 from gperf.texi. - -INFO-DIR-SECTION Programming Tools -START-INFO-DIR-ENTRY -* Gperf: (gperf). Perfect Hash Function Generator. -END-INFO-DIR-ENTRY - - This file documents the features of the GNU Perfect Hash Function -Generator 3.1. - - Copyright (C) 1989-2009 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided also -that the section entitled "GNU General Public License" is included -exactly as in the original, and provided that the entire resulting -derived work is distributed under the terms of a permission notice -identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that the section entitled "GNU General Public License" -and this permission notice may be included in translations approved by -the Free Software Foundation instead of in the original English. - - -File: gperf.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir) - -Introduction -************ - - This manual documents the GNU `gperf' perfect hash function generator -utility, focusing on its features and how to use them, and how to report -bugs. - -* Menu: - -* Copying:: GNU General Public License says how you can - copy and share `gperf'. -* Contributors:: People who have contributed to `gperf'. -* Motivation:: The purpose of `gperf'. -* Search Structures:: Static search structures and GNU `gperf' -* Description:: High-level discussion of how GPERF functions. -* Options:: A description of options to the program. -* Bugs:: Known bugs and limitations with GPERF. -* Projects:: Things still left to do. -* Bibliography:: Material Referenced in this Report. - -* Concept Index:: - - -High-Level Description of GNU `gperf' - -* Input Format:: Input Format to `gperf' -* Output Format:: Output Format for Generated C Code with `gperf' -* Binary Strings:: Use of NUL bytes -* Output Copyright:: The Copyright of the Output. - -Input Format to `gperf' - -* Declarations:: Declarations. -* Keywords:: Format for Keyword Entries. -* Functions:: Including Additional C Functions. -* Controls for GNU indent:: Where to place directives for GNU `indent'. - -Declarations - -* User-supplied Struct:: Specifying keywords with attributes. -* Gperf Declarations:: Embedding command line options in the input. -* C Code Inclusion:: Including C declarations and definitions. - -Invoking `gperf' - -* Input Details:: Options that affect Interpretation of the Input File -* Output Language:: Specifying the Language for the Output Code -* Output Details:: Fine tuning Details in the Output Code -* Algorithmic Details:: Changing the Algorithms employed by `gperf' -* Verbosity:: Informative Output - - -File: gperf.info, Node: Copying, Next: Contributors, Prev: Top, Up: Top - -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'. - - -File: gperf.info, Node: Contributors, Next: Motivation, Prev: Copying, Up: Top - -Contributors to GNU `gperf' Utility -*********************************** - - * The GNU `gperf' perfect hash function generator utility was - written in GNU C++ by Douglas C. Schmidt. The general idea for - the perfect hash function generator was inspired by Keith Bostic's - algorithm written in C, and distributed to net.sources around - 1984. The current program is a heavily modified, enhanced, and - extended implementation of Keith's basic idea, created at the - University of California, Irvine. Bugs, patches, and suggestions - should be reported to `'. - - * Special thanks is extended to Michael Tiemann and Doug Lea, for - providing a useful compiler, and for giving me a forum to exhibit - my creation. - - In addition, Adam de Boor and Nels Olson provided many tips and - insights that greatly helped improve the quality and functionality - of `gperf'. - - * Bruno Haible enhanced and optimized the search algorithm. He also - rewrote the input routines and the output routines for better - reliability, and added a testsuite. - - -File: gperf.info, Node: Motivation, Next: Search Structures, Prev: Contributors, Up: Top - -1 Introduction -************** - - `gperf' is a perfect hash function generator written in C++. It -transforms an N element user-specified keyword set W into a perfect -hash function F. F uniquely maps keywords in W onto the range 0..K, -where K >= N-1. If K = N-1 then F is a _minimal_ perfect hash function. -`gperf' generates a 0..K element static lookup table and a pair of C -functions. These functions determine whether a given character string -S occurs in W, using at most one probe into the lookup table. - - `gperf' currently generates the reserved keyword recognizer for -lexical analyzers in several production and research compilers and -language processing tools, including GNU C, GNU C++, GNU Java, GNU -Pascal, GNU Modula 3, and GNU indent. Complete C++ source code for -`gperf' is available from `http://ftp.gnu.org/pub/gnu/gperf/'. A paper -describing `gperf''s design and implementation in greater detail is -available in the Second USENIX C++ Conference proceedings or from -`http://www.cs.wustl.edu/~schmidt/resume.html'. - - -File: gperf.info, Node: Search Structures, Next: Description, Prev: Motivation, Up: Top - -2 Static search structures and GNU `gperf' -****************************************** - - A "static search structure" is an Abstract Data Type with certain -fundamental operations, e.g., _initialize_, _insert_, and _retrieve_. -Conceptually, all insertions occur before any retrievals. In practice, -`gperf' generates a _static_ array containing search set keywords and -any associated attributes specified by the user. Thus, there is -essentially no execution-time cost for the insertions. It is a useful -data structure for representing _static search sets_. Static search -sets occur frequently in software system applications. Typical static -search sets include compiler reserved words, assembler instruction -opcodes, and built-in shell interpreter commands. Search set members, -called "keywords", are inserted into the structure only once, usually -during program initialization, and are not generally modified at -run-time. - - Numerous static search structure implementations exist, e.g., -arrays, linked lists, binary search trees, digital search tries, and -hash tables. Different approaches offer trade-offs between space -utilization and search time efficiency. For example, an N element -sorted array is space efficient, though the average-case time -complexity for retrieval operations using binary search is proportional -to log N. Conversely, hash table implementations often locate a table -entry in constant time, but typically impose additional memory overhead -and exhibit poor worst case performance. - - _Minimal perfect hash functions_ provide an optimal solution for a -particular class of static search sets. A minimal perfect hash -function is defined by two properties: - - * It allows keyword recognition in a static search set using at most - _one_ probe into the hash table. This represents the "perfect" - property. - - * The actual memory allocated to store the keywords is precisely - large enough for the keyword set, and _no larger_. This is the - "minimal" property. - - For most applications it is far easier to generate _perfect_ hash -functions than _minimal perfect_ hash functions. Moreover, non-minimal -perfect hash functions frequently execute faster than minimal ones in -practice. This phenomena occurs since searching a sparse keyword table -increases the probability of locating a "null" entry, thereby reducing -string comparisons. `gperf''s default behavior generates -_near-minimal_ perfect hash functions for keyword sets. However, -`gperf' provides many options that permit user control over the degree -of minimality and perfection. - - Static search sets often exhibit relative stability over time. For -example, Ada's 63 reserved words have remained constant for nearly a -decade. It is therefore frequently worthwhile to expend concerted -effort building an optimal search structure _once_, if it subsequently -receives heavy use multiple times. `gperf' removes the drudgery -associated with constructing time- and space-efficient search -structures by hand. It has proven a useful and practical tool for -serious programming projects. Output from `gperf' is currently used in -several production and research compilers, including GNU C, GNU C++, -GNU Java, GNU Pascal, and GNU Modula 3. The latter two compilers are -not yet part of the official GNU distribution. Each compiler utilizes -`gperf' to automatically generate static search structures that -efficiently identify their respective reserved keywords. - - -File: gperf.info, Node: Description, Next: Options, Prev: Search Structures, Up: Top - -3 High-Level Description of GNU `gperf' -*************************************** - -* Menu: - -* Input Format:: Input Format to `gperf' -* Output Format:: Output Format for Generated C Code with `gperf' -* Binary Strings:: Use of NUL bytes -* Output Copyright:: The Copyright of the Output. - - The perfect hash function generator `gperf' reads a set of -"keywords" from an input file (or from the standard input by default). -It attempts to derive a perfect hashing function that recognizes a -member of the "static keyword set" with at most a single probe into the -lookup table. If `gperf' succeeds in generating such a function it -produces a pair of C source code routines that perform hashing and -table lookup recognition. All generated C code is directed to the -standard output. Command-line options described below allow you to -modify the input and output format to `gperf'. - - By default, `gperf' attempts to produce time-efficient code, with -less emphasis on efficient space utilization. However, several options -exist that permit trading-off execution time for storage space and vice -versa. In particular, expanding the generated table size produces a -sparse search structure, generally yielding faster searches. -Conversely, you can direct `gperf' to utilize a C `switch' statement -scheme that minimizes data space storage size. Furthermore, using a C -`switch' may actually speed up the keyword retrieval time somewhat. -Actual results depend on your C compiler, of course. - - In general, `gperf' assigns values to the bytes it is using for -hashing until some set of values gives each keyword a unique value. A -helpful heuristic is that the larger the hash value range, the easier -it is for `gperf' to find and generate a perfect hash function. -Experimentation is the key to getting the most from `gperf'. - - -File: gperf.info, Node: Input Format, Next: Output Format, Prev: Description, Up: Description - -3.1 Input Format to `gperf' -=========================== - - You can control the input file format by varying certain command-line -arguments, in particular the `-t' option. The input's appearance is -similar to GNU utilities `flex' and `bison' (or UNIX utilities `lex' -and `yacc'). Here's an outline of the general format: - - declarations - %% - keywords - %% - functions - - _Unlike_ `flex' or `bison', the declarations section and the -functions section are optional. The following sections describe the -input format for each section. - -* Menu: - -* Declarations:: Declarations. -* Keywords:: Format for Keyword Entries. -* Functions:: Including Additional C Functions. -* Controls for GNU indent:: Where to place directives for GNU `indent'. - - It is possible to omit the declaration section entirely, if the `-t' -option is not given. In this case the input file begins directly with -the first keyword line, e.g.: - - january - february - march - april - ... - - -File: gperf.info, Node: Declarations, Next: Keywords, Prev: Input Format, Up: Input Format - -3.1.1 Declarations ------------------- - - The keyword input file optionally contains a section for including -arbitrary C declarations and definitions, `gperf' declarations that act -like command-line options, as well as for providing a user-supplied -`struct'. - -* Menu: - -* User-supplied Struct:: Specifying keywords with attributes. -* Gperf Declarations:: Embedding command line options in the input. -* C Code Inclusion:: Including C declarations and definitions. - - -File: gperf.info, Node: User-supplied Struct, Next: Gperf Declarations, Prev: Declarations, Up: Declarations - -3.1.1.1 User-supplied `struct' -.............................. - - If the `-t' option (or, equivalently, the `%struct-type' declaration) -_is_ enabled, you _must_ provide a C `struct' as the last component in -the declaration section from the input file. The first field in this -struct must be of type `char *' or `const char *' if the `-P' option is -not given, or of type `int' if the option `-P' (or, equivalently, the -`%pic' declaration) is enabled. This first field must be called -`name', although it is possible to modify its name with the `-K' option -(or, equivalently, the `%define slot-name' declaration) described below. - - Here is a simple example, using months of the year and their -attributes as input: - - struct month { char *name; int number; int days; int leap_days; }; - %% - january, 1, 31, 31 - february, 2, 28, 29 - march, 3, 31, 31 - april, 4, 30, 30 - may, 5, 31, 31 - june, 6, 30, 30 - july, 7, 31, 31 - august, 8, 31, 31 - september, 9, 30, 30 - october, 10, 31, 31 - november, 11, 30, 30 - december, 12, 31, 31 - - Separating the `struct' declaration from the list of keywords and -other fields are a pair of consecutive percent signs, `%%', appearing -left justified in the first column, as in the UNIX utility `lex'. - - If the `struct' has already been declared in an include file, it can -be mentioned in an abbreviated form, like this: - - struct month; - %% - january, 1, 31, 31 - ... - - -File: gperf.info, Node: Gperf Declarations, Next: C Code Inclusion, Prev: User-supplied Struct, Up: Declarations - -3.1.1.2 Gperf Declarations -.......................... - - The declaration section can contain `gperf' declarations. They -influence the way `gperf' works, like command line options do. In -fact, every such declaration is equivalent to a command line option. -There are three forms of declarations: - - 1. Declarations without argument, like `%compare-lengths'. - - 2. Declarations with an argument, like `%switch=COUNT'. - - 3. Declarations of names of entities in the output file, like - `%define lookup-function-name NAME'. - - When a declaration is given both in the input file and as a command -line option, the command-line option's value prevails. - - The following `gperf' declarations are available. - -`%delimiters=DELIMITER-LIST' - Allows you to provide a string containing delimiters used to - separate keywords from their attributes. The default is ",". This - option is essential if you want to use keywords that have embedded - commas or newlines. - -`%struct-type' - Allows you to include a `struct' type declaration for generated - code; see above for an example. - -`%ignore-case' - Consider upper and lower case ASCII characters as equivalent. The - string comparison will use a case insignificant character - comparison. Note that locale dependent case mappings are ignored. - -`%language=LANGUAGE-NAME' - Instructs `gperf' to generate code in the language specified by the - option's argument. Languages handled are currently: - - `KR-C' - Old-style K&R C. This language is understood by old-style C - compilers and ANSI C compilers, but ANSI C compilers may flag - warnings (or even errors) because of lacking `const'. - - `C' - Common C. This language is understood by ANSI C compilers, - and also by old-style C compilers, provided that you `#define - const' to empty for compilers which don't know about this - keyword. - - `ANSI-C' - ANSI C. This language is understood by ANSI C (C89, ISO C90) - compilers, ISO C99 compilers, and C++ compilers. - - `C++' - C++. This language is understood by C++ compilers. - - The default is ANSI-C. - -`%define slot-name NAME' - This declaration is only useful when option `-t' (or, - equivalently, the `%struct-type' declaration) has been given. By - default, the program assumes the structure component identifier for - the keyword is `name'. This option allows an arbitrary choice of - identifier for this component, although it still must occur as the - first field in your supplied `struct'. - -`%define initializer-suffix INITIALIZERS' - This declaration is only useful when option `-t' (or, - equivalently, the `%struct-type' declaration) has been given. It - permits to specify initializers for the structure members following - SLOT-NAME in empty hash table entries. The list of initializers - should start with a comma. By default, the emitted code will - zero-initialize structure members following SLOT-NAME. - -`%define hash-function-name NAME' - Allows you to specify the name for the generated hash function. - Default name is `hash'. This option permits the use of two hash - tables in the same file. - -`%define lookup-function-name NAME' - Allows you to specify the name for the generated lookup function. - Default name is `in_word_set'. This option permits multiple - generated hash functions to be used in the same application. - -`%define class-name NAME' - This option is only useful when option `-L C++' (or, equivalently, - the `%language=C++' declaration) has been given. It allows you to - specify the name of generated C++ class. Default name is - `Perfect_Hash'. - -`%7bit' - This option specifies that all strings that will be passed as - arguments to the generated hash function and the generated lookup - function will solely consist of 7-bit ASCII characters (bytes in - the range 0..127). (Note that the ANSI C functions `isalnum' and - `isgraph' do _not_ guarantee that a byte is in this range. Only - an explicit test like `c >= 'A' && c <= 'Z'' guarantees this.) - -`%compare-lengths' - Compare keyword lengths before trying a string comparison. This - option is mandatory for binary comparisons (*note Binary - Strings::). It also might cut down on the number of string - comparisons made during the lookup, since keywords with different - lengths are never compared via `strcmp'. However, using - `%compare-lengths' might greatly increase the size of the - generated C code if the lookup table range is large (which implies - that the switch option `-S' or `%switch' is not enabled), since - the length table contains as many elements as there are entries in - the lookup table. - -`%compare-strncmp' - Generates C code that uses the `strncmp' function to perform - string comparisons. The default action is to use `strcmp'. - -`%readonly-tables' - Makes the contents of all generated lookup tables constant, i.e., - "readonly". Many compilers can generate more efficient code for - this by putting the tables in readonly memory. - -`%enum' - Define constant values using an enum local to the lookup function - rather than with #defines. This also means that different lookup - functions can reside in the same file. Thanks to James Clark - `'. - -`%includes' - Include the necessary system include file, `', at the - beginning of the code. By default, this is not done; the user must - include this header file himself to allow compilation of the code. - -`%global-table' - Generate the static table of keywords as a static global variable, - rather than hiding it inside of the lookup function (which is the - default behavior). - -`%pic' - Optimize the generated table for inclusion in shared libraries. - This reduces the startup time of programs using a shared library - containing the generated code. If the `%struct-type' declaration - (or, equivalently, the option `-t') is also given, the first field - of the user-defined struct must be of type `int', not `char *', - because it will contain offsets into the string pool instead of - actual strings. To convert such an offset to a string, you can - use the expression `stringpool + O', where O is the offset. The - string pool name can be changed through the `%define - string-pool-name' declaration. - -`%define string-pool-name NAME' - Allows you to specify the name of the generated string pool - created by the declaration `%pic' (or, equivalently, the option - `-P'). The default name is `stringpool'. This declaration - permits the use of two hash tables in the same file, with `%pic' - and even when the `%global-table' declaration (or, equivalently, - the option `-G') is given. - -`%null-strings' - Use NULL strings instead of empty strings for empty keyword table - entries. This reduces the startup time of programs using a shared - library containing the generated code (but not as much as the - declaration `%pic'), at the expense of one more test-and-branch - instruction at run time. - -`%define word-array-name NAME' - Allows you to specify the name for the generated array containing - the hash table. Default name is `wordlist'. This option permits - the use of two hash tables in the same file, even when the option - `-G' (or, equivalently, the `%global-table' declaration) is given. - -`%define length-table-name NAME' - Allows you to specify the name for the generated array containing - the length table. Default name is `lengthtable'. This option - permits the use of two length tables in the same file, even when - the option `-G' (or, equivalently, the `%global-table' - declaration) is given. - -`%switch=COUNT' - Causes the generated C code to use a `switch' statement scheme, - rather than an array lookup table. This can lead to a reduction - in both time and space requirements for some input files. The - argument to this option determines how many `switch' statements - are generated. A value of 1 generates 1 `switch' containing all - the elements, a value of 2 generates 2 tables with 1/2 the - elements in each `switch', etc. This is useful since many C - compilers cannot correctly generate code for large `switch' - statements. This option was inspired in part by Keith Bostic's - original C program. - -`%omit-struct-type' - Prevents the transfer of the type declaration to the output file. - Use this option if the type is already defined elsewhere. - - -File: gperf.info, Node: C Code Inclusion, Prev: Gperf Declarations, Up: Declarations - -3.1.1.3 C Code Inclusion -........................ - - Using a syntax similar to GNU utilities `flex' and `bison', it is -possible to directly include C source text and comments verbatim into -the generated output file. This is accomplished by enclosing the region -inside left-justified surrounding `%{', `%}' pairs. Here is an input -fragment based on the previous example that illustrates this feature: - - %{ - #include - /* This section of code is inserted directly into the output. */ - int return_month_days (struct month *months, int is_leap_year); - %} - struct month { char *name; int number; int days; int leap_days; }; - %% - january, 1, 31, 31 - february, 2, 28, 29 - march, 3, 31, 31 - ... - - -File: gperf.info, Node: Keywords, Next: Functions, Prev: Declarations, Up: Input Format - -3.1.2 Format for Keyword Entries --------------------------------- - - The second input file format section contains lines of keywords and -any associated attributes you might supply. A line beginning with `#' -in the first column is considered a comment. Everything following the -`#' is ignored, up to and including the following newline. A line -beginning with `%' in the first column is an option declaration and -must not occur within the keywords section. - - The first field of each non-comment line is always the keyword -itself. It can be given in two ways: as a simple name, i.e., without -surrounding string quotation marks, or as a string enclosed in -double-quotes, in C syntax, possibly with backslash escapes like `\"' -or `\234' or `\xa8'. In either case, it must start right at the -beginning of the line, without leading whitespace. In this context, a -"field" is considered to extend up to, but not include, the first -blank, comma, or newline. Here is a simple example taken from a -partial list of C reserved words: - - # These are a few C reserved words, see the c.gperf file - # for a complete list of ANSI C reserved words. - unsigned - sizeof - switch - signed - if - default - for - while - return - - Note that unlike `flex' or `bison' the first `%%' marker may be -elided if the declaration section is empty. - - Additional fields may optionally follow the leading keyword. Fields -should be separated by commas, and terminate at the end of line. What -these fields mean is entirely up to you; they are used to initialize the -elements of the user-defined `struct' provided by you in the -declaration section. If the `-t' option (or, equivalently, the -`%struct-type' declaration) is _not_ enabled these fields are simply -ignored. All previous examples except the last one contain keyword -attributes. - - -File: gperf.info, Node: Functions, Next: Controls for GNU indent, Prev: Keywords, Up: Input Format - -3.1.3 Including Additional C Functions --------------------------------------- - - The optional third section also corresponds closely with conventions -found in `flex' and `bison'. All text in this section, starting at the -final `%%' and extending to the end of the input file, is included -verbatim into the generated output file. Naturally, it is your -responsibility to ensure that the code contained in this section is -valid C. - - -File: gperf.info, Node: Controls for GNU indent, Prev: Functions, Up: Input Format - -3.1.4 Where to place directives for GNU `indent'. -------------------------------------------------- - - If you want to invoke GNU `indent' on a `gperf' input file, you will -see that GNU `indent' doesn't understand the `%%', `%{' and `%}' -directives that control `gperf''s interpretation of the input file. -Therefore you have to insert some directives for GNU `indent'. More -precisely, assuming the most general input file structure - - declarations part 1 - %{ - verbatim code - %} - declarations part 2 - %% - keywords - %% - functions - -you would insert `*INDENT-OFF*' and `*INDENT-ON*' comments as follows: - - /* *INDENT-OFF* */ - declarations part 1 - %{ - /* *INDENT-ON* */ - verbatim code - /* *INDENT-OFF* */ - %} - declarations part 2 - %% - keywords - %% - /* *INDENT-ON* */ - functions - - -File: gperf.info, Node: Output Format, Next: Binary Strings, Prev: Input Format, Up: Description - -3.2 Output Format for Generated C Code with `gperf' -=================================================== - - Several options control how the generated C code appears on the -standard output. Two C functions are generated. They are called -`hash' and `in_word_set', although you may modify their names with a -command-line option. Both functions require two arguments, a string, -`char *' STR, and a length parameter, `int' LEN. Their default -function prototypes are as follows: - - -- Function: unsigned int hash (const char * STR, unsigned int LEN) - By default, the generated `hash' function returns an integer value - created by adding LEN to several user-specified STR byte positions - indexed into an "associated values" table stored in a local static - array. The associated values table is constructed internally by - `gperf' and later output as a static local C array called - `hash_table'. The relevant selected positions (i.e. indices into - STR) are specified via the `-k' option when running `gperf', as - detailed in the _Options_ section below (*note Options::). - - -- Function: in_word_set (const char * STR, unsigned int LEN) - If STR is in the keyword set, returns a pointer to that keyword. - More exactly, if the option `-t' (or, equivalently, the - `%struct-type' declaration) was given, it returns a pointer to the - matching keyword's structure. Otherwise it returns `NULL'. - - If the option `-c' (or, equivalently, the `%compare-strncmp' -declaration) is not used, STR must be a NUL terminated string of -exactly length LEN. If `-c' (or, equivalently, the `%compare-strncmp' -declaration) is used, STR must simply be an array of LEN bytes and does -not need to be NUL terminated. - - The code generated for these two functions is affected by the -following options: - -`-t' -`--struct-type' - Make use of the user-defined `struct'. - -`-S TOTAL-SWITCH-STATEMENTS' -`--switch=TOTAL-SWITCH-STATEMENTS' - Generate 1 or more C `switch' statement rather than use a large, - (and potentially sparse) static array. Although the exact time and - space savings of this approach vary according to your C compiler's - degree of optimization, this method often results in smaller and - faster code. - - If the `-t' and `-S' options (or, equivalently, the `%struct-type' -and `%switch' declarations) are omitted, the default action is to -generate a `char *' array containing the keywords, together with -additional empty strings used for padding the array. By experimenting -with the various input and output options, and timing the resulting C -code, you can determine the best option choices for different keyword -set characteristics. - - -File: gperf.info, Node: Binary Strings, Next: Output Copyright, Prev: Output Format, Up: Description - -3.3 Use of NUL bytes -==================== - - By default, the code generated by `gperf' operates on zero -terminated strings, the usual representation of strings in C. This -means that the keywords in the input file must not contain NUL bytes, -and the STR argument passed to `hash' or `in_word_set' must be NUL -terminated and have exactly length LEN. - - If option `-c' (or, equivalently, the `%compare-strncmp' -declaration) is used, then the STR argument does not need to be NUL -terminated. The code generated by `gperf' will only access the first -LEN, not LEN+1, bytes starting at STR. However, the keywords in the -input file still must not contain NUL bytes. - - If option `-l' (or, equivalently, the `%compare-lengths' -declaration) is used, then the hash table performs binary comparison. -The keywords in the input file may contain NUL bytes, written in string -syntax as `\000' or `\x00', and the code generated by `gperf' will -treat NUL like any other byte. Also, in this case the `-c' option (or, -equivalently, the `%compare-strncmp' declaration) is ignored. - - -File: gperf.info, Node: Output Copyright, Prev: Binary Strings, Up: Description - -3.4 The Copyright of the Output -=============================== - - `gperf' is under GPL, but that does not cause the output produced by -`gperf' to be under GPL. The reason is that the output contains only -small pieces of text that come directly from `gperf''s source code - -only about 7 lines long, too small for being significant -, and -therefore the output is not a "work based on `gperf'" (in the sense of -the GPL version 3). - - On the other hand, the output produced by `gperf' contains -essentially all of the input file. Therefore the output is a -"derivative work" of the input (in the sense of U.S. copyright law); -and its copyright status depends on the copyright of the input. For -most software licenses, the result is that the the output is under the -same license, with the same copyright holder, as the input that was -passed to `gperf'. - - -File: gperf.info, Node: Options, Next: Bugs, Prev: Description, Up: Top - -4 Invoking `gperf' -****************** - - There are _many_ options to `gperf'. They were added to make the -program more convenient for use with real applications. "On-line" help -is readily available via the `--help' option. Here is the complete -list of options. - -* Menu: - -* Output File:: Specifying the Location of the Output File -* Input Details:: Options that affect Interpretation of the Input File -* Output Language:: Specifying the Language for the Output Code -* Output Details:: Fine tuning Details in the Output Code -* Algorithmic Details:: Changing the Algorithms employed by `gperf' -* Verbosity:: Informative Output - - -File: gperf.info, Node: Output File, Next: Input Details, Prev: Options, Up: Options - -4.1 Specifying the Location of the Output File -============================================== - -`--output-file=FILE' - Allows you to specify the name of the file to which the output is - written to. - - The results are written to standard output if no output file is -specified or if it is `-'. - - -File: gperf.info, Node: Input Details, Next: Output Language, Prev: Output File, Up: Options - -4.2 Options that affect Interpretation of the Input File -======================================================== - - These options are also available as declarations in the input file -(*note Gperf Declarations::). - -`-e KEYWORD-DELIMITER-LIST' -`--delimiters=KEYWORD-DELIMITER-LIST' - Allows you to provide a string containing delimiters used to - separate keywords from their attributes. The default is ",". This - option is essential if you want to use keywords that have embedded - commas or newlines. One useful trick is to use -e'TAB', where TAB - is the literal tab character. - -`-t' -`--struct-type' - Allows you to include a `struct' type declaration for generated - code. Any text before a pair of consecutive `%%' is considered - part of the type declaration. Keywords and additional fields may - follow this, one group of fields per line. A set of examples for - generating perfect hash tables and functions for Ada, C, C++, - Pascal, Modula 2, Modula 3 and JavaScript reserved words are - distributed with this release. - -`--ignore-case' - Consider upper and lower case ASCII characters as equivalent. The - string comparison will use a case insignificant character - comparison. Note that locale dependent case mappings are ignored. - This option is therefore not suitable if a properly - internationalized or locale aware case mapping should be used. - (For example, in a Turkish locale, the upper case equivalent of - the lowercase ASCII letter `i' is the non-ASCII character `capital - i with dot above'.) For this case, it is better to apply an - uppercase or lowercase conversion on the string before passing it - to the `gperf' generated function. - - -File: gperf.info, Node: Output Language, Next: Output Details, Prev: Input Details, Up: Options - -4.3 Options to specify the Language for the Output Code -======================================================= - - These options are also available as declarations in the input file -(*note Gperf Declarations::). - -`-L GENERATED-LANGUAGE-NAME' -`--language=GENERATED-LANGUAGE-NAME' - Instructs `gperf' to generate code in the language specified by the - option's argument. Languages handled are currently: - - `KR-C' - Old-style K&R C. This language is understood by old-style C - compilers and ANSI C compilers, but ANSI C compilers may flag - warnings (or even errors) because of lacking `const'. - - `C' - Common C. This language is understood by ANSI C compilers, - and also by old-style C compilers, provided that you `#define - const' to empty for compilers which don't know about this - keyword. - - `ANSI-C' - ANSI C. This language is understood by ANSI C compilers and - C++ compilers. - - `C++' - C++. This language is understood by C++ compilers. - - The default is ANSI-C. - -`-a' - This option is supported for compatibility with previous releases - of `gperf'. It does not do anything. - -`-g' - This option is supported for compatibility with previous releases - of `gperf'. It does not do anything. - - -File: gperf.info, Node: Output Details, Next: Algorithmic Details, Prev: Output Language, Up: Options - -4.4 Options for fine tuning Details in the Output Code -====================================================== - - Most of these options are also available as declarations in the -input file (*note Gperf Declarations::). - -`-K SLOT-NAME' -`--slot-name=SLOT-NAME' - This option is only useful when option `-t' (or, equivalently, the - `%struct-type' declaration) has been given. By default, the - program assumes the structure component identifier for the keyword - is `name'. This option allows an arbitrary choice of identifier - for this component, although it still must occur as the first - field in your supplied `struct'. - -`-F INITIALIZERS' -`--initializer-suffix=INITIALIZERS' - This option is only useful when option `-t' (or, equivalently, the - `%struct-type' declaration) has been given. It permits to specify - initializers for the structure members following SLOT-NAME in - empty hash table entries. The list of initializers should start - with a comma. By default, the emitted code will zero-initialize - structure members following SLOT-NAME. - -`-H HASH-FUNCTION-NAME' -`--hash-function-name=HASH-FUNCTION-NAME' - Allows you to specify the name for the generated hash function. - Default name is `hash'. This option permits the use of two hash - tables in the same file. - -`-N LOOKUP-FUNCTION-NAME' -`--lookup-function-name=LOOKUP-FUNCTION-NAME' - Allows you to specify the name for the generated lookup function. - Default name is `in_word_set'. This option permits multiple - generated hash functions to be used in the same application. - -`-Z CLASS-NAME' -`--class-name=CLASS-NAME' - This option is only useful when option `-L C++' (or, equivalently, - the `%language=C++' declaration) has been given. It allows you to - specify the name of generated C++ class. Default name is - `Perfect_Hash'. - -`-7' -`--seven-bit' - This option specifies that all strings that will be passed as - arguments to the generated hash function and the generated lookup - function will solely consist of 7-bit ASCII characters (bytes in - the range 0..127). (Note that the ANSI C functions `isalnum' and - `isgraph' do _not_ guarantee that a byte is in this range. Only - an explicit test like `c >= 'A' && c <= 'Z'' guarantees this.) - This was the default in versions of `gperf' earlier than 2.7; now - the default is to support 8-bit and multibyte characters. - -`-l' -`--compare-lengths' - Compare keyword lengths before trying a string comparison. This - option is mandatory for binary comparisons (*note Binary - Strings::). It also might cut down on the number of string - comparisons made during the lookup, since keywords with different - lengths are never compared via `strcmp'. However, using `-l' - might greatly increase the size of the generated C code if the - lookup table range is large (which implies that the switch option - `-S' or `%switch' is not enabled), since the length table contains - as many elements as there are entries in the lookup table. - -`-c' -`--compare-strncmp' - Generates C code that uses the `strncmp' function to perform - string comparisons. The default action is to use `strcmp'. - -`-C' -`--readonly-tables' - Makes the contents of all generated lookup tables constant, i.e., - "readonly". Many compilers can generate more efficient code for - this by putting the tables in readonly memory. - -`-E' -`--enum' - Define constant values using an enum local to the lookup function - rather than with #defines. This also means that different lookup - functions can reside in the same file. Thanks to James Clark - `'. - -`-I' -`--includes' - Include the necessary system include file, `', at the - beginning of the code. By default, this is not done; the user must - include this header file himself to allow compilation of the code. - -`-G' -`--global-table' - Generate the static table of keywords as a static global variable, - rather than hiding it inside of the lookup function (which is the - default behavior). - -`-P' -`--pic' - Optimize the generated table for inclusion in shared libraries. - This reduces the startup time of programs using a shared library - containing the generated code. If the option `-t' (or, - equivalently, the `%struct-type' declaration) is also given, the - first field of the user-defined struct must be of type `int', not - `char *', because it will contain offsets into the string pool - instead of actual strings. To convert such an offset to a string, - you can use the expression `stringpool + O', where O is the - offset. The string pool name can be changed through the option - `--string-pool-name'. - -`-Q STRING-POOL-NAME' -`--string-pool-name=STRING-POOL-NAME' - Allows you to specify the name of the generated string pool - created by option `-P'. The default name is `stringpool'. This - option permits the use of two hash tables in the same file, with - `-P' and even when the option `-G' (or, equivalently, the - `%global-table' declaration) is given. - -`--null-strings' - Use NULL strings instead of empty strings for empty keyword table - entries. This reduces the startup time of programs using a shared - library containing the generated code (but not as much as option - `-P'), at the expense of one more test-and-branch instruction at - run time. - -`-W HASH-TABLE-ARRAY-NAME' -`--word-array-name=HASH-TABLE-ARRAY-NAME' - Allows you to specify the name for the generated array containing - the hash table. Default name is `wordlist'. This option permits - the use of two hash tables in the same file, even when the option - `-G' (or, equivalently, the `%global-table' declaration) is given. - -`--length-table-name=LENGTH-TABLE-ARRAY-NAME' - Allows you to specify the name for the generated array containing - the length table. Default name is `lengthtable'. This option - permits the use of two length tables in the same file, even when - the option `-G' (or, equivalently, the `%global-table' - declaration) is given. - -`-S TOTAL-SWITCH-STATEMENTS' -`--switch=TOTAL-SWITCH-STATEMENTS' - Causes the generated C code to use a `switch' statement scheme, - rather than an array lookup table. This can lead to a reduction - in both time and space requirements for some input files. The - argument to this option determines how many `switch' statements - are generated. A value of 1 generates 1 `switch' containing all - the elements, a value of 2 generates 2 tables with 1/2 the - elements in each `switch', etc. This is useful since many C - compilers cannot correctly generate code for large `switch' - statements. This option was inspired in part by Keith Bostic's - original C program. - -`-T' -`--omit-struct-type' - Prevents the transfer of the type declaration to the output file. - Use this option if the type is already defined elsewhere. - -`-p' - This option is supported for compatibility with previous releases - of `gperf'. It does not do anything. - - -File: gperf.info, Node: Algorithmic Details, Next: Verbosity, Prev: Output Details, Up: Options - -4.5 Options for changing the Algorithms employed by `gperf' -=========================================================== - -`-k SELECTED-BYTE-POSITIONS' -`--key-positions=SELECTED-BYTE-POSITIONS' - Allows selection of the byte positions used in the keywords' hash - function. The allowable choices range between 1-255, inclusive. - The positions are separated by commas, e.g., `-k 9,4,13,14'; - ranges may be used, e.g., `-k 2-7'; and positions may occur in any - order. Furthermore, the wildcard '*' causes the generated hash - function to consider *all* byte positions in each keyword, whereas - '$' instructs the hash function to use the "final byte" of a - keyword (this is the only way to use a byte position greater than - 255, incidentally). - - For instance, the option `-k 1,2,4,6-10,'$'' generates a hash - function that considers positions 1,2,4,6,7,8,9,10, plus the last - byte in each keyword (which may be at a different position for each - keyword, obviously). Keywords with length less than the indicated - byte positions work properly, since selected byte positions - exceeding the keyword length are simply not referenced in the hash - function. - - This option is not normally needed since version 2.8 of `gperf'; - the default byte positions are computed depending on the keyword - set, through a search that minimizes the number of byte positions. - -`-D' -`--duplicates' - Handle keywords whose selected byte sets hash to duplicate values. - Duplicate hash values can occur if a set of keywords has the same - names, but possesses different attributes, or if the selected byte - positions are not well chosen. With the -D option `gperf' treats - all these keywords as part of an equivalence class and generates a - perfect hash function with multiple comparisons for duplicate - keywords. It is up to you to completely disambiguate the keywords - by modifying the generated C code. However, `gperf' helps you out - by organizing the output. - - Using this option usually means that the generated hash function - is no longer perfect. On the other hand, it permits `gperf' to - work on keyword sets that it otherwise could not handle. - -`-m ITERATIONS' -`--multiple-iterations=ITERATIONS' - Perform multiple choices of the `-i' and `-j' values, and choose - the best results. This increases the running time by a factor of - ITERATIONS but does a good job minimizing the generated table size. - -`-i INITIAL-VALUE' -`--initial-asso=INITIAL-VALUE' - Provides an initial VALUE for the associate values array. Default - is 0. Increasing the initial value helps inflate the final table - size, possibly leading to more time efficient keyword lookups. - Note that this option is not particularly useful when `-S' (or, - equivalently, `%switch') is used. Also, `-i' is overridden when - the `-r' option is used. - -`-j JUMP-VALUE' -`--jump=JUMP-VALUE' - Affects the "jump value", i.e., how far to advance the associated - byte value upon collisions. JUMP-VALUE is rounded up to an odd - number, the default is 5. If the JUMP-VALUE is 0 `gperf' jumps by - random amounts. - -`-n' -`--no-strlen' - Instructs the generator not to include the length of a keyword when - computing its hash value. This may save a few assembly - instructions in the generated lookup table. - -`-r' -`--random' - Utilizes randomness to initialize the associated values table. - This frequently generates solutions faster than using deterministic - initialization (which starts all associated values at 0). - Furthermore, using the randomization option generally increases - the size of the table. - -`-s SIZE-MULTIPLE' -`--size-multiple=SIZE-MULTIPLE' - Affects the size of the generated hash table. The numeric - argument for this option indicates "how many times larger or - smaller" the maximum associated value range should be, in - relationship to the number of keywords. It can be written as an - integer, a floating-point number or a fraction. For example, a - value of 3 means "allow the maximum associated value to be about 3 - times larger than the number of input keywords". Conversely, a - value of 1/3 means "allow the maximum associated value to be about - 3 times smaller than the number of input keywords". Values - smaller than 1 are useful for limiting the overall size of the - generated hash table, though the option `-m' is better at this - purpose. - - If `generate switch' option `-S' (or, equivalently, `%switch') is - _not_ enabled, the maximum associated value influences the static - array table size, and a larger table should decrease the time - required for an unsuccessful search, at the expense of extra table - space. - - The default value is 1, thus the default maximum associated value - about the same size as the number of keywords (for efficiency, the - maximum associated value is always rounded up to a power of 2). - The actual table size may vary somewhat, since this technique is - essentially a heuristic. - - -File: gperf.info, Node: Verbosity, Prev: Algorithmic Details, Up: Options - -4.6 Informative Output -====================== - -`-h' -`--help' - Prints a short summary on the meaning of each program option. - Aborts further program execution. - -`-v' -`--version' - Prints out the current version number. - -`-d' -`--debug' - Enables the debugging option. This produces verbose diagnostics to - "standard error" when `gperf' is executing. It is useful both for - maintaining the program and for determining whether a given set of - options is actually speeding up the search for a solution. Some - useful information is dumped at the end of the program when the - `-d' option is enabled. - - -File: gperf.info, Node: Bugs, Next: Projects, Prev: Options, Up: Top - -5 Known Bugs and Limitations with `gperf' -***************************************** - - The following are some limitations with the current release of -`gperf': - - * The `gperf' utility is tuned to execute quickly, and works quickly - for small to medium size data sets (around 1000 keywords). It is - extremely useful for maintaining perfect hash functions for - compiler keyword sets. Several recent enhancements now enable - `gperf' to work efficiently on much larger keyword sets (over - 15,000 keywords). When processing large keyword sets it helps - greatly to have over 8 megs of RAM. - - * The size of the generate static keyword array can get _extremely_ - large if the input keyword file is large or if the keywords are - quite similar. This tends to slow down the compilation of the - generated C code, and _greatly_ inflates the object code size. If - this situation occurs, consider using the `-S' option to reduce - data size, potentially increasing keyword recognition time a - negligible amount. Since many C compilers cannot correctly - generate code for large switch statements it is important to - qualify the -S option with an appropriate numerical argument that - controls the number of switch statements generated. - - * The maximum number of selected byte positions has an arbitrary - limit of 255. This restriction should be removed, and if anyone - considers this a problem write me and let me know so I can remove - the constraint. - - -File: gperf.info, Node: Projects, Next: Bibliography, Prev: Bugs, Up: Top - -6 Things Still Left to Do -************************* - - It should be "relatively" easy to replace the current perfect hash -function algorithm with a more exhaustive approach; the perfect hash -module is essential independent from other program modules. Additional -worthwhile improvements include: - - * Another useful extension involves modifying the program to generate - "minimal" perfect hash functions (under certain circumstances, the - current version can be rather extravagant in the generated table - size). This is mostly of theoretical interest, since a sparse - table often produces faster lookups, and use of the `-S' `switch' - option can minimize the data size, at the expense of slightly - longer lookups (note that the gcc compiler generally produces good - code for `switch' statements, reducing the need for more complex - schemes). - - * In addition to improving the algorithm, it would also be useful to - generate an Ada package as the code output, in addition to the - current C and C++ routines. - - -File: gperf.info, Node: Bibliography, Next: Concept Index, Prev: Projects, Up: Top - -7 Bibliography -************** - -[1] Chang, C.C.: A Scheme for Constructing Ordered Minimal Perfect -Hashing Functions Information Sciences 39(1986), 187-195. - -[2] Cichelli, Richard J. Author's Response to "On Cichelli's Minimal -Perfect Hash Functions Method" Communications of the ACM, 23, -12(December 1980), 729. - -[3] Cichelli, Richard J. Minimal Perfect Hash Functions Made Simple -Communications of the ACM, 23, 1(January 1980), 17-19. - -[4] Cook, C. R. and Oldehoeft, R.R. A Letter Oriented Minimal Perfect -Hashing Function SIGPLAN Notices, 17, 9(September 1982), 18-27. - -[5] Cormack, G. V. and Horspool, R. N. S. and Kaiserwerth, M. -Practical Perfect Hashing Computer Journal, 28, 1(January 1985), 54-58. - -[6] Jaeschke, G. Reciprocal Hashing: A Method for Generating Minimal -Perfect Hashing Functions Communications of the ACM, 24, 12(December -1981), 829-833. - -[7] Jaeschke, G. and Osterburg, G. On Cichelli's Minimal Perfect Hash -Functions Method Communications of the ACM, 23, 12(December 1980), -728-729. - -[8] Sager, Thomas J. A Polynomial Time Generator for Minimal Perfect -Hash Functions Communications of the ACM, 28, 5(December 1985), 523-532 - -[9] Schmidt, Douglas C. GPERF: A Perfect Hash Function Generator Second -USENIX C++ Conference Proceedings, April 1990. - -[10] Schmidt, Douglas C. GPERF: A Perfect Hash Function Generator C++ -Report, SIGS 10 10 (November/December 1998). - -[11] Sebesta, R.W. and Taylor, M.A. Minimal Perfect Hash Functions for -Reserved Word Lists SIGPLAN Notices, 20, 12(September 1985), 47-53. - -[12] Sprugnoli, R. Perfect Hashing Functions: A Single Probe Retrieving -Method for Static Sets Communications of the ACM, 20 11(November 1977), -841-850. - -[13] Stallman, Richard M. Using and Porting GNU CC Free Software -Foundation, 1988. - -[14] Stroustrup, Bjarne The C++ Programming Language. Addison-Wesley, -1986. - -[15] Tiemann, Michael D. User's Guide to GNU C++ Free Software -Foundation, 1989. - - -File: gperf.info, Node: Concept Index, Prev: Bibliography, Up: Top - -Concept Index -************* - -[index] -* Menu: - -* %%: User-supplied Struct. - (line 33) -* %7bit: Gperf Declarations. (line 95) -* %compare-lengths: Gperf Declarations. (line 103) -* %compare-strncmp: Gperf Declarations. (line 115) -* %define class-name: Gperf Declarations. (line 89) -* %define hash-function-name: Gperf Declarations. (line 79) -* %define initializer-suffix: Gperf Declarations. (line 71) -* %define length-table-name: Gperf Declarations. (line 173) -* %define lookup-function-name: Gperf Declarations. (line 84) -* %define slot-name: Gperf Declarations. (line 63) -* %define string-pool-name: Gperf Declarations. (line 152) -* %define word-array-name: Gperf Declarations. (line 167) -* %delimiters: Gperf Declarations. (line 24) -* %enum: Gperf Declarations. (line 124) -* %global-table: Gperf Declarations. (line 135) -* %ignore-case: Gperf Declarations. (line 34) -* %includes: Gperf Declarations. (line 130) -* %language: Gperf Declarations. (line 39) -* %null-strings: Gperf Declarations. (line 160) -* %omit-struct-type: Gperf Declarations. (line 192) -* %pic: Gperf Declarations. (line 140) -* %readonly-tables: Gperf Declarations. (line 119) -* %struct-type: Gperf Declarations. (line 30) -* %switch: Gperf Declarations. (line 180) -* %{: C Code Inclusion. (line 6) -* %}: C Code Inclusion. (line 6) -* Array name: Output Details. (line 129) -* Bugs: Contributors. (line 6) -* Class name: Output Details. (line 41) -* Copyright: Output Copyright. (line 6) -* Declaration section: Input Format. (line 6) -* Delimiters: Input Details. (line 11) -* Duplicates: Algorithmic Details. (line 32) -* Format: Input Format. (line 6) -* Functions section: Input Format. (line 6) -* hash: Output Format. (line 14) -* hash table: Output Format. (line 6) -* in_word_set: Output Format. (line 24) -* Initializers: Output Details. (line 20) -* Jump value: Algorithmic Details. (line 63) -* Keywords section: Input Format. (line 6) -* Minimal perfect hash functions: Search Structures. (line 30) -* NUL: Binary Strings. (line 6) -* Slot name: Output Details. (line 11) -* Static search structure: Search Structures. (line 6) -* switch <1>: Output Details. (line 143) -* switch: Output Format. (line 44) - - - -Tag Table: -Node: Top1235 -Node: Copying3372 -Node: Contributors40913 -Node: Motivation42106 -Node: Search Structures43238 -Node: Description46797 -Node: Input Format48755 -Node: Declarations49900 -Node: User-supplied Struct50488 -Node: Gperf Declarations52103 -Node: C Code Inclusion60900 -Node: Keywords61743 -Node: Functions63691 -Node: Controls for GNU indent64229 -Node: Output Format65180 -Node: Binary Strings67975 -Node: Output Copyright69151 -Node: Options70090 -Node: Output File70879 -Node: Input Details71271 -Node: Output Language73110 -Node: Output Details74534 -Node: Algorithmic Details81801 -Node: Verbosity87058 -Node: Bugs87769 -Node: Projects89365 -Node: Bibliography90497 -Node: Concept Index92512 - -End Tag Table diff --git a/doc/gperf.pdf b/doc/gperf.pdf deleted file mode 100644 index edf3b90c0a5129817b01c98d04fe4ad7b2ac12e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243013 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 setpagedevice -%%EndPaperSize - end -%%EndSetup -%%Page: 1 1 -TeXDict begin 1 0 bop 150 1318 a Fx(User's)65 b(Guide)g(to)f -Fw(gperf)f Fx(3.1)p 150 1423 3600 34 v 2005 1519 a Fv(The)30 -b(GNU)h(P)m(erfect)h(Hash)e(F)-8 b(unction)31 b(Generator)2528 -1627 y(Edition)f(3.1,)i(20)f(Decem)m(b)s(er)g(2009)150 -4958 y Fu(Douglas)46 b(C.)f(Sc)l(hmidt)150 5091 y(Bruno)f(Haible)p -150 5141 3600 17 v eop end -%%Page: 2 2 -TeXDict begin 2 1 bop 150 4152 a Fv(Cop)m(yrigh)m(t)602 -4149 y(c)577 4152 y Ft(\015)30 b Fv(1989-2009)k(F)-8 -b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(Inc.)150 -4286 y(P)m(ermission)g(is)h(gran)m(ted)g(to)f(mak)m(e)i(and)d -(distribute)h(v)m(erbatim)h(copies)g(of)f(this)g(man)m(ual)h(pro)m -(vided)f(the)150 4396 y(cop)m(yrigh)m(t)g(notice)f(and)f(this)g(p)s -(ermission)g(notice)h(are)g(preserv)m(ed)f(on)h(all)g(copies.)150 -4530 y(P)m(ermission)38 b(is)h(gran)m(ted)f(to)h(cop)m(y)g(and)f -(distribute)g(mo)s(di\014ed)f(v)m(ersions)h(of)h(this)f(man)m(ual)g -(under)f(the)150 4640 y(conditions)44 b(for)f(v)m(erbatim)h(cop)m -(ying,)k(pro)m(vided)43 b(also)h(that)h(the)e(section)i(en)m(titled)g -(\\GNU)f(General)150 4749 y(Public)27 b(License")g(is)g(included)f -(exactly)j(as)e(in)f(the)h(original,)i(and)d(pro)m(vided)h(that)g(the)g -(en)m(tire)h(resulting)150 4859 y(deriv)m(ed)i(w)m(ork)h(is)f -(distributed)g(under)f(the)h(terms)g(of)h(a)g(p)s(ermission)e(notice)j -(iden)m(tical)g(to)f(this)f(one.)150 4994 y(P)m(ermission)j(is)h(gran)m -(ted)f(to)h(cop)m(y)g(and)f(distribute)f(translations)i(of)g(this)f -(man)m(ual)g(in)m(to)h(another)f(lan-)150 5103 y(guage,)41 -b(under)35 b(the)j(ab)s(o)m(v)m(e)g(conditions)g(for)f(mo)s(di\014ed)g -(v)m(ersions,)i(except)g(that)e(the)h(section)g(en)m(titled)150 -5213 y(\\GNU)e(General)h(Public)e(License")h(ma)m(y)g(b)s(e)e(included) -h(in)g(a)h(translation)g(appro)m(v)m(ed)f(b)m(y)h(the)f(author)150 -5322 y(instead)c(of)f(in)g(the)h(original)g(English.)p -eop end -%%Page: 1 3 -TeXDict begin 1 2 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(1)150 299 y Fs(GNU)54 b(GENERAL)g(PUBLIC)f(LICENSE)1477 -521 y Fv(V)-8 b(ersion)31 b(3,)g(29)g(June)e(2007)390 -663 y(Cop)m(yrigh)m(t)842 660 y(c)817 663 y Ft(\015)h -Fv(2007)i(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 -b(Inc.)e Fr(http://fsf.org/)390 882 y Fv(Ev)m(ery)m(one)h(is)g(p)s -(ermitted)f(to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)g -(of)g(this)390 991 y(license)g(do)s(cumen)m(t,)g(but)e(c)m(hanging)j -(it)f(is)f(not)h(allo)m(w)m(ed.)150 1234 y Fu(Pream)l(ble)275 -1393 y Fv(The)e(GNU)h(General)h(Public)e(License)h(is)g(a)g(free,)g -(cop)m(yleft)i(license)e(for)g(soft)m(w)m(are)h(and)e(other)h(kinds)150 -1503 y(of)h(w)m(orks.)275 1644 y(The)c(licenses)i(for)e(most)i(soft)m -(w)m(are)g(and)e(other)i(practical)g(w)m(orks)f(are)g(designed)g(to)h -(tak)m(e)g(a)m(w)m(a)m(y)h(y)m(our)150 1753 y(freedom)k(to)h(share)e -(and)h(c)m(hange)h(the)f(w)m(orks.)51 b(By)35 b(con)m(trast,)h(the)e -(GNU)h(General)g(Public)e(License)i(is)150 1863 y(in)m(tended)25 -b(to)h(guaran)m(tee)h(y)m(our)e(freedom)g(to)h(share)f(and)f(c)m(hange) -j(all)f(v)m(ersions)f(of)h(a)f(program|to)h(mak)m(e)150 -1973 y(sure)35 b(it)h(remains)f(free)h(soft)m(w)m(are)h(for)f(all)g -(its)g(users.)56 b(W)-8 b(e,)38 b(the)e(F)-8 b(ree)37 -b(Soft)m(w)m(are)g(F)-8 b(oundation,)37 b(use)f(the)150 -2082 y(GNU)j(General)g(Public)f(License)g(for)g(most)h(of)f(our)f(soft) -m(w)m(are;)44 b(it)39 b(applies)f(also)h(to)g(an)m(y)f(other)h(w)m(ork) -150 2192 y(released)31 b(this)f(w)m(a)m(y)i(b)m(y)e(its)h(authors.)40 -b(Y)-8 b(ou)31 b(can)g(apply)f(it)h(to)g(y)m(our)f(programs,)g(to)s(o.) -275 2333 y(When)37 b(w)m(e)g(sp)s(eak)g(of)g(free)h(soft)m(w)m(are,)i -(w)m(e)e(are)g(referring)e(to)i(freedom,)h(not)f(price.)61 -b(Our)36 b(General)150 2443 y(Public)e(Licenses)g(are)h(designed)f(to)h -(mak)m(e)g(sure)f(that)g(y)m(ou)h(ha)m(v)m(e)g(the)g(freedom)f(to)g -(distribute)g(copies)150 2552 y(of)e(free)f(soft)m(w)m(are)i(\(and)e(c) -m(harge)i(for)e(them)h(if)f(y)m(ou)h(wish\),)f(that)h(y)m(ou)g(receiv)m -(e)h(source)f(co)s(de)g(or)f(can)h(get)150 2662 y(it)e(if)f(y)m(ou)g(w) -m(an)m(t)i(it,)f(that)g(y)m(ou)f(can)h(c)m(hange)g(the)f(soft)m(w)m -(are)i(or)e(use)g(pieces)h(of)f(it)h(in)f(new)g(free)g(programs,)150 -2771 y(and)h(that)h(y)m(ou)f(kno)m(w)h(y)m(ou)g(can)f(do)g(these)h -(things.)275 2912 y(T)-8 b(o)24 b(protect)h(y)m(our)f(righ)m(ts,)i(w)m -(e)f(need)f(to)h(prev)m(en)m(t)g(others)f(from)g(den)m(ying)g(y)m(ou)g -(these)h(righ)m(ts)f(or)g(asking)150 3022 y(y)m(ou)37 -b(to)g(surrender)d(the)j(righ)m(ts.)60 b(Therefore,)38 -b(y)m(ou)f(ha)m(v)m(e)g(certain)h(resp)s(onsibilities)e(if)h(y)m(ou)f -(distribute)150 3132 y(copies)30 b(of)f(the)g(soft)m(w)m(are,)i(or)e -(if)f(y)m(ou)i(mo)s(dify)e(it:)40 b(resp)s(onsibilities)29 -b(to)h(resp)s(ect)f(the)g(freedom)g(of)g(others.)275 -3273 y(F)-8 b(or)30 b(example,)g(if)g(y)m(ou)f(distribute)g(copies)i -(of)e(suc)m(h)g(a)h(program,)g(whether)e(gratis)j(or)e(for)g(a)h(fee,)h -(y)m(ou)150 3382 y(m)m(ust)i(pass)f(on)h(to)h(the)f(recipien)m(ts)h -(the)f(same)h(freedoms)e(that)i(y)m(ou)f(receiv)m(ed.)50 -b(Y)-8 b(ou)34 b(m)m(ust)f(mak)m(e)h(sure)150 3492 y(that)29 -b(they)-8 b(,)29 b(to)s(o,)h(receiv)m(e)g(or)f(can)f(get)i(the)e -(source)h(co)s(de.)40 b(And)27 b(y)m(ou)i(m)m(ust)f(sho)m(w)g(them)h -(these)f(terms)h(so)150 3601 y(they)i(kno)m(w)f(their)g(righ)m(ts.)275 -3743 y(Dev)m(elop)s(ers)i(that)f(use)g(the)g(GNU)h(GPL)f(protect)g(y)m -(our)g(righ)m(ts)h(with)e(t)m(w)m(o)j(steps:)41 b(\(1\))32 -b(assert)g(cop)m(y-)150 3852 y(righ)m(t)38 b(on)e(the)h(soft)m(w)m -(are,)k(and)36 b(\(2\))i(o\013er)g(y)m(ou)f(this)g(License)g(giving)h -(y)m(ou)f(legal)i(p)s(ermission)d(to)i(cop)m(y)-8 b(,)150 -3962 y(distribute)30 b(and/or)g(mo)s(dify)g(it.)275 4103 -y(F)-8 b(or)35 b(the)g(dev)m(elop)s(ers')h(and)e(authors')h -(protection,)j(the)d(GPL)g(clearly)h(explains)f(that)h(there)f(is)g(no) -150 4213 y(w)m(arran)m(t)m(y)g(for)f(this)g(free)g(soft)m(w)m(are.)54 -b(F)-8 b(or)35 b(b)s(oth)e(users')h(and)g(authors')g(sak)m(e,)i(the)e -(GPL)h(requires)e(that)150 4322 y(mo)s(di\014ed)42 b(v)m(ersions)i(b)s -(e)f(mark)m(ed)g(as)h(c)m(hanged,)j(so)d(that)g(their)f(problems)g -(will)g(not)h(b)s(e)f(attributed)150 4432 y(erroneously)30 -b(to)h(authors)f(of)h(previous)f(v)m(ersions.)275 4573 -y(Some)e(devices)h(are)f(designed)g(to)h(den)m(y)f(users)g(access)h(to) -g(install)g(or)f(run)f(mo)s(di\014ed)g(v)m(ersions)h(of)h(the)150 -4682 y(soft)m(w)m(are)34 b(inside)e(them,)g(although)h(the)f(man)m -(ufacturer)g(can)h(do)f(so.)46 b(This)32 b(is)g(fundamen)m(tally)g -(incom-)150 4792 y(patible)j(with)e(the)h(aim)h(of)f(protecting)h -(users')e(freedom)h(to)h(c)m(hange)g(the)f(soft)m(w)m(are.)53 -b(The)33 b(systematic)150 4902 y(pattern)j(of)g(suc)m(h)g(abuse)f(o)s -(ccurs)h(in)f(the)i(area)f(of)g(pro)s(ducts)f(for)h(individuals)f(to)h -(use,)i(whic)m(h)d(is)h(pre-)150 5011 y(cisely)d(where)e(it)h(is)f -(most)h(unacceptable.)46 b(Therefore,)32 b(w)m(e)g(ha)m(v)m(e)h -(designed)e(this)g(v)m(ersion)h(of)g(the)g(GPL)150 5121 -y(to)38 b(prohibit)e(the)i(practice)g(for)f(those)h(pro)s(ducts.)60 -b(If)37 b(suc)m(h)f(problems)h(arise)h(substan)m(tially)g(in)f(other) -150 5230 y(domains,)28 b(w)m(e)f(stand)g(ready)g(to)h(extend)f(this)g -(pro)m(vision)g(to)h(those)f(domains)g(in)g(future)f(v)m(ersions)i(of)f -(the)150 5340 y(GPL,)k(as)f(needed)g(to)h(protect)h(the)e(freedom)h(of) -f(users.)p eop end -%%Page: 2 4 -TeXDict begin 2 3 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(2)275 299 y(Finally)-8 b(,)34 b(ev)m(ery)f(program)f -(is)g(threatened)h(constan)m(tly)h(b)m(y)e(soft)m(w)m(are)i(paten)m -(ts.)47 b(States)33 b(should)f(not)150 408 y(allo)m(w)25 -b(paten)m(ts)e(to)h(restrict)g(dev)m(elopmen)m(t)g(and)f(use)g(of)g -(soft)m(w)m(are)h(on)f(general-purp)s(ose)g(computers,)i(but)150 -518 y(in)h(those)h(that)g(do,)g(w)m(e)g(wish)f(to)h(a)m(v)m(oid)h(the)e -(sp)s(ecial)h(danger)f(that)h(paten)m(ts)h(applied)e(to)h(a)g(free)f -(program)150 628 y(could)h(mak)m(e)i(it)f(e\013ectiv)m(ely)i -(proprietary)-8 b(.)40 b(T)-8 b(o)28 b(prev)m(en)m(t)g(this,)g(the)g -(GPL)f(assures)g(that)h(paten)m(ts)g(cannot)150 737 y(b)s(e)i(used)f -(to)i(render)f(the)g(program)g(non-free.)275 881 y(The)f(precise)i -(terms)f(and)g(conditions)h(for)f(cop)m(ying,)i(distribution)d(and)h -(mo)s(di\014cation)h(follo)m(w.)150 1128 y Fu(TERMS)44 -b(AND)h(CONDITIONS)199 1287 y Fv(0.)61 b(De\014nitions.)330 -1427 y(\\This)30 b(License")h(refers)f(to)i(v)m(ersion)e(3)h(of)g(the)f -(GNU)h(General)g(Public)g(License.)330 1566 y(\\Cop)m(yrigh)m(t")e -(also)g(means)e(cop)m(yrigh)m(t-lik)m(e)k(la)m(ws)d(that)g(apply)f(to)h -(other)g(kinds)f(of)g(w)m(orks,)h(suc)m(h)g(as)330 1676 -y(semiconductor)j(masks.)330 1815 y(\\The)40 b(Program")h(refers)f(to)g -(an)m(y)h(cop)m(yrigh)m(table)h(w)m(ork)e(licensed)h(under)e(this)h -(License.)70 b(Eac)m(h)330 1924 y(licensee)43 b(is)f(addressed)f(as)h -(\\y)m(ou".)76 b(\\Licensees")44 b(and)d(\\recipien)m(ts")i(ma)m(y)g(b) -s(e)e(individuals)g(or)330 2034 y(organizations.)330 -2173 y(T)-8 b(o)32 b(\\mo)s(dify")g(a)g(w)m(ork)g(means)g(to)h(cop)m(y) -f(from)g(or)f(adapt)h(all)h(or)f(part)g(of)g(the)g(w)m(ork)f(in)h(a)g -(fashion)330 2283 y(requiring)d(cop)m(yrigh)m(t)h(p)s(ermission,)e -(other)i(than)f(the)g(making)g(of)g(an)g(exact)i(cop)m(y)-8 -b(.)41 b(The)29 b(resulting)330 2392 y(w)m(ork)f(is)f(called)i(a)f -(\\mo)s(di\014ed)f(v)m(ersion")i(of)f(the)g(earlier)g(w)m(ork)g(or)g(a) -g(w)m(ork)f(\\based)h(on")g(the)g(earlier)330 2502 y(w)m(ork.)330 -2641 y(A)k(\\co)m(v)m(ered)i(w)m(ork")f(means)f(either)g(the)g(unmo)s -(di\014ed)e(Program)i(or)g(a)h(w)m(ork)f(based)g(on)g(the)g(Pro-)330 -2751 y(gram.)330 2890 y(T)-8 b(o)31 b(\\propagate")i(a)e(w)m(ork)g -(means)g(to)h(do)e(an)m(ything)i(with)e(it)h(that,)h(without)f(p)s -(ermission,)f(w)m(ould)330 3000 y(mak)m(e)c(y)m(ou)e(directly)i(or)e -(secondarily)h(liable)h(for)e(infringemen)m(t)h(under)e(applicable)i -(cop)m(yrigh)m(t)h(la)m(w,)330 3109 y(except)34 b(executing)g(it)g(on)e -(a)i(computer)f(or)f(mo)s(difying)h(a)g(priv)-5 b(ate)33 -b(cop)m(y)-8 b(.)50 b(Propagation)34 b(includes)330 3219 -y(cop)m(ying,)39 b(distribution)c(\(with)h(or)h(without)f(mo)s -(di\014cation\),)i(making)f(a)m(v)-5 b(ailable)38 b(to)f(the)f(public,) -330 3329 y(and)30 b(in)g(some)h(coun)m(tries)g(other)f(activities)j(as) -e(w)m(ell.)330 3468 y(T)-8 b(o)28 b(\\con)m(v)m(ey")j(a)d(w)m(ork)g -(means)g(an)m(y)g(kind)f(of)h(propagation)h(that)g(enables)f(other)g -(parties)g(to)h(mak)m(e)330 3577 y(or)k(receiv)m(e)j(copies.)50 -b(Mere)34 b(in)m(teraction)i(with)d(a)g(user)g(through)g(a)g(computer)h -(net)m(w)m(ork,)h(with)e(no)330 3687 y(transfer)d(of)g(a)h(cop)m(y)-8 -b(,)32 b(is)e(not)h(con)m(v)m(eying.)330 3826 y(An)25 -b(in)m(teractiv)m(e)k(user)c(in)m(terface)j(displa)m(ys)e -(\\Appropriate)g(Legal)h(Notices")h(to)f(the)f(exten)m(t)h(that)f(it) -330 3936 y(includes)k(a)g(con)m(v)m(enien)m(t)j(and)c(prominen)m(tly)h -(visible)h(feature)g(that)f(\(1\))i(displa)m(ys)e(an)g(appropriate)330 -4045 y(cop)m(yrigh)m(t)j(notice,)h(and)d(\(2\))i(tells)f(the)g(user)f -(that)i(there)e(is)h(no)g(w)m(arran)m(t)m(y)g(for)g(the)g(w)m(ork)g -(\(except)330 4155 y(to)e(the)g(exten)m(t)h(that)f(w)m(arran)m(ties)g -(are)g(pro)m(vided\),)g(that)g(licensees)g(ma)m(y)g(con)m(v)m(ey)h(the) -f(w)m(ork)f(under)330 4265 y(this)37 b(License,)i(and)e(ho)m(w)g(to)g -(view)h(a)f(cop)m(y)h(of)f(this)g(License.)61 b(If)36 -b(the)i(in)m(terface)g(presen)m(ts)f(a)g(list)330 4374 -y(of)32 b(user)e(commands)h(or)h(options,)g(suc)m(h)f(as)g(a)h(men)m -(u,)f(a)h(prominen)m(t)f(item)h(in)f(the)h(list)g(meets)g(this)330 -4484 y(criterion.)199 4623 y(1.)61 b(Source)30 b(Co)s(de.)330 -4762 y(The)g(\\source)i(co)s(de")f(for)g(a)g(w)m(ork)g(means)g(the)g -(preferred)f(form)g(of)h(the)g(w)m(ork)g(for)g(making)g(mo)s(di-)330 -4872 y(\014cations)g(to)g(it.)41 b(\\Ob)5 b(ject)31 b(co)s(de")g(means) -g(an)m(y)f(non-source)h(form)f(of)g(a)h(w)m(ork.)330 -5011 y(A)36 b(\\Standard)f(In)m(terface")i(means)f(an)f(in)m(terface)i -(that)g(either)f(is)g(an)f(o\016cial)i(standard)e(de\014ned)330 -5121 y(b)m(y)e(a)g(recognized)i(standards)d(b)s(o)s(dy)-8 -b(,)33 b(or,)h(in)f(the)g(case)h(of)f(in)m(terfaces)i(sp)s(eci\014ed)d -(for)h(a)h(particular)330 5230 y(programming)44 b(language,)49 -b(one)c(that)f(is)g(widely)h(used)e(among)i(dev)m(elop)s(ers)f(w)m -(orking)h(in)e(that)330 5340 y(language.)p eop end -%%Page: 3 5 -TeXDict begin 3 4 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(3)330 299 y(The)24 b(\\System)g(Libraries")g(of)g(an)g -(executable)i(w)m(ork)e(include)f(an)m(ything,)j(other)f(than)e(the)i -(w)m(ork)f(as)330 408 y(a)k(whole,)g(that)g(\(a\))g(is)f(included)g(in) -g(the)g(normal)g(form)g(of)h(pac)m(k)-5 b(aging)29 b(a)e(Ma)5 -b(jor)28 b(Comp)s(onen)m(t,)g(but)330 518 y(whic)m(h)33 -b(is)g(not)h(part)f(of)h(that)g(Ma)5 b(jor)34 b(Comp)s(onen)m(t,)g(and) -e(\(b\))i(serv)m(es)g(only)f(to)h(enable)g(use)f(of)h(the)330 -628 y(w)m(ork)c(with)g(that)g(Ma)5 b(jor)31 b(Comp)s(onen)m(t,)e(or)h -(to)h(implemen)m(t)g(a)f(Standard)f(In)m(terface)i(for)e(whic)m(h)h(an) -330 737 y(implemen)m(tation)g(is)e(a)m(v)-5 b(ailable)30 -b(to)f(the)f(public)g(in)f(source)i(co)s(de)f(form.)39 -b(A)29 b(\\Ma)5 b(jor)29 b(Comp)s(onen)m(t",)330 847 -y(in)38 b(this)g(con)m(text,)k(means)c(a)g(ma)5 b(jor)38 -b(essen)m(tial)i(comp)s(onen)m(t)e(\(k)m(ernel,)j(windo)m(w)d(system,)i -(and)e(so)330 956 y(on\))c(of)g(the)g(sp)s(eci\014c)f(op)s(erating)h -(system)g(\(if)g(an)m(y\))h(on)e(whic)m(h)h(the)g(executable)h(w)m(ork) -f(runs,)f(or)h(a)330 1066 y(compiler)d(used)f(to)h(pro)s(duce)e(the)h -(w)m(ork,)h(or)f(an)h(ob)5 b(ject)31 b(co)s(de)g(in)m(terpreter)f(used) -g(to)h(run)e(it.)330 1212 y(The)f(\\Corresp)s(onding)g(Source")h(for)f -(a)h(w)m(ork)g(in)g(ob)5 b(ject)29 b(co)s(de)g(form)g(means)f(all)i -(the)f(source)g(co)s(de)330 1322 y(needed)35 b(to)h(generate,)i -(install,)f(and)e(\(for)g(an)h(executable)g(w)m(ork\))g(run)e(the)h(ob) -5 b(ject)36 b(co)s(de)g(and)e(to)330 1431 y(mo)s(dify)39 -b(the)g(w)m(ork,)j(including)d(scripts)g(to)i(con)m(trol)f(those)g -(activities.)71 b(Ho)m(w)m(ev)m(er,)44 b(it)c(do)s(es)f(not)330 -1541 y(include)i(the)h(w)m(ork's)g(System)g(Libraries,)i(or)e -(general-purp)s(ose)f(to)s(ols)i(or)f(generally)h(a)m(v)-5 -b(ailable)330 1650 y(free)31 b(programs)g(whic)m(h)g(are)h(used)e(unmo) -s(di\014ed)f(in)i(p)s(erforming)f(those)h(activities)j(but)d(whic)m(h)g -(are)330 1760 y(not)g(part)f(of)h(the)g(w)m(ork.)42 b(F)-8 -b(or)32 b(example,)f(Corresp)s(onding)e(Source)i(includes)f(in)m -(terface)i(de\014nition)330 1870 y(\014les)g(asso)s(ciated)i(with)d -(source)i(\014les)f(for)g(the)g(w)m(ork,)h(and)f(the)g(source)g(co)s -(de)h(for)e(shared)h(libraries)330 1979 y(and)g(dynamically)g(link)m -(ed)h(subprograms)e(that)h(the)h(w)m(ork)f(is)g(sp)s(eci\014cally)h -(designed)f(to)h(require,)330 2089 y(suc)m(h)k(as)g(b)m(y)g(in)m -(timate)i(data)e(comm)m(unication)i(or)e(con)m(trol)h(\015o)m(w)f(b)s -(et)m(w)m(een)h(those)f(subprograms)330 2198 y(and)30 -b(other)g(parts)g(of)h(the)g(w)m(ork.)330 2345 y(The)h(Corresp)s -(onding)f(Source)i(need)f(not)h(include)f(an)m(ything)i(that)f(users)f -(can)h(regenerate)h(auto-)330 2454 y(matically)e(from)e(other)h(parts)f -(of)h(the)f(Corresp)s(onding)f(Source.)330 2600 y(The)h(Corresp)s -(onding)e(Source)j(for)f(a)h(w)m(ork)f(in)g(source)h(co)s(de)f(form)g -(is)h(that)f(same)h(w)m(ork.)199 2746 y(2.)61 b(Basic)32 -b(P)m(ermissions.)330 2892 y(All)44 b(righ)m(ts)f(gran)m(ted)g(under)f -(this)h(License)g(are)g(gran)m(ted)h(for)f(the)g(term)g(of)g(cop)m -(yrigh)m(t)h(on)f(the)330 3002 y(Program,)29 b(and)e(are)i(irrev)m(o)s -(cable)g(pro)m(vided)f(the)g(stated)h(conditions)g(are)f(met.)40 -b(This)28 b(License)g(ex-)330 3112 y(plicitly)h(a\016rms)e(y)m(our)h -(unlimited)g(p)s(ermission)e(to)j(run)d(the)i(unmo)s(di\014ed)e -(Program.)40 b(The)27 b(output)330 3221 y(from)37 b(running)e(a)j(co)m -(v)m(ered)h(w)m(ork)e(is)g(co)m(v)m(ered)i(b)m(y)e(this)h(License)f -(only)h(if)f(the)g(output,)i(giv)m(en)g(its)330 3331 -y(con)m(ten)m(t,)33 b(constitutes)f(a)g(co)m(v)m(ered)g(w)m(ork.)42 -b(This)31 b(License)g(ac)m(kno)m(wledges)i(y)m(our)e(righ)m(ts)g(of)g -(fair)g(use)330 3440 y(or)f(other)h(equiv)-5 b(alen)m(t,)32 -b(as)f(pro)m(vided)f(b)m(y)g(cop)m(yrigh)m(t)i(la)m(w.)330 -3587 y(Y)-8 b(ou)41 b(ma)m(y)h(mak)m(e,)i(run)c(and)g(propagate)i(co)m -(v)m(ered)g(w)m(orks)f(that)g(y)m(ou)h(do)e(not)h(con)m(v)m(ey)-8 -b(,)46 b(without)330 3696 y(conditions)30 b(so)f(long)h(as)g(y)m(our)f -(license)h(otherwise)g(remains)f(in)g(force.)41 b(Y)-8 -b(ou)30 b(ma)m(y)f(con)m(v)m(ey)i(co)m(v)m(ered)330 3806 -y(w)m(orks)40 b(to)g(others)g(for)g(the)g(sole)g(purp)s(ose)e(of)i(ha)m -(ving)h(them)e(mak)m(e)i(mo)s(di\014cations)f(exclusiv)m(ely)330 -3915 y(for)45 b(y)m(ou,)50 b(or)45 b(pro)m(vide)h(y)m(ou)f(with)g -(facilities)j(for)d(running)f(those)h(w)m(orks,)50 b(pro)m(vided)45 -b(that)h(y)m(ou)330 4025 y(comply)34 b(with)f(the)h(terms)f(of)h(this)f -(License)i(in)e(con)m(v)m(eying)i(all)g(material)g(for)e(whic)m(h)g(y)m -(ou)h(do)g(not)330 4134 y(con)m(trol)i(cop)m(yrigh)m(t.)55 -b(Those)35 b(th)m(us)f(making)h(or)g(running)e(the)i(co)m(v)m(ered)h(w) -m(orks)f(for)f(y)m(ou)h(m)m(ust)g(do)330 4244 y(so)29 -b(exclusiv)m(ely)h(on)e(y)m(our)g(b)s(ehalf,)h(under)d(y)m(our)j -(direction)g(and)f(con)m(trol,)i(on)e(terms)h(that)g(prohibit)330 -4354 y(them)35 b(from)g(making)g(an)m(y)h(copies)g(of)f(y)m(our)h(cop)m -(yrigh)m(ted)g(material)h(outside)e(their)h(relationship)330 -4463 y(with)30 b(y)m(ou.)330 4609 y(Con)m(v)m(eying)46 -b(under)d(an)m(y)i(other)g(circumstances)g(is)g(p)s(ermitted)g(solely)g -(under)f(the)g(conditions)330 4719 y(stated)31 b(b)s(elo)m(w.)41 -b(Sublicensing)30 b(is)g(not)h(allo)m(w)m(ed;)h(section)g(10)f(mak)m -(es)g(it)g(unnecessary)-8 b(.)199 4865 y(3.)61 b(Protecting)32 -b(Users')e(Legal)i(Righ)m(ts)f(F)-8 b(rom)31 b(An)m(ti-Circum)m(v)m(en) -m(tion)i(La)m(w.)330 5011 y(No)44 b(co)m(v)m(ered)i(w)m(ork)d(shall)h -(b)s(e)g(deemed)f(part)h(of)g(an)f(e\013ectiv)m(e)k(tec)m(hnological)g -(measure)c(under)330 5121 y(an)m(y)30 b(applicable)h(la)m(w)f -(ful\014lling)g(obligations)h(under)e(article)i(11)g(of)f(the)g(WIPO)f -(cop)m(yrigh)m(t)i(treat)m(y)330 5230 y(adopted)e(on)f(20)i(Decem)m(b)s -(er)f(1996,)i(or)e(similar)g(la)m(ws)g(prohibiting)f(or)h(restricting)g -(circum)m(v)m(en)m(tion)330 5340 y(of)i(suc)m(h)f(measures.)p -eop end -%%Page: 4 6 -TeXDict begin 4 5 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(4)330 299 y(When)25 b(y)m(ou)h(con)m(v)m(ey)g(a)g(co)m -(v)m(ered)h(w)m(ork,)f(y)m(ou)g(w)m(aiv)m(e)h(an)m(y)e(legal)i(p)s(o)m -(w)m(er)f(to)g(forbid)e(circum)m(v)m(en)m(tion)j(of)330 -408 y(tec)m(hnological)j(measures)d(to)g(the)g(exten)m(t)h(suc)m(h)e -(circum)m(v)m(en)m(tion)j(is)d(e\013ected)i(b)m(y)f(exercising)g(righ)m -(ts)330 518 y(under)35 b(this)h(License)h(with)e(resp)s(ect)i(to)g(the) -f(co)m(v)m(ered)i(w)m(ork,)g(and)d(y)m(ou)i(disclaim)g(an)m(y)f(in)m -(ten)m(tion)330 628 y(to)41 b(limit)g(op)s(eration)g(or)f(mo)s -(di\014cation)h(of)g(the)f(w)m(ork)h(as)f(a)h(means)f(of)h(enforcing,)i -(against)f(the)330 737 y(w)m(ork's)28 b(users,)f(y)m(our)h(or)f(third)g -(parties')h(legal)h(righ)m(ts)f(to)g(forbid)f(circum)m(v)m(en)m(tion)i -(of)e(tec)m(hnological)330 847 y(measures.)199 982 y(4.)61 -b(Con)m(v)m(eying)31 b(V)-8 b(erbatim)32 b(Copies.)330 -1117 y(Y)-8 b(ou)28 b(ma)m(y)g(con)m(v)m(ey)h(v)m(erbatim)f(copies)g -(of)g(the)f(Program's)h(source)g(co)s(de)f(as)h(y)m(ou)f(receiv)m(e)j -(it,)f(in)e(an)m(y)330 1226 y(medium,)33 b(pro)m(vided)g(that)h(y)m(ou) -f(conspicuously)g(and)g(appropriately)g(publish)f(on)h(eac)m(h)h(cop)m -(y)g(an)330 1336 y(appropriate)e(cop)m(yrigh)m(t)i(notice;)g(k)m(eep)f -(in)m(tact)h(all)f(notices)g(stating)h(that)e(this)g(License)h(and)f -(an)m(y)330 1445 y(non-p)s(ermissiv)m(e)d(terms)g(added)f(in)h(accord)h -(with)f(section)h(7)f(apply)g(to)h(the)f(co)s(de;)h(k)m(eep)g(in)m -(tact)h(all)330 1555 y(notices)37 b(of)f(the)g(absence)g(of)g(an)m(y)g -(w)m(arran)m(t)m(y;)j(and)c(giv)m(e)i(all)g(recipien)m(ts)f(a)h(cop)m -(y)f(of)g(this)f(License)330 1665 y(along)c(with)f(the)h(Program.)330 -1799 y(Y)-8 b(ou)27 b(ma)m(y)g(c)m(harge)h(an)m(y)f(price)g(or)f(no)h -(price)f(for)h(eac)m(h)g(cop)m(y)h(that)f(y)m(ou)g(con)m(v)m(ey)-8 -b(,)29 b(and)d(y)m(ou)h(ma)m(y)h(o\013er)330 1909 y(supp)s(ort)h(or)h -(w)m(arran)m(t)m(y)h(protection)h(for)e(a)h(fee.)199 -2044 y(5.)61 b(Con)m(v)m(eying)31 b(Mo)s(di\014ed)f(Source)g(V)-8 -b(ersions.)330 2179 y(Y)g(ou)27 b(ma)m(y)g(con)m(v)m(ey)h(a)f(w)m(ork)g -(based)f(on)h(the)g(Program,)g(or)g(the)g(mo)s(di\014cations)g(to)g -(pro)s(duce)e(it)i(from)330 2288 y(the)36 b(Program,)h(in)e(the)g(form) -g(of)g(source)h(co)s(de)g(under)d(the)j(terms)f(of)h(section)g(4,)h -(pro)m(vided)e(that)330 2398 y(y)m(ou)c(also)g(meet)g(all)h(of)e(these) -h(conditions:)379 2533 y(a.)61 b(The)28 b(w)m(ork)h(m)m(ust)f(carry)h -(prominen)m(t)f(notices)i(stating)g(that)f(y)m(ou)g(mo)s(di\014ed)e -(it,)j(and)e(giving)i(a)510 2642 y(relev)-5 b(an)m(t)32 -b(date.)374 2777 y(b.)60 b(The)34 b(w)m(ork)h(m)m(ust)f(carry)h -(prominen)m(t)f(notices)i(stating)g(that)f(it)g(is)g(released)g(under)e -(this)i(Li-)510 2887 y(cense)i(and)f(an)m(y)h(conditions)h(added)e -(under)f(section)j(7.)60 b(This)36 b(requiremen)m(t)h(mo)s(di\014es)f -(the)510 2996 y(requiremen)m(t)31 b(in)f(section)h(4)g(to)g(\\k)m(eep)h -(in)m(tact)g(all)f(notices".)384 3131 y(c.)61 b(Y)-8 -b(ou)36 b(m)m(ust)g(license)g(the)g(en)m(tire)h(w)m(ork,)g(as)f(a)g -(whole,)h(under)d(this)i(License)g(to)h(an)m(y)m(one)f(who)510 -3241 y(comes)31 b(in)m(to)g(p)s(ossession)e(of)h(a)h(cop)m(y)-8 -b(.)41 b(This)29 b(License)i(will)f(therefore)h(apply)-8 -b(,)30 b(along)h(with)f(an)m(y)510 3351 y(applicable)k(section)f(7)g -(additional)h(terms,)f(to)h(the)e(whole)h(of)g(the)g(w)m(ork,)g(and)f -(all)i(its)f(parts,)510 3460 y(regardless)h(of)g(ho)m(w)g(they)g(are)g -(pac)m(k)-5 b(aged.)52 b(This)33 b(License)h(giv)m(es)h(no)f(p)s -(ermission)e(to)j(license)510 3570 y(the)c(w)m(ork)h(in)f(an)m(y)g -(other)h(w)m(a)m(y)-8 b(,)33 b(but)d(it)i(do)s(es)f(not)g(in)m(v)-5 -b(alidate)33 b(suc)m(h)e(p)s(ermission)f(if)h(y)m(ou)h(ha)m(v)m(e)510 -3679 y(separately)g(receiv)m(ed)f(it.)374 3814 y(d.)60 -b(If)36 b(the)h(w)m(ork)g(has)g(in)m(teractiv)m(e)j(user)c(in)m -(terfaces,)k(eac)m(h)e(m)m(ust)f(displa)m(y)g(Appropriate)g(Legal)510 -3924 y(Notices;)49 b(ho)m(w)m(ev)m(er,)c(if)c(the)h(Program)f(has)g(in) -m(teractiv)m(e)j(in)m(terfaces)e(that)g(do)f(not)h(displa)m(y)510 -4033 y(Appropriate)30 b(Legal)i(Notices,)g(y)m(our)f(w)m(ork)f(need)g -(not)h(mak)m(e)g(them)g(do)f(so.)330 4194 y(A)38 b(compilation)h(of)f -(a)g(co)m(v)m(ered)h(w)m(ork)f(with)f(other)h(separate)h(and)e(indep)s -(enden)m(t)f(w)m(orks,)k(whic)m(h)330 4303 y(are)c(not)g(b)m(y)g(their) -g(nature)f(extensions)h(of)g(the)g(co)m(v)m(ered)i(w)m(ork,)f(and)e -(whic)m(h)h(are)g(not)g(com)m(bined)330 4413 y(with)27 -b(it)i(suc)m(h)e(as)h(to)h(form)e(a)h(larger)h(program,)f(in)f(or)h(on) -g(a)g(v)m(olume)g(of)g(a)h(storage)g(or)f(distribution)330 -4522 y(medium,)43 b(is)f(called)g(an)g(\\aggregate")j(if)c(the)h -(compilation)h(and)e(its)g(resulting)h(cop)m(yrigh)m(t)h(are)330 -4632 y(not)31 b(used)f(to)h(limit)h(the)e(access)i(or)f(legal)h(righ)m -(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m(ond)g(what)h(the)330 -4741 y(individual)j(w)m(orks)h(p)s(ermit.)54 b(Inclusion)34 -b(of)h(a)h(co)m(v)m(ered)g(w)m(ork)f(in)g(an)g(aggregate)j(do)s(es)c -(not)h(cause)330 4851 y(this)30 b(License)h(to)g(apply)f(to)h(the)g -(other)g(parts)f(of)g(the)h(aggregate.)199 4986 y(6.)61 -b(Con)m(v)m(eying)31 b(Non-Source)g(F)-8 b(orms.)330 -5121 y(Y)g(ou)29 b(ma)m(y)h(con)m(v)m(ey)g(a)f(co)m(v)m(ered)i(w)m(ork) -e(in)f(ob)5 b(ject)30 b(co)s(de)f(form)f(under)g(the)h(terms)f(of)h -(sections)h(4)g(and)330 5230 y(5,)42 b(pro)m(vided)d(that)g(y)m(ou)h -(also)g(con)m(v)m(ey)g(the)g(mac)m(hine-readable)g(Corresp)s(onding)e -(Source)g(under)330 5340 y(the)31 b(terms)f(of)g(this)h(License,)g(in)f -(one)h(of)f(these)h(w)m(a)m(ys:)p eop end -%%Page: 5 7 -TeXDict begin 5 6 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(5)379 299 y(a.)61 b(Con)m(v)m(ey)32 b(the)f(ob)5 -b(ject)31 b(co)s(de)g(in,)g(or)g(em)m(b)s(o)s(died)f(in,)h(a)g(ph)m -(ysical)h(pro)s(duct)d(\(including)i(a)g(ph)m(ys-)510 -408 y(ical)37 b(distribution)d(medium\),)j(accompanied)f(b)m(y)f(the)h -(Corresp)s(onding)d(Source)j(\014xed)e(on)i(a)510 518 -y(durable)30 b(ph)m(ysical)h(medium)e(customarily)i(used)f(for)g(soft)m -(w)m(are)i(in)m(terc)m(hange.)374 655 y(b.)60 b(Con)m(v)m(ey)30 -b(the)f(ob)5 b(ject)30 b(co)s(de)f(in,)g(or)g(em)m(b)s(o)s(died)f(in,)h -(a)g(ph)m(ysical)g(pro)s(duct)f(\(including)h(a)g(ph)m(ysi-)510 -765 y(cal)k(distribution)e(medium\),)h(accompanied)h(b)m(y)e(a)i -(written)f(o\013er,)g(v)-5 b(alid)33 b(for)e(at)i(least)g(three)510 -874 y(y)m(ears)i(and)f(v)-5 b(alid)35 b(for)f(as)g(long)h(as)g(y)m(ou)g -(o\013er)f(spare)h(parts)f(or)g(customer)h(supp)s(ort)d(for)i(that)510 -984 y(pro)s(duct)c(mo)s(del,)i(to)g(giv)m(e)g(an)m(y)m(one)h(who)d(p)s -(ossesses)h(the)h(ob)5 b(ject)32 b(co)s(de)f(either)h(\(1\))g(a)g(cop)m -(y)g(of)510 1093 y(the)24 b(Corresp)s(onding)e(Source)i(for)g(all)h -(the)f(soft)m(w)m(are)h(in)f(the)g(pro)s(duct)f(that)i(is)f(co)m(v)m -(ered)h(b)m(y)f(this)510 1203 y(License,)30 b(on)g(a)f(durable)g(ph)m -(ysical)h(medium)e(customarily)i(used)f(for)g(soft)m(w)m(are)i(in)m -(terc)m(hange,)510 1313 y(for)k(a)g(price)h(no)f(more)g(than)g(y)m(our) -g(reasonable)h(cost)g(of)f(ph)m(ysically)h(p)s(erforming)e(this)h(con-) -510 1422 y(v)m(eying)f(of)f(source,)g(or)g(\(2\))h(access)g(to)g(cop)m -(y)f(the)g(Corresp)s(onding)e(Source)i(from)f(a)h(net)m(w)m(ork)510 -1532 y(serv)m(er)e(at)g(no)f(c)m(harge.)384 1669 y(c.)61 -b(Con)m(v)m(ey)40 b(individual)e(copies)h(of)g(the)g(ob)5 -b(ject)40 b(co)s(de)f(with)g(a)g(cop)m(y)g(of)g(the)g(written)g -(o\013er)g(to)510 1778 y(pro)m(vide)e(the)g(Corresp)s(onding)e(Source.) -59 b(This)36 b(alternativ)m(e)k(is)c(allo)m(w)m(ed)j(only)e(o)s -(ccasionally)510 1888 y(and)29 b(noncommercially)-8 b(,)31 -b(and)e(only)g(if)h(y)m(ou)f(receiv)m(ed)i(the)e(ob)5 -b(ject)31 b(co)s(de)e(with)g(suc)m(h)g(an)g(o\013er,)510 -1998 y(in)h(accord)h(with)f(subsection)h(6b.)374 2134 -y(d.)60 b(Con)m(v)m(ey)37 b(the)f(ob)5 b(ject)37 b(co)s(de)f(b)m(y)g -(o\013ering)g(access)i(from)d(a)i(designated)f(place)h(\(gratis)g(or)f -(for)510 2244 y(a)j(c)m(harge\),)k(and)c(o\013er)g(equiv)-5 -b(alen)m(t)41 b(access)f(to)g(the)f(Corresp)s(onding)e(Source)i(in)f -(the)i(same)510 2354 y(w)m(a)m(y)30 b(through)f(the)g(same)h(place)h -(at)f(no)f(further)f(c)m(harge.)41 b(Y)-8 b(ou)30 b(need)f(not)h -(require)f(recipien)m(ts)510 2463 y(to)42 b(cop)m(y)h(the)f(Corresp)s -(onding)e(Source)h(along)i(with)f(the)g(ob)5 b(ject)42 -b(co)s(de.)75 b(If)42 b(the)f(place)i(to)510 2573 y(cop)m(y)c(the)g(ob) -5 b(ject)39 b(co)s(de)g(is)g(a)g(net)m(w)m(ork)g(serv)m(er,)i(the)e -(Corresp)s(onding)e(Source)h(ma)m(y)h(b)s(e)f(on)510 -2682 y(a)45 b(di\013eren)m(t)g(serv)m(er)f(\(op)s(erated)h(b)m(y)f(y)m -(ou)h(or)g(a)f(third)g(part)m(y\))h(that)g(supp)s(orts)d(equiv)-5 -b(alen)m(t)510 2792 y(cop)m(ying)35 b(facilities,)i(pro)m(vided)c(y)m -(ou)h(main)m(tain)h(clear)g(directions)f(next)g(to)h(the)f(ob)5 -b(ject)35 b(co)s(de)510 2902 y(sa)m(ying)h(where)f(to)h(\014nd)d(the)i -(Corresp)s(onding)f(Source.)55 b(Regardless)35 b(of)h(what)f(serv)m(er) -g(hosts)510 3011 y(the)e(Corresp)s(onding)e(Source,)j(y)m(ou)f(remain)f -(obligated)j(to)e(ensure)f(that)i(it)f(is)g(a)m(v)-5 -b(ailable)35 b(for)510 3121 y(as)c(long)g(as)f(needed)g(to)h(satisfy)g -(these)g(requiremen)m(ts.)384 3258 y(e.)61 b(Con)m(v)m(ey)24 -b(the)g(ob)5 b(ject)24 b(co)s(de)f(using)g(p)s(eer-to-p)s(eer)h -(transmission,)g(pro)m(vided)f(y)m(ou)h(inform)f(other)510 -3367 y(p)s(eers)d(where)g(the)h(ob)5 b(ject)22 b(co)s(de)f(and)f -(Corresp)s(onding)f(Source)i(of)g(the)g(w)m(ork)g(are)g(b)s(eing)g -(o\013ered)510 3477 y(to)31 b(the)g(general)g(public)f(at)h(no)f(c)m -(harge)i(under)d(subsection)h(6d.)330 3641 y(A)35 b(separable)f(p)s -(ortion)g(of)h(the)g(ob)5 b(ject)35 b(co)s(de,)h(whose)e(source)h(co)s -(de)g(is)f(excluded)g(from)g(the)h(Cor-)330 3751 y(resp)s(onding)c -(Source)h(as)h(a)g(System)f(Library)-8 b(,)33 b(need)f(not)h(b)s(e)e -(included)h(in)g(con)m(v)m(eying)i(the)f(ob)5 b(ject)330 -3861 y(co)s(de)31 b(w)m(ork.)330 3998 y(A)h(\\User)g(Pro)s(duct")f(is)h -(either)g(\(1\))g(a)g(\\consumer)g(pro)s(duct",)f(whic)m(h)h(means)f -(an)m(y)h(tangible)h(p)s(er-)330 4107 y(sonal)g(prop)s(ert)m(y)g(whic)m -(h)f(is)h(normally)h(used)e(for)h(p)s(ersonal,)g(family)-8 -b(,)35 b(or)e(household)f(purp)s(oses,)g(or)330 4217 -y(\(2\))26 b(an)m(ything)f(designed)f(or)h(sold)g(for)f(incorp)s -(oration)h(in)m(to)h(a)f(dw)m(elling.)39 b(In)24 b(determining)h -(whether)330 4326 y(a)30 b(pro)s(duct)e(is)h(a)h(consumer)f(pro)s -(duct,)f(doubtful)h(cases)h(shall)g(b)s(e)e(resolv)m(ed)j(in)e(fa)m(v)m -(or)h(of)g(co)m(v)m(erage.)330 4436 y(F)-8 b(or)42 b(a)g(particular)g -(pro)s(duct)f(receiv)m(ed)i(b)m(y)e(a)h(particular)g(user,)i -(\\normally)f(used")e(refers)g(to)i(a)330 4545 y(t)m(ypical)e(or)e -(common)h(use)e(of)i(that)g(class)g(of)f(pro)s(duct,)h(regardless)g(of) -f(the)h(status)f(of)h(the)f(par-)330 4655 y(ticular)d(user)e(or)h(of)h -(the)f(w)m(a)m(y)h(in)f(whic)m(h)f(the)i(particular)f(user)g(actually)h -(uses,)g(or)f(exp)s(ects)h(or)f(is)330 4765 y(exp)s(ected)d(to)g(use,)g -(the)g(pro)s(duct.)43 b(A)32 b(pro)s(duct)f(is)g(a)h(consumer)f(pro)s -(duct)g(regardless)h(of)g(whether)330 4874 y(the)h(pro)s(duct)f(has)h -(substan)m(tial)g(commercial,)j(industrial)c(or)h(non-consumer)g(uses,) -g(unless)f(suc)m(h)330 4984 y(uses)e(represen)m(t)g(the)h(only)f -(signi\014can)m(t)i(mo)s(de)e(of)g(use)g(of)h(the)f(pro)s(duct.)330 -5121 y(\\Installation)h(Information")e(for)g(a)g(User)g(Pro)s(duct)f -(means)g(an)m(y)i(metho)s(ds,)e(pro)s(cedures,)g(autho-)330 -5230 y(rization)d(k)m(eys,)g(or)f(other)f(information)h(required)f(to)h -(install)g(and)f(execute)i(mo)s(di\014ed)d(v)m(ersions)i(of)g(a)330 -5340 y(co)m(v)m(ered)h(w)m(ork)e(in)g(that)h(User)f(Pro)s(duct)f(from)h -(a)h(mo)s(di\014ed)e(v)m(ersion)h(of)h(its)f(Corresp)s(onding)f -(Source.)p eop end -%%Page: 6 8 -TeXDict begin 6 7 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(6)330 299 y(The)30 b(information)h(m)m(ust)f(su\016ce)g -(to)i(ensure)d(that)i(the)g(con)m(tin)m(ued)g(functioning)g(of)f(the)h -(mo)s(di\014ed)330 408 y(ob)5 b(ject)34 b(co)s(de)f(is)g(in)f(no)h -(case)h(prev)m(en)m(ted)f(or)g(in)m(terfered)g(with)g(solely)h(b)s -(ecause)f(mo)s(di\014cation)g(has)330 518 y(b)s(een)d(made.)330 -650 y(If)38 b(y)m(ou)i(con)m(v)m(ey)g(an)f(ob)5 b(ject)40 -b(co)s(de)f(w)m(ork)g(under)e(this)i(section)h(in,)h(or)e(with,)i(or)e -(sp)s(eci\014cally)g(for)330 759 y(use)g(in,)i(a)e(User)g(Pro)s(duct,)i -(and)e(the)g(con)m(v)m(eying)i(o)s(ccurs)d(as)i(part)f(of)g(a)g -(transaction)h(in)f(whic)m(h)330 869 y(the)d(righ)m(t)g(of)g(p)s -(ossession)f(and)g(use)h(of)f(the)h(User)g(Pro)s(duct)f(is)g -(transferred)g(to)i(the)e(recipien)m(t)i(in)330 978 y(p)s(erp)s(etuit)m -(y)43 b(or)g(for)g(a)h(\014xed)e(term)i(\(regardless)g(of)f(ho)m(w)h -(the)f(transaction)i(is)e(c)m(haracterized\),)330 1088 -y(the)c(Corresp)s(onding)e(Source)i(con)m(v)m(ey)m(ed)i(under)c(this)i -(section)h(m)m(ust)f(b)s(e)f(accompanied)i(b)m(y)f(the)330 -1198 y(Installation)d(Information.)52 b(But)35 b(this)f(requiremen)m(t) -g(do)s(es)g(not)h(apply)f(if)g(neither)g(y)m(ou)h(nor)f(an)m(y)330 -1307 y(third)28 b(part)m(y)i(retains)f(the)g(abilit)m(y)i(to)e(install) -h(mo)s(di\014ed)e(ob)5 b(ject)30 b(co)s(de)f(on)g(the)h(User)f(Pro)s -(duct)f(\(for)330 1417 y(example,)j(the)g(w)m(ork)f(has)g(b)s(een)g -(installed)h(in)f(R)m(OM\).)330 1548 y(The)38 b(requiremen)m(t)g(to)h -(pro)m(vide)g(Installation)g(Information)g(do)s(es)f(not)g(include)g(a) -h(requiremen)m(t)330 1658 y(to)32 b(con)m(tin)m(ue)h(to)f(pro)m(vide)g -(supp)s(ort)e(service,)j(w)m(arran)m(t)m(y)-8 b(,)33 -b(or)f(up)s(dates)e(for)i(a)g(w)m(ork)f(that)h(has)g(b)s(een)330 -1767 y(mo)s(di\014ed)37 b(or)h(installed)h(b)m(y)g(the)f(recipien)m(t,) -k(or)c(for)g(the)g(User)h(Pro)s(duct)e(in)h(whic)m(h)g(it)h(has)f(b)s -(een)330 1877 y(mo)s(di\014ed)29 b(or)h(installed.)42 -b(Access)31 b(to)g(a)g(net)m(w)m(ork)g(ma)m(y)g(b)s(e)e(denied)h(when)f -(the)i(mo)s(di\014cation)f(itself)330 1987 y(materially)i(and)e(adv)m -(ersely)h(a\013ects)h(the)e(op)s(eration)h(of)g(the)f(net)m(w)m(ork)h -(or)g(violates)h(the)f(rules)f(and)330 2096 y(proto)s(cols)h(for)f -(comm)m(unication)i(across)f(the)g(net)m(w)m(ork.)330 -2228 y(Corresp)s(onding)26 b(Source)h(con)m(v)m(ey)m(ed,)j(and)d -(Installation)i(Information)f(pro)m(vided,)g(in)f(accord)h(with)330 -2337 y(this)d(section)i(m)m(ust)e(b)s(e)g(in)g(a)h(format)g(that)f(is)h -(publicly)f(do)s(cumen)m(ted)g(\(and)g(with)g(an)h(implemen)m(ta-)330 -2447 y(tion)i(a)m(v)-5 b(ailable)29 b(to)f(the)g(public)e(in)h(source)h -(co)s(de)f(form\),)h(and)f(m)m(ust)g(require)g(no)g(sp)s(ecial)h(passw) -m(ord)330 2556 y(or)i(k)m(ey)i(for)e(unpac)m(king,)g(reading)h(or)f -(cop)m(ying.)199 2688 y(7.)61 b(Additional)31 b(T)-8 -b(erms.)330 2819 y(\\Additional)29 b(p)s(ermissions")e(are)h(terms)f -(that)h(supplemen)m(t)f(the)h(terms)g(of)f(this)h(License)g(b)m(y)g -(mak-)330 2929 y(ing)41 b(exceptions)h(from)e(one)h(or)g(more)g(of)g -(its)g(conditions.)72 b(Additional)42 b(p)s(ermissions)d(that)j(are)330 -3039 y(applicable)31 b(to)f(the)g(en)m(tire)h(Program)f(shall)g(b)s(e)f -(treated)i(as)f(though)f(they)h(w)m(ere)h(included)e(in)g(this)330 -3148 y(License,)36 b(to)e(the)g(exten)m(t)i(that)e(they)g(are)g(v)-5 -b(alid)34 b(under)f(applicable)i(la)m(w.)52 b(If)33 b(additional)i(p)s -(ermis-)330 3258 y(sions)27 b(apply)h(only)f(to)h(part)g(of)f(the)h -(Program,)h(that)f(part)f(ma)m(y)h(b)s(e)f(used)g(separately)h(under)e -(those)330 3367 y(p)s(ermissions,)31 b(but)g(the)h(en)m(tire)h(Program) -f(remains)f(go)m(v)m(erned)i(b)m(y)f(this)g(License)g(without)g(regard) -330 3477 y(to)f(the)g(additional)g(p)s(ermissions.)330 -3608 y(When)45 b(y)m(ou)g(con)m(v)m(ey)i(a)e(cop)m(y)h(of)f(a)g(co)m(v) -m(ered)i(w)m(ork,)h(y)m(ou)e(ma)m(y)f(at)h(y)m(our)f(option)g(remo)m(v) -m(e)i(an)m(y)330 3718 y(additional)30 b(p)s(ermissions)e(from)h(that)h -(cop)m(y)-8 b(,)31 b(or)f(from)e(an)m(y)i(part)f(of)h(it.)41 -b(\(Additional)30 b(p)s(ermissions)330 3828 y(ma)m(y)41 -b(b)s(e)f(written)g(to)h(require)f(their)h(o)m(wn)f(remo)m(v)-5 -b(al)42 b(in)e(certain)h(cases)g(when)f(y)m(ou)g(mo)s(dify)g(the)330 -3937 y(w)m(ork.\))48 b(Y)-8 b(ou)33 b(ma)m(y)g(place)h(additional)f(p)s -(ermissions)e(on)i(material,)i(added)d(b)m(y)g(y)m(ou)h(to)g(a)g(co)m -(v)m(ered)330 4047 y(w)m(ork,)e(for)f(whic)m(h)g(y)m(ou)h(ha)m(v)m(e)g -(or)g(can)f(giv)m(e)i(appropriate)f(cop)m(yrigh)m(t)g(p)s(ermission.) -330 4178 y(Not)m(withstanding)e(an)m(y)g(other)g(pro)m(vision)f(of)h -(this)f(License,)h(for)f(material)i(y)m(ou)f(add)f(to)h(a)f(co)m(v)m -(ered)330 4288 y(w)m(ork,)40 b(y)m(ou)e(ma)m(y)g(\(if)g(authorized)g(b) -m(y)g(the)g(cop)m(yrigh)m(t)h(holders)e(of)h(that)g(material\))h -(supplemen)m(t)330 4398 y(the)31 b(terms)f(of)g(this)h(License)g(with)f -(terms:)379 4529 y(a.)61 b(Disclaiming)31 b(w)m(arran)m(t)m(y)f(or)g -(limiting)g(liabilit)m(y)h(di\013eren)m(tly)f(from)f(the)g(terms)g(of)h -(sections)g(15)510 4639 y(and)g(16)h(of)g(this)f(License;)h(or)374 -4770 y(b.)60 b(Requiring)30 b(preserv)-5 b(ation)31 b(of)g(sp)s -(eci\014ed)f(reasonable)h(legal)i(notices)f(or)e(author)h(attributions) -510 4880 y(in)24 b(that)i(material)g(or)f(in)f(the)h(Appropriate)g -(Legal)h(Notices)h(displa)m(y)m(ed)e(b)m(y)g(w)m(orks)f(con)m(taining) -510 4989 y(it;)31 b(or)384 5121 y(c.)61 b(Prohibiting)23 -b(misrepresen)m(tation)i(of)e(the)h(origin)g(of)f(that)i(material,)h -(or)d(requiring)g(that)h(mo)s(d-)510 5230 y(i\014ed)30 -b(v)m(ersions)h(of)f(suc)m(h)g(material)i(b)s(e)e(mark)m(ed)h(in)f -(reasonable)h(w)m(a)m(ys)g(as)g(di\013eren)m(t)g(from)f(the)510 -5340 y(original)i(v)m(ersion;)f(or)p eop end -%%Page: 7 9 -TeXDict begin 7 8 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(7)374 299 y(d.)60 b(Limiting)42 b(the)f(use)g(for)g -(publicit)m(y)h(purp)s(oses)d(of)i(names)g(of)h(licensors)f(or)h -(authors)e(of)i(the)510 408 y(material;)32 b(or)384 543 -y(e.)61 b(Declining)29 b(to)f(gran)m(t)g(righ)m(ts)f(under)f(trademark) -h(la)m(w)h(for)f(use)g(of)g(some)h(trade)f(names,)h(trade-)510 -653 y(marks,)i(or)h(service)g(marks;)f(or)397 788 y(f.)60 -b(Requiring)26 b(indemni\014cation)g(of)g(licensors)h(and)f(authors)f -(of)i(that)f(material)i(b)m(y)e(an)m(y)m(one)h(who)510 -897 y(con)m(v)m(eys)45 b(the)e(material)h(\(or)g(mo)s(di\014ed)e(v)m -(ersions)h(of)h(it\))g(with)e(con)m(tractual)k(assumptions)510 -1007 y(of)40 b(liabilit)m(y)h(to)f(the)f(recipien)m(t,)k(for)c(an)m(y)h -(liabilit)m(y)h(that)f(these)g(con)m(tractual)i(assumptions)510 -1117 y(directly)31 b(imp)s(ose)f(on)g(those)h(licensors)g(and)f -(authors.)330 1277 y(All)i(other)h(non-p)s(ermissiv)m(e)e(additional)i -(terms)e(are)i(considered)e(\\further)g(restrictions")i(within)330 -1386 y(the)j(meaning)f(of)h(section)g(10.)57 b(If)35 -b(the)h(Program)f(as)h(y)m(ou)g(receiv)m(ed)g(it,)i(or)d(an)m(y)h(part) -f(of)h(it,)h(con-)330 1496 y(tains)f(a)g(notice)h(stating)g(that)f(it)g -(is)g(go)m(v)m(erned)h(b)m(y)e(this)h(License)g(along)h(with)e(a)h -(term)g(that)g(is)g(a)330 1606 y(further)24 b(restriction,)k(y)m(ou)e -(ma)m(y)g(remo)m(v)m(e)h(that)f(term.)39 b(If)26 b(a)g(license)g(do)s -(cumen)m(t)g(con)m(tains)g(a)g(further)330 1715 y(restriction)33 -b(but)f(p)s(ermits)g(relicensing)h(or)g(con)m(v)m(eying)h(under)d(this) -i(License,)g(y)m(ou)g(ma)m(y)g(add)f(to)i(a)330 1825 -y(co)m(v)m(ered)g(w)m(ork)e(material)h(go)m(v)m(erned)h(b)m(y)e(the)g -(terms)g(of)g(that)h(license)g(do)s(cumen)m(t,)g(pro)m(vided)e(that)330 -1934 y(the)g(further)e(restriction)i(do)s(es)f(not)h(surviv)m(e)f(suc)m -(h)g(relicensing)h(or)g(con)m(v)m(eying.)330 2069 y(If)f(y)m(ou)g(add)g -(terms)g(to)h(a)g(co)m(v)m(ered)h(w)m(ork)e(in)g(accord)h(with)f(this)g -(section,)i(y)m(ou)e(m)m(ust)g(place,)i(in)e(the)330 -2179 y(relev)-5 b(an)m(t)31 b(source)f(\014les,)g(a)g(statemen)m(t)h -(of)f(the)g(additional)g(terms)g(that)g(apply)f(to)i(those)f(\014les,)g -(or)g(a)330 2288 y(notice)i(indicating)f(where)f(to)h(\014nd)e(the)h -(applicable)i(terms.)330 2423 y(Additional)37 b(terms,)h(p)s(ermissiv)m -(e)e(or)h(non-p)s(ermissiv)m(e,)h(ma)m(y)f(b)s(e)e(stated)j(in)e(the)h -(form)f(of)g(a)h(sep-)330 2533 y(arately)i(written)f(license,)i(or)e -(stated)h(as)e(exceptions;)43 b(the)38 b(ab)s(o)m(v)m(e)h(requiremen)m -(ts)e(apply)g(either)330 2642 y(w)m(a)m(y)-8 b(.)199 -2777 y(8.)61 b(T)-8 b(ermination.)330 2912 y(Y)g(ou)40 -b(ma)m(y)g(not)f(propagate)i(or)e(mo)s(dify)g(a)g(co)m(v)m(ered)i(w)m -(ork)f(except)g(as)g(expressly)f(pro)m(vided)g(un-)330 -3022 y(der)d(this)h(License.)62 b(An)m(y)37 b(attempt)h(otherwise)f(to) -h(propagate)g(or)f(mo)s(dify)f(it)i(is)f(v)m(oid,)i(and)e(will)330 -3131 y(automatically)g(terminate)d(y)m(our)g(righ)m(ts)g(under)f(this)g -(License)i(\(including)e(an)m(y)h(paten)m(t)h(licenses)330 -3241 y(gran)m(ted)c(under)e(the)h(third)g(paragraph)g(of)g(section)i -(11\).)330 3376 y(Ho)m(w)m(ev)m(er,)j(if)e(y)m(ou)f(cease)i(all)f -(violation)i(of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f -(a)h(particular)330 3485 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h -(\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g -(cop)m(yrigh)m(t)h(holder)330 3595 y(explicitly)42 b(and)e(\014nally)h -(terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 -b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 3705 y(holder)34 -b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h -(reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 3814 -y(after)31 b(the)f(cessation.)330 3949 y(Moreo)m(v)m(er,)k(y)m(our)d -(license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h -(reinstated)g(p)s(ermanen)m(tly)f(if)330 4059 y(the)d(cop)m(yrigh)m(t)h -(holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g -(reasonable)h(means,)f(this)g(is)g(the)330 4168 y(\014rst)f(time)i(y)m -(ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f -(License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 -4278 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g -(violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h -(of)f(the)330 4387 y(notice.)330 4522 y(T)-8 b(ermination)28 -b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h -(terminate)h(the)e(licenses)i(of)f(parties)330 4632 y(who)38 -b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g -(under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) -330 4741 y(b)s(een)f(terminated)h(and)e(not)i(p)s(ermanen)m(tly)f -(reinstated,)j(y)m(ou)e(do)f(not)h(qualify)f(to)h(receiv)m(e)h(new)330 -4851 y(licenses)31 b(for)f(the)h(same)g(material)h(under)c(section)k -(10.)199 4986 y(9.)61 b(Acceptance)32 b(Not)g(Required)d(for)i(Ha)m -(ving)g(Copies.)330 5121 y(Y)-8 b(ou)38 b(are)g(not)g(required)f(to)h -(accept)h(this)f(License)g(in)f(order)g(to)h(receiv)m(e)i(or)e(run)e(a) -i(cop)m(y)g(of)g(the)330 5230 y(Program.)i(Ancillary)27 -b(propagation)g(of)g(a)g(co)m(v)m(ered)h(w)m(ork)e(o)s(ccurring)g -(solely)i(as)f(a)g(consequence)g(of)330 5340 y(using)i(p)s(eer-to-p)s -(eer)g(transmission)g(to)h(receiv)m(e)h(a)e(cop)m(y)h(lik)m(ewise)h(do) -s(es)d(not)i(require)e(acceptance.)p eop end -%%Page: 8 10 -TeXDict begin 8 9 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(8)330 299 y(Ho)m(w)m(ev)m(er,)28 b(nothing)c(other)g -(than)g(this)f(License)i(gran)m(ts)g(y)m(ou)f(p)s(ermission)f(to)i -(propagate)g(or)f(mo)s(dify)330 408 y(an)m(y)34 b(co)m(v)m(ered)g(w)m -(ork.)50 b(These)32 b(actions)j(infringe)e(cop)m(yrigh)m(t)h(if)f(y)m -(ou)h(do)f(not)g(accept)i(this)e(License.)330 518 y(Therefore,)f(b)m(y) -f(mo)s(difying)g(or)g(propagating)h(a)g(co)m(v)m(ered)h(w)m(ork,)f(y)m -(ou)g(indicate)g(y)m(our)g(acceptance)330 628 y(of)f(this)f(License)h -(to)g(do)f(so.)154 759 y(10.)61 b(Automatic)32 b(Licensing)f(of)f(Do)m -(wnstream)i(Recipien)m(ts.)330 891 y(Eac)m(h)39 b(time)g(y)m(ou)g(con)m -(v)m(ey)h(a)f(co)m(v)m(ered)h(w)m(ork,)h(the)d(recipien)m(t)i -(automatically)h(receiv)m(es)f(a)f(license)330 1000 y(from)e(the)h -(original)h(licensors,)h(to)f(run,)f(mo)s(dify)f(and)g(propagate)i -(that)f(w)m(ork,)i(sub)5 b(ject)38 b(to)g(this)330 1110 -y(License.)60 b(Y)-8 b(ou)38 b(are)f(not)g(resp)s(onsible)e(for)i -(enforcing)g(compliance)h(b)m(y)f(third)f(parties)h(with)f(this)330 -1219 y(License.)330 1351 y(An)43 b(\\en)m(tit)m(y)i(transaction")g(is)f -(a)f(transaction)i(transferring)e(con)m(trol)h(of)g(an)f(organization,) -49 b(or)330 1461 y(substan)m(tially)24 b(all)f(assets)g(of)g(one,)i(or) -e(sub)s(dividing)d(an)j(organization,)j(or)d(merging)g(organizations.) -330 1570 y(If)28 b(propagation)i(of)f(a)h(co)m(v)m(ered)g(w)m(ork)f -(results)g(from)f(an)h(en)m(tit)m(y)i(transaction,)f(eac)m(h)g(part)m -(y)g(to)f(that)330 1680 y(transaction)g(who)d(receiv)m(es)k(a)d(cop)m -(y)i(of)e(the)h(w)m(ork)f(also)i(receiv)m(es)g(whatev)m(er)f(licenses)g -(to)g(the)g(w)m(ork)330 1789 y(the)d(part)m(y's)g(predecessor)g(in)g -(in)m(terest)h(had)e(or)h(could)g(giv)m(e)h(under)e(the)h(previous)f -(paragraph,)i(plus)330 1899 y(a)31 b(righ)m(t)g(to)h(p)s(ossession)e -(of)h(the)g(Corresp)s(onding)e(Source)i(of)g(the)f(w)m(ork)h(from)g -(the)g(predecessor)f(in)330 2008 y(in)m(terest,)i(if)e(the)h -(predecessor)f(has)g(it)h(or)f(can)h(get)h(it)e(with)h(reasonable)g -(e\013orts.)330 2140 y(Y)-8 b(ou)36 b(ma)m(y)g(not)g(imp)s(ose)f(an)m -(y)h(further)e(restrictions)j(on)e(the)h(exercise)g(of)g(the)g(righ)m -(ts)g(gran)m(ted)g(or)330 2250 y(a\016rmed)27 b(under)f(this)h -(License.)40 b(F)-8 b(or)28 b(example,)h(y)m(ou)f(ma)m(y)g(not)g(imp)s -(ose)f(a)h(license)g(fee,)h(ro)m(y)m(alt)m(y)-8 b(,)31 -b(or)330 2359 y(other)d(c)m(harge)g(for)g(exercise)h(of)e(righ)m(ts)h -(gran)m(ted)g(under)e(this)i(License,)h(and)d(y)m(ou)i(ma)m(y)g(not)g -(initiate)330 2469 y(litigation)f(\(including)d(a)g(cross-claim)i(or)e -(coun)m(terclaim)i(in)e(a)g(la)m(wsuit\))i(alleging)g(that)e(an)m(y)h -(paten)m(t)330 2578 y(claim)j(is)g(infringed)e(b)m(y)i(making,)g -(using,)g(selling,)h(o\013ering)f(for)f(sale,)i(or)e(imp)s(orting)g -(the)h(Program)330 2688 y(or)i(an)m(y)h(p)s(ortion)f(of)h(it.)154 -2819 y(11.)61 b(P)m(aten)m(ts.)330 2951 y(A)41 b(\\con)m(tributor")h -(is)f(a)g(cop)m(yrigh)m(t)i(holder)d(who)h(authorizes)g(use)g(under)e -(this)i(License)h(of)f(the)330 3061 y(Program)35 b(or)f(a)h(w)m(ork)g -(on)f(whic)m(h)g(the)h(Program)f(is)h(based.)53 b(The)34 -b(w)m(ork)g(th)m(us)g(licensed)h(is)g(called)330 3170 -y(the)c(con)m(tributor's)f(\\con)m(tributor)i(v)m(ersion".)330 -3302 y(A)g(con)m(tributor's)g(\\essen)m(tial)i(paten)m(t)e(claims")h -(are)f(all)h(paten)m(t)f(claims)h(o)m(wned)e(or)h(con)m(trolled)h(b)m -(y)330 3411 y(the)21 b(con)m(tributor,)j(whether)d(already)g(acquired)g -(or)h(hereafter)f(acquired,)j(that)d(w)m(ould)g(b)s(e)g(infringed)330 -3521 y(b)m(y)27 b(some)h(manner,)g(p)s(ermitted)f(b)m(y)g(this)h -(License,)h(of)e(making,)i(using,)f(or)f(selling)i(its)f(con)m -(tributor)330 3630 y(v)m(ersion,)40 b(but)c(do)i(not)f(include)g -(claims)i(that)f(w)m(ould)f(b)s(e)f(infringed)h(only)g(as)h(a)g -(consequence)g(of)330 3740 y(further)33 b(mo)s(di\014cation)h(of)g(the) -g(con)m(tributor)g(v)m(ersion.)52 b(F)-8 b(or)34 b(purp)s(oses)e(of)i -(this)g(de\014nition,)h(\\con-)330 3850 y(trol")40 b(includes)f(the)g -(righ)m(t)h(to)f(gran)m(t)h(paten)m(t)g(sublicenses)f(in)g(a)g(manner)g -(consisten)m(t)h(with)f(the)330 3959 y(requiremen)m(ts)30 -b(of)h(this)f(License.)330 4091 y(Eac)m(h)44 b(con)m(tributor)h(gran)m -(ts)f(y)m(ou)g(a)h(non-exclusiv)m(e,)j(w)m(orldwide,)f(ro)m(y)m(alt)m -(y-free)g(paten)m(t)e(license)330 4200 y(under)26 b(the)h(con)m -(tributor's)g(essen)m(tial)i(paten)m(t)f(claims,)h(to)f(mak)m(e,)h -(use,)f(sell,)g(o\013er)g(for)f(sale,)i(imp)s(ort)330 -4310 y(and)h(otherwise)h(run,)e(mo)s(dify)g(and)h(propagate)i(the)e -(con)m(ten)m(ts)i(of)f(its)g(con)m(tributor)f(v)m(ersion.)330 -4441 y(In)e(the)h(follo)m(wing)h(three)e(paragraphs,)h(a)g(\\paten)m(t) -h(license")g(is)e(an)m(y)h(express)f(agreemen)m(t)j(or)d(com-)330 -4551 y(mitmen)m(t,)g(ho)m(w)m(ev)m(er)g(denominated,)f(not)f(to)h -(enforce)g(a)f(paten)m(t)i(\(suc)m(h)e(as)g(an)g(express)g(p)s -(ermission)330 4661 y(to)32 b(practice)h(a)f(paten)m(t)h(or)e(co)m(v)m -(enan)m(t)j(not)e(to)g(sue)f(for)h(paten)m(t)g(infringemen)m(t\).)45 -b(T)-8 b(o)32 b(\\gran)m(t")h(suc)m(h)330 4770 y(a)i(paten)m(t)h -(license)f(to)h(a)f(part)m(y)g(means)f(to)i(mak)m(e)f(suc)m(h)g(an)f -(agreemen)m(t)j(or)d(commitmen)m(t)i(not)f(to)330 4880 -y(enforce)c(a)g(paten)m(t)g(against)h(the)e(part)m(y)-8 -b(.)330 5011 y(If)36 b(y)m(ou)h(con)m(v)m(ey)h(a)f(co)m(v)m(ered)h(w)m -(ork,)h(kno)m(wingly)e(relying)g(on)f(a)h(paten)m(t)h(license,)h(and)d -(the)h(Corre-)330 5121 y(sp)s(onding)21 b(Source)h(of)h(the)g(w)m(ork)g -(is)f(not)h(a)m(v)-5 b(ailable)25 b(for)e(an)m(y)m(one)g(to)h(cop)m(y) --8 b(,)25 b(free)e(of)g(c)m(harge)g(and)f(under)330 5230 -y(the)32 b(terms)f(of)h(this)f(License,)i(through)e(a)h(publicly)f(a)m -(v)-5 b(ailable)34 b(net)m(w)m(ork)e(serv)m(er)g(or)g(other)g(readily) -330 5340 y(accessible)38 b(means,)g(then)e(y)m(ou)h(m)m(ust)f(either)h -(\(1\))h(cause)e(the)h(Corresp)s(onding)e(Source)h(to)h(b)s(e)f(so)p -eop end -%%Page: 9 11 -TeXDict begin 9 10 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(9)330 299 y(a)m(v)-5 b(ailable,)32 b(or)e(\(2\))g -(arrange)g(to)h(depriv)m(e)e(y)m(ourself)h(of)g(the)g(b)s(ene\014t)e -(of)i(the)g(paten)m(t)g(license)h(for)e(this)330 408 -y(particular)35 b(w)m(ork,)g(or)f(\(3\))i(arrange,)g(in)d(a)i(manner)e -(consisten)m(t)j(with)e(the)g(requiremen)m(ts)h(of)f(this)330 -518 y(License,)j(to)f(extend)g(the)f(paten)m(t)h(license)h(to)f(do)m -(wnstream)f(recipien)m(ts.)56 b(\\Kno)m(wingly)36 b(relying")330 -628 y(means)31 b(y)m(ou)h(ha)m(v)m(e)g(actual)h(kno)m(wledge)f(that,)g -(but)f(for)g(the)g(paten)m(t)i(license,)f(y)m(our)g(con)m(v)m(eying)h -(the)330 737 y(co)m(v)m(ered)40 b(w)m(ork)e(in)g(a)g(coun)m(try)-8 -b(,)41 b(or)e(y)m(our)f(recipien)m(t's)h(use)f(of)g(the)h(co)m(v)m -(ered)g(w)m(ork)g(in)e(a)i(coun)m(try)-8 b(,)330 847 -y(w)m(ould)35 b(infringe)g(one)g(or)g(more)g(iden)m(ti\014able)h(paten) -m(ts)g(in)f(that)h(coun)m(try)f(that)h(y)m(ou)f(ha)m(v)m(e)i(reason)330 -956 y(to)31 b(b)s(eliev)m(e)h(are)e(v)-5 b(alid.)330 -1121 y(If,)31 b(pursuan)m(t)e(to)j(or)e(in)h(connection)h(with)e(a)h -(single)h(transaction)g(or)f(arrangemen)m(t,)h(y)m(ou)f(con)m(v)m(ey)-8 -b(,)330 1230 y(or)35 b(propagate)h(b)m(y)e(pro)s(curing)g(con)m(v)m(ey) -m(ance)j(of,)g(a)e(co)m(v)m(ered)h(w)m(ork,)g(and)f(gran)m(t)g(a)g -(paten)m(t)h(license)330 1340 y(to)c(some)f(of)h(the)f(parties)h -(receiving)g(the)f(co)m(v)m(ered)i(w)m(ork)e(authorizing)h(them)f(to)h -(use,)g(propagate,)330 1450 y(mo)s(dify)26 b(or)h(con)m(v)m(ey)h(a)g -(sp)s(eci\014c)e(cop)m(y)i(of)f(the)g(co)m(v)m(ered)i(w)m(ork,)f(then)e -(the)h(paten)m(t)h(license)g(y)m(ou)f(gran)m(t)330 1559 -y(is)j(automatically)k(extended)c(to)h(all)g(recipien)m(ts)h(of)e(the)h -(co)m(v)m(ered)h(w)m(ork)e(and)g(w)m(orks)g(based)g(on)h(it.)330 -1724 y(A)d(paten)m(t)g(license)h(is)e(\\discriminatory")i(if)e(it)h(do) -s(es)f(not)h(include)f(within)g(the)h(scop)s(e)f(of)h(its)g(co)m(v)m -(er-)330 1833 y(age,)f(prohibits)c(the)h(exercise)h(of,)h(or)d(is)h -(conditioned)h(on)f(the)g(non-exercise)h(of)f(one)g(or)g(more)g(of)g -(the)330 1943 y(righ)m(ts)32 b(that)g(are)g(sp)s(eci\014cally)h(gran)m -(ted)f(under)e(this)i(License.)45 b(Y)-8 b(ou)32 b(ma)m(y)g(not)g(con)m -(v)m(ey)h(a)f(co)m(v)m(ered)330 2052 y(w)m(ork)d(if)g(y)m(ou)g(are)h(a) -f(part)m(y)g(to)h(an)f(arrangemen)m(t)h(with)e(a)i(third)e(part)m(y)h -(that)g(is)g(in)g(the)g(business)f(of)330 2162 y(distributing)i(soft)m -(w)m(are,)i(under)d(whic)m(h)h(y)m(ou)h(mak)m(e)g(pa)m(ymen)m(t)g(to)g -(the)g(third)f(part)m(y)g(based)g(on)h(the)330 2271 y(exten)m(t)f(of)g -(y)m(our)f(activit)m(y)i(of)e(con)m(v)m(eying)i(the)e(w)m(ork,)h(and)e -(under)g(whic)m(h)g(the)i(third)e(part)m(y)h(gran)m(ts,)330 -2381 y(to)35 b(an)m(y)g(of)f(the)h(parties)f(who)g(w)m(ould)g(receiv)m -(e)i(the)f(co)m(v)m(ered)h(w)m(ork)e(from)g(y)m(ou,)i(a)f -(discriminatory)330 2491 y(paten)m(t)g(license)h(\(a\))f(in)f -(connection)h(with)f(copies)h(of)g(the)f(co)m(v)m(ered)i(w)m(ork)f(con) -m(v)m(ey)m(ed)h(b)m(y)e(y)m(ou)h(\(or)330 2600 y(copies)k(made)e(from)h -(those)g(copies\),)j(or)d(\(b\))g(primarily)f(for)h(and)f(in)h -(connection)h(with)e(sp)s(eci\014c)330 2710 y(pro)s(ducts)32 -b(or)i(compilations)h(that)f(con)m(tain)h(the)f(co)m(v)m(ered)i(w)m -(ork,)e(unless)f(y)m(ou)h(en)m(tered)h(in)m(to)f(that)330 -2819 y(arrangemen)m(t,)e(or)e(that)h(paten)m(t)g(license)h(w)m(as)e -(gran)m(ted,)i(prior)d(to)j(28)f(Marc)m(h)g(2007.)330 -2984 y(Nothing)23 b(in)e(this)h(License)h(shall)f(b)s(e)f(construed)h -(as)g(excluding)g(or)g(limiting)h(an)m(y)f(implied)g(license)h(or)330 -3093 y(other)k(defenses)f(to)h(infringemen)m(t)g(that)g(ma)m(y)g -(otherwise)g(b)s(e)e(a)m(v)-5 b(ailable)29 b(to)e(y)m(ou)g(under)e -(applicable)330 3203 y(paten)m(t)31 b(la)m(w.)154 3367 -y(12.)61 b(No)31 b(Surrender)d(of)i(Others')g(F)-8 b(reedom.)330 -3532 y(If)24 b(conditions)g(are)h(imp)s(osed)f(on)g(y)m(ou)g(\(whether) -g(b)m(y)g(court)h(order,)g(agreemen)m(t)h(or)e(otherwise\))h(that)330 -3641 y(con)m(tradict)35 b(the)f(conditions)h(of)e(this)h(License,)h -(they)f(do)g(not)g(excuse)g(y)m(ou)g(from)g(the)f(conditions)330 -3751 y(of)k(this)f(License.)59 b(If)36 b(y)m(ou)h(cannot)g(con)m(v)m -(ey)h(a)e(co)m(v)m(ered)i(w)m(ork)f(so)g(as)f(to)h(satisfy)g(sim)m -(ultaneously)330 3861 y(y)m(our)44 b(obligations)i(under)c(this)i -(License)h(and)e(an)m(y)i(other)f(p)s(ertinen)m(t)g(obligations,)49 -b(then)44 b(as)h(a)330 3970 y(consequence)40 b(y)m(ou)f(ma)m(y)g(not)g -(con)m(v)m(ey)i(it)e(at)h(all.)67 b(F)-8 b(or)40 b(example,)i(if)d(y)m -(ou)g(agree)h(to)g(terms)e(that)330 4080 y(obligate)32 -b(y)m(ou)e(to)h(collect)h(a)f(ro)m(y)m(alt)m(y)h(for)e(further)e(con)m -(v)m(eying)k(from)e(those)g(to)h(whom)e(y)m(ou)h(con)m(v)m(ey)330 -4189 y(the)h(Program,)h(the)f(only)g(w)m(a)m(y)h(y)m(ou)g(could)f -(satisfy)g(b)s(oth)g(those)g(terms)g(and)g(this)g(License)g(w)m(ould) -330 4299 y(b)s(e)f(to)h(refrain)f(en)m(tirely)h(from)f(con)m(v)m(eying) -i(the)f(Program.)154 4463 y(13.)61 b(Use)31 b(with)f(the)g(GNU)h -(A\013ero)g(General)h(Public)e(License.)330 4628 y(Not)m(withstanding) -39 b(an)m(y)g(other)f(pro)m(vision)h(of)f(this)g(License,)k(y)m(ou)c -(ha)m(v)m(e)i(p)s(ermission)d(to)i(link)f(or)330 4737 -y(com)m(bine)h(an)m(y)g(co)m(v)m(ered)i(w)m(ork)e(with)f(a)h(w)m(ork)g -(licensed)g(under)e(v)m(ersion)i(3)g(of)g(the)g(GNU)g(A\013ero)330 -4847 y(General)29 b(Public)f(License)h(in)m(to)h(a)f(single)g(com)m -(bined)f(w)m(ork,)h(and)f(to)h(con)m(v)m(ey)h(the)f(resulting)g(w)m -(ork.)330 4956 y(The)f(terms)g(of)g(this)h(License)f(will)h(con)m(tin)m -(ue)g(to)g(apply)f(to)h(the)g(part)f(whic)m(h)g(is)g(the)h(co)m(v)m -(ered)h(w)m(ork,)330 5066 y(but)38 b(the)h(sp)s(ecial)g(requiremen)m -(ts)f(of)h(the)g(GNU)g(A\013ero)g(General)g(Public)g(License,)i -(section)f(13,)330 5176 y(concerning)31 b(in)m(teraction)h(through)e(a) -h(net)m(w)m(ork)g(will)f(apply)g(to)i(the)e(com)m(bination)i(as)e(suc)m -(h.)154 5340 y(14.)61 b(Revised)31 b(V)-8 b(ersions)30 -b(of)h(this)f(License.)p eop end -%%Page: 10 12 -TeXDict begin 10 11 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2006 b(10)330 299 y(The)35 b(F)-8 b(ree)36 b(Soft)m(w)m(are)g -(F)-8 b(oundation)36 b(ma)m(y)g(publish)d(revised)i(and/or)g(new)g(v)m -(ersions)h(of)f(the)g(GNU)330 408 y(General)f(Public)f(License)g(from)g -(time)g(to)h(time.)49 b(Suc)m(h)33 b(new)f(v)m(ersions)h(will)h(b)s(e)e -(similar)h(in)g(spirit)330 518 y(to)e(the)g(presen)m(t)f(v)m(ersion,)h -(but)f(ma)m(y)h(di\013er)f(in)g(detail)i(to)f(address)e(new)h(problems) -g(or)g(concerns.)330 662 y(Eac)m(h)37 b(v)m(ersion)g(is)f(giv)m(en)h(a) -g(distinguishing)e(v)m(ersion)i(n)m(um)m(b)s(er.)57 b(If)36 -b(the)g(Program)g(sp)s(eci\014es)g(that)330 772 y(a)31 -b(certain)h(n)m(um)m(b)s(ered)d(v)m(ersion)i(of)g(the)g(GNU)g(General)h -(Public)e(License)h(\\or)g(an)m(y)g(later)h(v)m(ersion")330 -881 y(applies)h(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f -(follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 -991 y(n)m(um)m(b)s(ered)h(v)m(ersion)h(or)g(of)g(an)m(y)g(later)h(v)m -(ersion)g(published)d(b)m(y)i(the)g(F)-8 b(ree)35 b(Soft)m(w)m(are)g(F) --8 b(oundation.)330 1101 y(If)28 b(the)h(Program)g(do)s(es)g(not)g(sp)s -(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)h(the)g(GNU)g(General)h -(Public)e(License,)330 1210 y(y)m(ou)j(ma)m(y)g(c)m(ho)s(ose)g(an)m(y)g -(v)m(ersion)g(ev)m(er)g(published)d(b)m(y)j(the)f(F)-8 -b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation.)330 1354 -y(If)39 b(the)h(Program)g(sp)s(eci\014es)f(that)h(a)g(pro)m(xy)g(can)g -(decide)g(whic)m(h)f(future)g(v)m(ersions)h(of)f(the)h(GNU)330 -1464 y(General)34 b(Public)e(License)i(can)f(b)s(e)f(used,)h(that)h -(pro)m(xy's)e(public)h(statemen)m(t)h(of)f(acceptance)j(of)d(a)330 -1573 y(v)m(ersion)e(p)s(ermanen)m(tly)f(authorizes)h(y)m(ou)g(to)g(c)m -(ho)s(ose)g(that)g(v)m(ersion)g(for)f(the)h(Program.)330 -1718 y(Later)37 b(license)g(v)m(ersions)f(ma)m(y)h(giv)m(e)g(y)m(ou)g -(additional)g(or)f(di\013eren)m(t)h(p)s(ermissions.)56 -b(Ho)m(w)m(ev)m(er,)40 b(no)330 1827 y(additional)25 -b(obligations)i(are)e(imp)s(osed)f(on)g(an)m(y)h(author)f(or)h(cop)m -(yrigh)m(t)h(holder)e(as)h(a)g(result)f(of)h(y)m(our)330 -1937 y(c)m(ho)s(osing)31 b(to)g(follo)m(w)h(a)f(later)g(v)m(ersion.)154 -2081 y(15.)61 b(Disclaimer)32 b(of)f(W)-8 b(arran)m(t)m(y)g(.)330 -2225 y(THERE)47 b(IS)f(NO)h(W)-10 b(ARRANTY)48 b(F)m(OR)f(THE)g(PR)m -(OGRAM,)h(TO)f(THE)g(EXTENT)f(PER-)330 2335 y(MITTED)g(BY)i(APPLICABLE) -e(LA)-10 b(W.)47 b(EX)m(CEPT)f(WHEN)i(OTHER)-10 b(WISE)45 -b(ST)-8 b(A)g(TED)47 b(IN)330 2444 y(WRITING)34 b(THE)f(COPYRIGHT)g -(HOLDERS)g(AND/OR)i(OTHER)e(P)-8 b(AR)g(TIES)33 b(PR)m(O)m(VIDE)330 -2554 y(THE)d(PR)m(OGRAM)i(\\AS)e(IS")h(WITHOUT)f(W)-10 -b(ARRANTY)31 b(OF)g(ANY)g(KIND,)g(EITHER)f(EX-)330 2663 -y(PRESSED)k(OR)h(IMPLIED,)g(INCLUDING,)g(BUT)h(NOT)e(LIMITED)h(TO,)f -(THE)h(IMPLIED)330 2773 y(W)-10 b(ARRANTIES)38 b(OF)g(MER)m(CHANT)-8 -b(ABILITY)39 b(AND)g(FITNESS)e(F)m(OR)i(A)f(P)-8 b(AR)g(TICULAR)330 -2883 y(PURPOSE.)39 b(THE)h(ENTIRE)f(RISK)g(AS)h(TO)f(THE)g(QUALITY)h -(AND)h(PERF)m(ORMANCE)330 2992 y(OF)29 b(THE)g(PR)m(OGRAM)h(IS)f(WITH)g -(YOU.)h(SHOULD)f(THE)g(PR)m(OGRAM)h(PR)m(O)m(VE)g(DEFEC-)330 -3102 y(TIVE,)24 b(YOU)g(ASSUME)f(THE)h(COST)f(OF)h(ALL)g(NECESSAR)-8 -b(Y)23 b(SER)-10 b(VICING,)23 b(REP)-8 b(AIR)24 b(OR)330 -3211 y(CORRECTION.)154 3356 y(16.)61 b(Limitation)32 -b(of)e(Liabilit)m(y)-8 b(.)330 3500 y(IN)26 b(NO)g(EVENT)g(UNLESS)f -(REQUIRED)h(BY)h(APPLICABLE)f(LA)-10 b(W)26 b(OR)g(A)m(GREED)h(TO)f(IN) -330 3609 y(WRITING)37 b(WILL)f(ANY)i(COPYRIGHT)e(HOLDER,)h(OR)f(ANY)h -(OTHER)f(P)-8 b(AR)g(TY)38 b(WHO)330 3719 y(MODIFIES)33 -b(AND/OR)h(CONVEYS)e(THE)h(PR)m(OGRAM)h(AS)e(PERMITTED)h(ABO)m(VE,)h -(BE)330 3829 y(LIABLE)d(TO)e(YOU)i(F)m(OR)g(D)m(AMA)m(GES,)i(INCLUDING) -e(ANY)g(GENERAL,)g(SPECIAL,)f(IN-)330 3938 y(CIDENT)-8 -b(AL)32 b(OR)f(CONSEQUENTIAL)f(D)m(AMA)m(GES)j(ARISING)f(OUT)f(OF)h -(THE)f(USE)g(OR)330 4048 y(INABILITY)47 b(TO)f(USE)g(THE)g(PR)m(OGRAM)i -(\(INCLUDING)f(BUT)g(NOT)f(LIMITED)h(TO)330 4157 y(LOSS)28 -b(OF)h(D)m(A)-8 b(T)g(A)31 b(OR)e(D)m(A)-8 b(T)g(A)31 -b(BEING)f(RENDERED)f(INA)m(CCURA)-8 b(TE)30 b(OR)e(LOSSES)g(SUS-)330 -4267 y(T)-8 b(AINED)43 b(BY)g(YOU)f(OR)g(THIRD)h(P)-8 -b(AR)g(TIES)42 b(OR)g(A)g(F)-10 b(AILURE)43 b(OF)f(THE)g(PR)m(OGRAM)330 -4376 y(TO)30 b(OPERA)-8 b(TE)29 b(WITH)i(ANY)f(OTHER)g(PR)m(OGRAMS\),)h -(EVEN)f(IF)h(SUCH)e(HOLDER)h(OR)330 4486 y(OTHER)36 b(P)-8 -b(AR)g(TY)37 b(HAS)g(BEEN)f(AD)m(VISED)i(OF)f(THE)f(POSSIBILITY)f(OF)h -(SUCH)g(D)m(AM-)330 4596 y(A)m(GES.)154 4740 y(17.)61 -b(In)m(terpretation)31 b(of)g(Sections)g(15)g(and)f(16.)330 -4884 y(If)d(the)h(disclaimer)g(of)f(w)m(arran)m(t)m(y)i(and)d -(limitation)k(of)d(liabilit)m(y)j(pro)m(vided)d(ab)s(o)m(v)m(e)h -(cannot)g(b)s(e)f(giv)m(en)330 4994 y(lo)s(cal)35 b(legal)h(e\013ect)g -(according)f(to)f(their)h(terms,)g(reviewing)f(courts)g(shall)h(apply)e -(lo)s(cal)j(la)m(w)e(that)330 5103 y(most)j(closely)i(appro)m(ximates)f -(an)f(absolute)g(w)m(aiv)m(er)i(of)e(all)g(civil)i(liabilit)m(y)f(in)f -(connection)h(with)330 5213 y(the)d(Program,)i(unless)d(a)h(w)m(arran)m -(t)m(y)h(or)f(assumption)g(of)g(liabilit)m(y)i(accompanies)f(a)g(cop)m -(y)g(of)f(the)330 5322 y(Program)c(in)f(return)f(for)h(a)h(fee.)p -eop end -%%Page: 11 13 -TeXDict begin 11 12 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2006 b(11)150 299 y Fu(END)45 b(OF)g(TERMS)f(AND)h(CONDITIONS) -150 556 y(Ho)l(w)h(to)f(Apply)f(These)h(T)-11 b(erms)45 -b(to)g(Y)-11 b(our)44 b(New)i(Programs)275 716 y Fv(If)38 -b(y)m(ou)i(dev)m(elop)g(a)f(new)g(program,)j(and)c(y)m(ou)i(w)m(an)m(t) -g(it)f(to)h(b)s(e)f(of)g(the)h(greatest)h(p)s(ossible)d(use)h(to)150 -825 y(the)i(public,)i(the)f(b)s(est)e(w)m(a)m(y)i(to)g(ac)m(hiev)m(e)h -(this)e(is)g(to)h(mak)m(e)g(it)g(free)f(soft)m(w)m(are)h(whic)m(h)f(ev) -m(ery)m(one)i(can)150 935 y(redistribute)30 b(and)g(c)m(hange)h(under)e -(these)i(terms.)275 1069 y(T)-8 b(o)29 b(do)h(so,)g(attac)m(h)h(the)f -(follo)m(wing)h(notices)f(to)h(the)e(program.)40 b(It)30 -b(is)g(safest)g(to)g(attac)m(h)h(them)f(to)g(the)150 -1179 y(start)38 b(of)g(eac)m(h)g(source)g(\014le)f(to)h(most)g -(e\013ectiv)m(ely)i(state)f(the)f(exclusion)g(of)f(w)m(arran)m(t)m(y;) -42 b(and)37 b(eac)m(h)i(\014le)150 1289 y(should)29 b(ha)m(v)m(e)j(at)f -(least)h(the)e(\\cop)m(yrigh)m(t")j(line)e(and)e(a)i(p)s(oin)m(ter)g -(to)g(where)f(the)g(full)g(notice)i(is)e(found.)390 1401 -y Fq(one)40 b(line)g(to)g(give)g(the)g(program's)h(name)f(and)g(a)g -(brief)g(idea)g(of)g(what)g(it)g(does.)390 1488 y Fp(Copyright)h(\(C\)) -f Fq(year)49 b(name)40 b(of)g(author)390 1662 y Fp(This)g(program)h(is) -f(free)g(software:)h(you)f(can)g(redistribute)i(it)e(and/or)g(modify) -390 1749 y(it)g(under)g(the)g(terms)g(of)g(the)g(GNU)g(General)h -(Public)f(License)h(as)f(published)h(by)390 1836 y(the)f(Free)g -(Software)h(Foundation,)h(either)e(version)h(3)f(of)f(the)h(License,)h -(or)f(\(at)390 1924 y(your)g(option\))h(any)f(later)g(version.)390 -2098 y(This)g(program)h(is)f(distributed)h(in)f(the)g(hope)g(that)g(it) -g(will)g(be)g(useful,)h(but)390 2185 y(WITHOUT)g(ANY)f(WARRANTY;)h -(without)g(even)f(the)g(implied)h(warranty)g(of)390 2272 -y(MERCHANTABILITY)i(or)c(FITNESS)i(FOR)f(A)g(PARTICULAR)h(PURPOSE.)80 -b(See)40 b(the)g(GNU)390 2359 y(General)h(Public)f(License)h(for)f -(more)g(details.)390 2534 y(You)g(should)g(have)h(received)g(a)e(copy)h -(of)g(the)g(GNU)g(General)h(Public)f(License)390 2621 -y(along)g(with)g(this)h(program.)80 b(If)40 b(not,)g(see)g -(http://www.gnu.org/licenses/.)275 2756 y Fv(Also)31 -b(add)e(information)i(on)f(ho)m(w)h(to)g(con)m(tact)i(y)m(ou)d(b)m(y)g -(electronic)j(and)d(pap)s(er)f(mail.)275 2890 y(If)e(the)i(program)f -(do)s(es)f(terminal)i(in)m(teraction,)i(mak)m(e)e(it)g(output)f(a)g -(short)g(notice)i(lik)m(e)f(this)f(when)f(it)150 3000 -y(starts)k(in)f(an)g(in)m(teractiv)m(e)j(mo)s(de:)390 -3112 y Fq(program)49 b Fp(Copyright)42 b(\(C\))e Fq(year)48 -b(name)41 b(of)e(author)390 3199 y Fp(This)h(program)h(comes)f(with)g -(ABSOLUTELY)i(NO)e(WARRANTY;)h(for)f(details)h(type)f(`show)g(w'.)390 -3286 y(This)g(is)g(free)g(software,)h(and)f(you)g(are)g(welcome)h(to)e -(redistribute)j(it)390 3373 y(under)e(certain)h(conditions;)h(type)e -(`show)g(c')g(for)g(details.)275 3508 y Fv(The)27 b(h)m(yp)s(othetical) -i(commands)f(`)p Fr(show)h(w)p Fv(')f(and)f(`)p Fr(show)j(c)p -Fv(')d(should)g(sho)m(w)h(the)g(appropriate)g(parts)g(of)150 -3617 y(the)i(General)h(Public)f(License.)41 b(Of)30 b(course,)h(y)m -(our)f(program's)g(commands)f(migh)m(t)i(b)s(e)f(di\013eren)m(t;)h(for) -f(a)150 3727 y(GUI)h(in)m(terface,)h(y)m(ou)f(w)m(ould)f(use)g(an)g -(\\ab)s(out)h(b)s(o)m(x".)275 3861 y(Y)-8 b(ou)34 b(should)f(also)i -(get)g(y)m(our)e(emplo)m(y)m(er)i(\(if)g(y)m(ou)f(w)m(ork)g(as)g(a)g -(programmer\))g(or)g(sc)m(ho)s(ol,)i(if)d(an)m(y)-8 b(,)36 -b(to)150 3971 y(sign)d(a)g(\\cop)m(yrigh)m(t)h(disclaimer")g(for)e(the) -h(program,)g(if)f(necessary)-8 b(.)48 b(F)-8 b(or)34 -b(more)e(information)h(on)g(this,)150 4081 y(and)d(ho)m(w)g(to)h(apply) -f(and)g(follo)m(w)i(the)e(GNU)h(GPL,)g(see)g Fr -(http://www.gnu.org/licen)o(ses)o(/)p Fv(.)275 4215 y(The)44 -b(GNU)h(General)g(Public)f(License)i(do)s(es)e(not)h(p)s(ermit)e -(incorp)s(orating)i(y)m(our)g(program)f(in)m(to)150 4325 -y(proprietary)35 b(programs.)57 b(If)35 b(y)m(our)h(program)f(is)h(a)g -(subroutine)f(library)-8 b(,)37 b(y)m(ou)f(ma)m(y)h(consider)e(it)i -(more)150 4434 y(useful)30 b(to)i(p)s(ermit)e(linking)i(proprietary)e -(applications)i(with)f(the)g(library)-8 b(.)43 b(If)31 -b(this)g(is)g(what)g(y)m(ou)g(w)m(an)m(t)150 4544 y(to)f(do,)g(use)f -(the)g(GNU)h(Lesser)g(General)g(Public)f(License)h(instead)g(of)f(this) -h(License.)40 b(But)30 b(\014rst,)f(please)150 4653 y(read)h -Fr(http://www.gnu.org/philos)o(ophy)o(/why)o(-no)o(t-lg)o(pl.h)o(tml)o -Fv(.)p eop end -%%Page: 12 14 -TeXDict begin 12 13 bop 150 -116 a Fv(Con)m(tributors)30 -b(to)h(GNU)g Fr(gperf)e Fv(Utilit)m(y)2094 b(12)150 299 -y Fs(Con)l(tributors)50 b(to)j(GNU)h Fo(gperf)f Fs(Utilit)l(y)225 -533 y Ft(\017)60 b Fv(The)45 b(GNU)h Fr(gperf)d Fv(p)s(erfect)j(hash)e -(function)h(generator)i(utilit)m(y)f(w)m(as)g(written)f(in)g(GNU)h(C)p -Fr(++)330 643 y Fv(b)m(y)e(Douglas)i(C.)f(Sc)m(hmidt.)83 -b(The)44 b(general)i(idea)f(for)f(the)h(p)s(erfect)g(hash)e(function)i -(generator)330 752 y(w)m(as)34 b(inspired)e(b)m(y)h(Keith)g(Bostic's)j -(algorithm)e(written)f(in)g(C,)g(and)g(distributed)f(to)i(net.sources) -330 862 y(around)42 b(1984.)79 b(The)42 b(curren)m(t)g(program)h(is)g -(a)g(hea)m(vily)h(mo)s(di\014ed,)g(enhanced,)i(and)c(extended)330 -971 y(implemen)m(tation)d(of)e(Keith's)g(basic)h(idea,)h(created)f(at)g -(the)f(Univ)m(ersit)m(y)h(of)g(California,)h(Irvine.)330 -1081 y(Bugs,)31 b(patc)m(hes,)g(and)f(suggestions)h(should)f(b)s(e)f -(rep)s(orted)h(to)h Fr()p Fv(.)225 -1215 y Ft(\017)60 b Fv(Sp)s(ecial)33 b(thanks)g(is)g(extended)g(to)h -(Mic)m(hael)h(Tiemann)e(and)g(Doug)h(Lea,)g(for)f(pro)m(viding)g(a)h -(useful)330 1325 y(compiler,)d(and)f(for)g(giving)h(me)g(a)g(forum)e -(to)i(exhibit)g(m)m(y)f(creation.)330 1460 y(In)22 b(addition,)i(Adam)f -(de)f(Bo)s(or)h(and)f(Nels)i(Olson)e(pro)m(vided)g(man)m(y)h(tips)f -(and)g(insigh)m(ts)h(that)g(greatly)330 1569 y(help)s(ed)29 -b(impro)m(v)m(e)j(the)e(qualit)m(y)i(and)e(functionalit)m(y)h(of)g -Fr(gperf)p Fv(.)225 1704 y Ft(\017)60 b Fv(Bruno)26 b(Haible)i -(enhanced)f(and)f(optimized)i(the)f(searc)m(h)h(algorithm.)41 -b(He)27 b(also)h(rewrote)g(the)f(input)330 1813 y(routines)j(and)g(the) -h(output)f(routines)g(for)g(b)s(etter)g(reliabilit)m(y)-8 -b(,)33 b(and)d(added)g(a)h(testsuite.)p eop end -%%Page: 13 15 -TeXDict begin 13 14 bop 150 -116 a Fv(Chapter)30 b(1:)41 -b(In)m(tro)s(duction)2546 b(13)150 299 y Fs(1)80 b(In)l(tro)t(duction) -275 533 y Fr(gperf)31 b Fv(is)j(a)f(p)s(erfect)h(hash)e(function)h -(generator)i(written)e(in)g(C)p Fr(++)p Fv(.)49 b(It)33 -b(transforms)g(an)g Fn(n)f Fv(elemen)m(t)150 643 y(user-sp)s(eci\014ed) -k(k)m(eyw)m(ord)i(set)g Fn(W)49 b Fv(in)m(to)39 b(a)e(p)s(erfect)h -(hash)e(function)h Fn(F)p Fv(.)h Fn(F)44 b Fv(uniquely)37 -b(maps)g(k)m(eyw)m(ords)150 752 y(in)e Fn(W)47 b Fv(on)m(to)36 -b(the)f(range)g(0..)p Fn(k)p Fv(,)j(where)c Fn(k)40 b -Fr(>)p Fv(=)35 b Fn(n-1)p Fv(.)54 b(If)35 b Fn(k)40 b -Fv(=)35 b Fn(n-1)42 b Fv(then)35 b Fn(F)42 b Fv(is)35 -b(a)g Fm(minimal)46 b Fv(p)s(erfect)35 b(hash)150 862 -y(function.)68 b Fr(gperf)39 b Fv(generates)i(a)f(0..)p -Fn(k)46 b Fv(elemen)m(t)41 b(static)g(lo)s(okup)f(table)g(and)f(a)i -(pair)e(of)h(C)f(functions.)150 971 y(These)34 b(functions)g(determine) -h(whether)e(a)i(giv)m(en)g(c)m(haracter)h(string)f Fn(s)j -Fv(o)s(ccurs)c(in)g Fn(W)p Fv(,)h(using)e(at)j(most)150 -1081 y(one)31 b(prob)s(e)e(in)m(to)i(the)g(lo)s(okup)f(table.)275 -1215 y Fr(gperf)22 b Fv(curren)m(tly)h(generates)j(the)d(reserv)m(ed)h -(k)m(eyw)m(ord)g(recognizer)i(for)d(lexical)j(analyzers)e(in)g(sev)m -(eral)150 1325 y(pro)s(duction)30 b(and)g(researc)m(h)h(compilers)g -(and)g(language)h(pro)s(cessing)e(to)s(ols,)i(including)e(GNU)i(C,)e -(GNU)150 1435 y(C)p Fr(++)p Fv(,)24 b(GNU)f(Ja)m(v)-5 -b(a,)26 b(GNU)d(P)m(ascal,)j(GNU)e(Mo)s(dula)f(3,)i(and)d(GNU)h(inden)m -(t.)38 b(Complete)24 b(C)p Fr(++)e Fv(source)h(co)s(de)150 -1544 y(for)42 b Fr(gperf)f Fv(is)h(a)m(v)-5 b(ailable)44 -b(from)e Fr(http://ftp.gnu.org/pub/g)o(nu/g)o(perf)o(/)p -Fv(.)70 b(A)42 b(pap)s(er)f(describing)150 1654 y Fr(gperf)p -Fv('s)d(design)i(and)f(implemen)m(tation)j(in)d(greater)i(detail)g(is)f -(a)m(v)-5 b(ailable)42 b(in)e(the)g(Second)f(USENIX)150 -1763 y(C)p Fr(++)29 b Fv(Conference)g(pro)s(ceedings)h(or)g(from)f -Fr(http://www.cs.wustl.edu)o(/~sc)o(hmid)o(t/r)o(esum)o(e.ht)o(ml)p -Fv(.)p eop end -%%Page: 14 16 -TeXDict begin 14 15 bop 150 -116 a Fv(Chapter)30 b(2:)41 -b(Static)32 b(searc)m(h)f(structures)e(and)h(GNU)h Fr(gperf)1425 -b Fv(14)150 299 y Fs(2)80 b(Static)53 b(searc)l(h)g(structures)e(and)j -(GNU)f Fo(gperf)275 533 y Fv(A)24 b Fn(static)i(searc)m(h)f(structure)k -Fv(is)c(an)f(Abstract)h(Data)i(T)m(yp)s(e)c(with)i(certain)g(fundamen)m -(tal)f(op)s(erations,)150 643 y(e.g.,)32 b Fm(initialize)p -Fv(,)g Fm(insert)p Fv(,)f(and)f Fm(r)-5 b(etrieve)p Fv(.)42 -b(Conceptually)-8 b(,)32 b(all)g(insertions)f(o)s(ccur)f(b)s(efore)h -(an)m(y)g(retriev)-5 b(als.)150 752 y(In)20 b(practice,)25 -b Fr(gperf)19 b Fv(generates)k(a)e Fm(static)27 b Fv(arra)m(y)22 -b(con)m(taining)g(searc)m(h)g(set)f(k)m(eyw)m(ords)h(and)e(an)m(y)h -(asso)s(ciated)150 862 y(attributes)37 b(sp)s(eci\014ed)f(b)m(y)h(the)f -(user.)59 b(Th)m(us,)37 b(there)g(is)g(essen)m(tially)h(no)f -(execution-time)i(cost)e(for)g(the)150 971 y(insertions.)j(It)27 -b(is)g(a)g(useful)g(data)g(structure)g(for)g(represen)m(ting)g -Fm(static)j(se)-5 b(ar)g(ch)32 b(sets)p Fv(.)40 b(Static)28 -b(searc)m(h)g(sets)150 1081 y(o)s(ccur)c(frequen)m(tly)h(in)f(soft)m(w) -m(are)i(system)e(applications.)40 b(T)m(ypical)25 b(static)h(searc)m(h) -f(sets)g(include)f(compiler)150 1191 y(reserv)m(ed)42 -b(w)m(ords,)j(assem)m(bler)e(instruction)f(op)s(co)s(des,)j(and)c -(built-in)h(shell)h(in)m(terpreter)f(commands.)150 1300 -y(Searc)m(h)g(set)g(mem)m(b)s(ers,)h(called)g Fn(k)m(eyw)m(ords)p -Fv(,)i(are)c(inserted)h(in)m(to)g(the)g(structure)f(only)g(once,)k -(usually)150 1410 y(during)29 b(program)h(initialization,)k(and)c(are)g -(not)h(generally)h(mo)s(di\014ed)d(at)i(run-time.)275 -1544 y(Numerous)c(static)i(searc)m(h)g(structure)e(implemen)m(tations)i -(exist,)h(e.g.,)f(arra)m(ys,)g(link)m(ed)g(lists,)g(binary)150 -1654 y(searc)m(h)45 b(trees,)j(digital)d(searc)m(h)g(tries,)j(and)43 -b(hash)g(tables.)83 b(Di\013eren)m(t)45 b(approac)m(hes)g(o\013er)f -(trade-o\013s)150 1763 y(b)s(et)m(w)m(een)e(space)h(utilization)g(and)f -(searc)m(h)g(time)g(e\016ciency)-8 b(.)77 b(F)-8 b(or)42 -b(example,)k(an)41 b Fn(n)h Fv(elemen)m(t)h(sorted)150 -1873 y(arra)m(y)d(is)g(space)h(e\016cien)m(t,)i(though)d(the)g(a)m(v)m -(erage-case)k(time)c(complexit)m(y)i(for)e(retriev)-5 -b(al)41 b(op)s(erations)150 1983 y(using)31 b(binary)f(searc)m(h)i(is)f -(prop)s(ortional)g(to)g(log)i Fn(n)p Fv(.)42 b(Con)m(v)m(ersely)-8 -b(,)33 b(hash)d(table)i(implemen)m(tations)h(often)150 -2092 y(lo)s(cate)27 b(a)f(table)g(en)m(try)g(in)f(constan)m(t)i(time,)g -(but)e(t)m(ypically)i(imp)s(ose)e(additional)i(memory)e(o)m(v)m(erhead) -i(and)150 2202 y(exhibit)k(p)s(o)s(or)e(w)m(orst)i(case)g(p)s -(erformance.)275 2336 y Fm(Minimal)26 b(p)-5 b(erfe)g(ct)28 -b(hash)f(functions)32 b Fv(pro)m(vide)24 b(an)f(optimal)i(solution)f -(for)f(a)h(particular)g(class)h(of)e(static)150 2446 -y(searc)m(h)31 b(sets.)41 b(A)31 b(minimal)f(p)s(erfect)g(hash)g -(function)g(is)h(de\014ned)e(b)m(y)h(t)m(w)m(o)i(prop)s(erties:)225 -2580 y Ft(\017)60 b Fv(It)34 b(allo)m(ws)i(k)m(eyw)m(ord)f(recognition) -h(in)e(a)h(static)h(searc)m(h)f(set)g(using)f(at)h(most)g -Fm(one)41 b Fv(prob)s(e)33 b(in)m(to)j(the)330 2690 y(hash)30 -b(table.)41 b(This)30 b(represen)m(ts)g(the)h(\\p)s(erfect")g(prop)s -(ert)m(y)-8 b(.)225 2824 y Ft(\017)60 b Fv(The)35 b(actual)j(memory)e -(allo)s(cated)i(to)e(store)h(the)f(k)m(eyw)m(ords)h(is)f(precisely)g -(large)h(enough)f(for)g(the)330 2934 y(k)m(eyw)m(ord)31 -b(set,)g(and)f Fm(no)j(lar)-5 b(ger)p Fv(.)42 b(This)29 -b(is)i(the)f(\\minimal")i(prop)s(ert)m(y)-8 b(.)275 3093 -y(F)g(or)38 b(most)g(applications)h(it)f(is)g(far)f(easier)i(to)f -(generate)h Fm(p)-5 b(erfe)g(ct)47 b Fv(hash)37 b(functions)g(than)h -Fm(minimal)150 3203 y(p)-5 b(erfe)g(ct)47 b Fv(hash)36 -b(functions.)60 b(Moreo)m(v)m(er,)41 b(non-minimal)c(p)s(erfect)g(hash) -f(functions)g(frequen)m(tly)i(execute)150 3313 y(faster)44 -b(than)g(minimal)g(ones)g(in)f(practice.)83 b(This)43 -b(phenomena)g(o)s(ccurs)g(since)h(searc)m(hing)h(a)f(sparse)150 -3422 y(k)m(eyw)m(ord)34 b(table)g(increases)g(the)g(probabilit)m(y)f -(of)h(lo)s(cating)h(a)e(\\n)m(ull")i(en)m(try)-8 b(,)35 -b(thereb)m(y)e(reducing)g(string)150 3532 y(comparisons.)56 -b Fr(gperf)p Fv('s)34 b(default)h(b)s(eha)m(vior)g(generates)i -Fm(ne)-5 b(ar-minimal)47 b Fv(p)s(erfect)35 b(hash)f(functions)h(for) -150 3641 y(k)m(eyw)m(ord)40 b(sets.)68 b(Ho)m(w)m(ev)m(er,)44 -b Fr(gperf)39 b Fv(pro)m(vides)g(man)m(y)h(options)f(that)h(p)s(ermit)f -(user)g(con)m(trol)i(o)m(v)m(er)g(the)150 3751 y(degree)31 -b(of)g(minimalit)m(y)g(and)f(p)s(erfection.)275 3885 -y(Static)37 b(searc)m(h)f(sets)g(often)g(exhibit)g(relativ)m(e)i -(stabilit)m(y)f(o)m(v)m(er)g(time.)58 b(F)-8 b(or)36 -b(example,)i(Ada's)e(63)h(re-)150 3995 y(serv)m(ed)31 -b(w)m(ords)f(ha)m(v)m(e)i(remained)e(constan)m(t)i(for)f(nearly)g(a)g -(decade.)42 b(It)31 b(is)g(therefore)g(frequen)m(tly)g(w)m(orth-)150 -4105 y(while)22 b(to)h(exp)s(end)e(concerted)i(e\013ort)g(building)e -(an)h(optimal)i(searc)m(h)e(structure)g Fm(onc)-5 b(e)p -Fv(,)25 b(if)d(it)g(subsequen)m(tly)150 4214 y(receiv)m(es)j(hea)m(vy)f -(use)e(m)m(ultiple)i(times.)39 b Fr(gperf)22 b Fv(remo)m(v)m(es)i(the)f -(drudgery)f(asso)s(ciated)j(with)d(constructing)150 4324 -y(time-)38 b(and)f(space-e\016cien)m(t)j(searc)m(h)d(structures)g(b)m -(y)g(hand.)61 b(It)37 b(has)g(pro)m(v)m(en)h(a)f(useful)g(and)f -(practical)150 4433 y(to)s(ol)29 b(for)f(serious)g(programming)g(pro)5 -b(jects.)40 b(Output)27 b(from)h Fr(gperf)e Fv(is)i(curren)m(tly)h -(used)e(in)h(sev)m(eral)h(pro-)150 4543 y(duction)d(and)e(researc)m(h)j -(compilers,)g(including)e(GNU)h(C,)g(GNU)g(C)p Fr(++)p -Fv(,)g(GNU)g(Ja)m(v)-5 b(a,)28 b(GNU)e(P)m(ascal,)j(and)150 -4653 y(GNU)38 b(Mo)s(dula)f(3.)63 b(The)36 b(latter)j(t)m(w)m(o)g -(compilers)f(are)f(not)h(y)m(et)h(part)e(of)g(the)h(o\016cial)h(GNU)f -(distribu-)150 4762 y(tion.)51 b(Eac)m(h)34 b(compiler)g(utilizes)h -Fr(gperf)d Fv(to)i(automatically)i(generate)f(static)g(searc)m(h)f -(structures)f(that)150 4872 y(e\016cien)m(tly)f(iden)m(tify)f(their)f -(resp)s(ectiv)m(e)i(reserv)m(ed)e(k)m(eyw)m(ords.)p eop -end -%%Page: 15 17 -TeXDict begin 15 16 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(15)150 299 y Fs(3)80 b(High-Lev)l(el)52 b(Description)f(of)j(GNU)g -Fo(gperf)275 555 y Fv(The)29 b(p)s(erfect)h(hash)g(function)g -(generator)h Fr(gperf)e Fv(reads)h(a)h(set)g(of)f(\\k)m(eyw)m(ords")i -(from)d(an)i(input)e(\014le)150 664 y(\(or)34 b(from)g(the)g(standard)f -(input)g(b)m(y)h(default\).)52 b(It)34 b(attempts)h(to)f(deriv)m(e)h(a) -f(p)s(erfect)g(hashing)f(function)150 774 y(that)k(recognizes)i(a)e -(mem)m(b)s(er)f(of)h(the)g Fn(static)h(k)m(eyw)m(ord)f(set)j -Fv(with)c(at)i(most)f(a)g(single)g(prob)s(e)f(in)m(to)i(the)150 -884 y(lo)s(okup)26 b(table.)41 b(If)26 b Fr(gperf)f Fv(succeeds)i(in)g -(generating)h(suc)m(h)e(a)h(function)f(it)i(pro)s(duces)d(a)i(pair)g -(of)f(C)h(source)150 993 y(co)s(de)39 b(routines)g(that)h(p)s(erform)d -(hashing)i(and)f(table)i(lo)s(okup)e(recognition.)69 -b(All)39 b(generated)h(C)f(co)s(de)150 1103 y(is)f(directed)g(to)g(the) -g(standard)f(output.)62 b(Command-line)38 b(options)g(describ)s(ed)e(b) -s(elo)m(w)i(allo)m(w)h(y)m(ou)f(to)150 1212 y(mo)s(dify)30 -b(the)g(input)g(and)f(output)h(format)h(to)g Fr(gperf)p -Fv(.)275 1354 y(By)23 b(default,)i Fr(gperf)d Fv(attempts)i(to)g(pro)s -(duce)e(time-e\016cien)m(t)k(co)s(de,)f(with)e(less)h(emphasis)e(on)h -(e\016cien)m(t)150 1464 y(space)31 b(utilization.)43 -b(Ho)m(w)m(ev)m(er,)33 b(sev)m(eral)e(options)g(exist)g(that)g(p)s -(ermit)f(trading-o\013)h(execution)h(time)f(for)150 1573 -y(storage)i(space)f(and)g(vice)g(v)m(ersa.)46 b(In)31 -b(particular,)h(expanding)f(the)h(generated)h(table)g(size)f(pro)s -(duces)f(a)150 1683 y(sparse)26 b(searc)m(h)g(structure,)h(generally)g -(yielding)f(faster)h(searc)m(hes.)40 b(Con)m(v)m(ersely)-8 -b(,)28 b(y)m(ou)f(can)f(direct)g Fr(gperf)150 1793 y -Fv(to)21 b(utilize)h(a)f(C)f Fr(switch)f Fv(statemen)m(t)k(sc)m(heme)e -(that)g(minimizes)g(data)g(space)g(storage)h(size.)39 -b(F)-8 b(urthermore,)150 1902 y(using)40 b(a)g(C)g Fr(switch)e -Fv(ma)m(y)i(actually)i(sp)s(eed)d(up)g(the)h(k)m(eyw)m(ord)h(retriev)-5 -b(al)41 b(time)g(somewhat.)70 b(Actual)150 2012 y(results)30 -b(dep)s(end)f(on)h(y)m(our)g(C)g(compiler,)i(of)e(course.)275 -2154 y(In)44 b(general,)50 b Fr(gperf)44 b Fv(assigns)h(v)-5 -b(alues)46 b(to)g(the)f(b)m(ytes)h(it)g(is)f(using)g(for)g(hashing)f -(un)m(til)i(some)f(set)150 2263 y(of)d(v)-5 b(alues)43 -b(giv)m(es)g(eac)m(h)h(k)m(eyw)m(ord)e(a)h(unique)e(v)-5 -b(alue.)77 b(A)42 b(helpful)f(heuristic)i(is)f(that)h(the)f(larger)h -(the)150 2373 y(hash)36 b(v)-5 b(alue)37 b(range,)i(the)e(easier)h(it)f -(is)g(for)f Fr(gperf)f Fv(to)j(\014nd)d(and)h(generate)i(a)f(p)s -(erfect)g(hash)f(function.)150 2482 y(Exp)s(erimen)m(tation)31 -b(is)f(the)h(k)m(ey)g(to)g(getting)h(the)f(most)g(from)e -Fr(gperf)p Fv(.)150 2726 y Fu(3.1)68 b(Input)44 b(F)-11 -b(ormat)46 b(to)f Fl(gperf)275 2885 y Fv(Y)-8 b(ou)38 -b(can)g(con)m(trol)i(the)e(input)f(\014le)h(format)g(b)m(y)g(v)-5 -b(arying)38 b(certain)g(command-line)h(argumen)m(ts,)h(in)150 -2995 y(particular)f(the)g(`)p Fr(-t)p Fv(')g(option.)66 -b(The)38 b(input's)g(app)s(earance)h(is)g(similar)g(to)g(GNU)h -(utilities)g Fr(flex)e Fv(and)150 3104 y Fr(bison)29 -b Fv(\(or)i(UNIX)f(utilities)i Fr(lex)e Fv(and)f Fr(yacc)p -Fv(\).)40 b(Here's)31 b(an)g(outline)g(of)f(the)h(general)g(format:)390 -3246 y Fr(declarations)390 3356 y(\045\045)390 3465 y(keywords)390 -3575 y(\045\045)390 3684 y(functions)275 3826 y Fm(Unlike)41 -b Fr(flex)35 b Fv(or)g Fr(bison)p Fv(,)h(the)g(declarations)g(section)h -(and)e(the)h(functions)f(section)i(are)f(optional.)150 -3936 y(The)30 b(follo)m(wing)i(sections)f(describ)s(e)f(the)g(input)g -(format)h(for)f(eac)m(h)h(section.)275 4078 y(It)h(is)g(p)s(ossible)g -(to)h(omit)g(the)g(declaration)h(section)f(en)m(tirely)-8 -b(,)35 b(if)d(the)h(`)p Fr(-t)p Fv(')f(option)h(is)f(not)h(giv)m(en.)48 -b(In)150 4187 y(this)30 b(case)i(the)e(input)g(\014le)g(b)s(egins)g -(directly)h(with)f(the)h(\014rst)e(k)m(eyw)m(ord)i(line,)g(e.g.:)390 -4329 y Fr(january)390 4439 y(february)390 4548 y(march)390 -4658 y(april)390 4767 y(...)150 4974 y Fk(3.1.1)63 b(Declarations)275 -5121 y Fv(The)33 b(k)m(eyw)m(ord)i(input)f(\014le)g(optionally)i(con)m -(tains)g(a)f(section)g(for)f(including)g(arbitrary)h(C)f(declara-)150 -5230 y(tions)d(and)e(de\014nitions,)h Fr(gperf)f Fv(declarations)j -(that)f(act)g(lik)m(e)h(command-line)f(options,)g(as)f(w)m(ell)i(as)e -(for)150 5340 y(pro)m(viding)g(a)h(user-supplied)e Fr(struct)p -Fv(.)p eop end -%%Page: 16 18 -TeXDict begin 16 17 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(16)150 299 y Fk(3.1.1.1)63 b(User-supplied)43 b -Fj(struct)275 446 y Fv(If)24 b(the)h(`)p Fr(-t)p Fv(')f(option)h(\(or,) -i(equiv)-5 b(alen)m(tly)d(,)28 b(the)d(`)p Fr(\045struct-type)p -Fv(')d(declaration\))k Fm(is)32 b Fv(enabled,)26 b(y)m(ou)f -Fm(must)150 555 y Fv(pro)m(vide)37 b(a)f(C)h Fr(struct)d -Fv(as)j(the)g(last)g(comp)s(onen)m(t)g(in)f(the)h(declaration)h -(section)f(from)f(the)h(input)f(\014le.)150 665 y(The)26 -b(\014rst)f(\014eld)h(in)g(this)g(struct)g(m)m(ust)g(b)s(e)g(of)g(t)m -(yp)s(e)g Fr(char)j(*)d Fv(or)g Fr(const)j(char)h(*)25 -b Fv(if)h(the)h(`)p Fr(-P)p Fv(')f(option)g(is)h(not)150 -775 y(giv)m(en,)k(or)g(of)f(t)m(yp)s(e)g Fr(int)g Fv(if)g(the)g(option) -h(`)p Fr(-P)p Fv(')f(\(or,)h(equiv)-5 b(alen)m(tly)d(,)32 -b(the)f(`)p Fr(\045pic)p Fv(')e(declaration\))j(is)f(enabled.)150 -884 y(This)k(\014rst)f(\014eld)h(m)m(ust)h(b)s(e)e(called)j(`)p -Fr(name)p Fv(',)f(although)g(it)g(is)g(p)s(ossible)f(to)h(mo)s(dify)e -(its)i(name)g(with)f(the)150 994 y(`)p Fr(-K)p Fv(')30 -b(option)h(\(or,)g(equiv)-5 b(alen)m(tly)d(,)33 b(the)d(`)p -Fr(\045define)f(slot-name)p Fv(')f(declaration\))k(describ)s(ed)e(b)s -(elo)m(w.)275 1139 y(Here)g(is)h(a)g(simple)f(example,)h(using)f(mon)m -(ths)g(of)h(the)f(y)m(ear)i(and)d(their)i(attributes)g(as)f(input:)390 -1284 y Fr(struct)46 b(month)g({)i(char)f(*name;)f(int)h(number;)e(int)i -(days;)g(int)g(leap_days;)e(};)390 1393 y(\045\045)390 -1503 y(january,)141 b(1,)47 b(31,)g(31)390 1612 y(february,)93 -b(2,)47 b(28,)g(29)390 1722 y(march,)237 b(3,)47 b(31,)g(31)390 -1832 y(april,)237 b(4,)47 b(30,)g(30)390 1941 y(may,)333 -b(5,)47 b(31,)g(31)390 2051 y(june,)285 b(6,)47 b(30,)g(30)390 -2160 y(july,)285 b(7,)47 b(31,)g(31)390 2270 y(august,)189 -b(8,)47 b(31,)g(31)390 2380 y(september,)e(9,)i(30,)g(30)390 -2489 y(october,)93 b(10,)47 b(31,)g(31)390 2599 y(november,)e(11,)i -(30,)g(30)390 2708 y(december,)e(12,)i(31,)g(31)275 2853 -y Fv(Separating)25 b(the)g Fr(struct)f Fv(declaration)i(from)f(the)g -(list)h(of)f(k)m(eyw)m(ords)h(and)e(other)h(\014elds)g(are)g(a)h(pair)f -(of)150 2963 y(consecutiv)m(e)33 b(p)s(ercen)m(t)f(signs,)f(`)p -Fr(\045\045)p Fv(',)h(app)s(earing)f(left)h(justi\014ed)e(in)h(the)h -(\014rst)e(column,)i(as)f(in)g(the)h(UNIX)150 3072 y(utilit)m(y)g -Fr(lex)p Fv(.)275 3217 y(If)k(the)i Fr(struct)d Fv(has)i(already)h(b)s -(een)f(declared)h(in)f(an)g(include)g(\014le,)i(it)f(can)g(b)s(e)e(men) -m(tioned)i(in)f(an)150 3327 y(abbreviated)31 b(form,)f(lik)m(e)i(this:) -390 3472 y Fr(struct)46 b(month;)390 3581 y(\045\045)390 -3691 y(january,)141 b(1,)47 b(31,)g(31)390 3801 y(...)150 -4010 y Fk(3.1.1.2)63 b(Gp)s(erf)43 b(Declarations)275 -4157 y Fv(The)31 b(declaration)j(section)g(can)e(con)m(tain)i -Fr(gperf)c Fv(declarations.)48 b(They)32 b(in\015uence)g(the)g(w)m(a)m -(y)h Fr(gperf)150 4267 y Fv(w)m(orks,)43 b(lik)m(e)f(command)f(line)g -(options)g(do.)72 b(In)40 b(fact,)k(ev)m(ery)e(suc)m(h)e(declaration)i -(is)f(equiv)-5 b(alen)m(t)42 b(to)g(a)150 4376 y(command)30 -b(line)h(option.)41 b(There)30 b(are)h(three)f(forms)g(of)h -(declarations:)199 4521 y(1.)61 b(Declarations)33 b(without)d(argumen)m -(t,)h(lik)m(e)h(`)p Fr(\045compare-lengths)p Fv('.)199 -4661 y(2.)61 b(Declarations)33 b(with)d(an)g(argumen)m(t,)h(lik)m(e)h -(`)p Fr(\045switch=)p Fi(count)11 b Fv('.)199 4801 y(3.)61 -b(Declarations)114 b(of)e(names)g(of)g(en)m(tities)i(in)d(the)h(output) -g(\014le,)132 b(lik)m(e)114 b(`)p Fr(\045define)330 4910 -y(lookup-function-name)25 b Fi(name)11 b Fv('.)275 5085 -y(When)35 b(a)h(declaration)h(is)f(giv)m(en)g(b)s(oth)f(in)h(the)f -(input)g(\014le)h(and)f(as)h(a)g(command)f(line)h(option,)i(the)150 -5195 y(command-line)31 b(option's)g(v)-5 b(alue)31 b(prev)-5 -b(ails.)275 5340 y(The)29 b(follo)m(wing)j Fr(gperf)d -Fv(declarations)j(are)f(a)m(v)-5 b(ailable.)p eop end -%%Page: 17 19 -TeXDict begin 17 18 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(17)150 299 y(`)p Fr(\045delimiters=)p Fi(delimiter-lis)o(t)11 -b Fv(')630 408 y(Allo)m(ws)30 b(y)m(ou)f(to)g(pro)m(vide)g(a)g(string)g -(con)m(taining)h(delimiters)g(used)d(to)j(separate)g(k)m(eyw)m(ords)630 -518 y(from)k(their)h(attributes.)54 b(The)34 b(default)g(is)h -Fr(")p Fv(,)p Fr(")p Fv(.)53 b(This)34 b(option)h(is)f(essen)m(tial)j -(if)d(y)m(ou)h(w)m(an)m(t)630 628 y(to)c(use)f(k)m(eyw)m(ords)h(that)g -(ha)m(v)m(e)g(em)m(b)s(edded)f(commas)h(or)f(newlines.)150 -774 y(`)p Fr(\045struct-type)p Fv(')630 883 y(Allo)m(ws)i(y)m(ou)e(to)i -(include)e(a)h Fr(struct)d Fv(t)m(yp)s(e)j(declaration)h(for)e -(generated)i(co)s(de;)f(see)g(ab)s(o)m(v)m(e)630 993 -y(for)f(an)g(example.)150 1139 y(`)p Fr(\045ignore-case)p -Fv(')630 1249 y(Consider)43 b(upp)s(er)f(and)i(lo)m(w)m(er)h(case)g -(ASCI)s(I)e(c)m(haracters)i(as)f(equiv)-5 b(alen)m(t.)83 -b(The)44 b(string)630 1358 y(comparison)28 b(will)h(use)f(a)h(case)g -(insigni\014can)m(t)g(c)m(haracter)h(comparison.)40 b(Note)29 -b(that)g(lo)s(cale)630 1468 y(dep)s(enden)m(t)g(case)j(mappings)d(are)i -(ignored.)150 1614 y(`)p Fr(\045language=)p Fi(language-name)10 -b Fv(')630 1724 y(Instructs)33 b Fr(gperf)f Fv(to)i(generate)h(co)s(de) -f(in)f(the)h(language)h(sp)s(eci\014ed)d(b)m(y)i(the)g(option's)g(ar-) -630 1833 y(gumen)m(t.)41 b(Languages)31 b(handled)f(are)h(curren)m -(tly:)630 1979 y(`)p Fr(KR-C)p Fv(')238 b(Old-st)m(yle)27 -b(K&R)f(C.)g(This)f(language)j(is)f(understo)s(o)s(d)d(b)m(y)i(old-st)m -(yle)i(C)e(com-)1110 2089 y(pilers)e(and)g(ANSI)f(C)h(compilers,)i(but) -e(ANSI)f(C)h(compilers)h(ma)m(y)f(\015ag)h(w)m(arn-)1110 -2198 y(ings)30 b(\(or)h(ev)m(en)g(errors\))f(b)s(ecause)h(of)f(lac)m -(king)i(`)p Fr(const)p Fv('.)630 2345 y(`)p Fr(C)p Fv(')382 -b(Common)23 b(C.)f(This)h(language)h(is)f(understo)s(o)s(d)e(b)m(y)i -(ANSI)g(C)f(compilers,)k(and)1110 2454 y(also)k(b)m(y)e(old-st)m(yle)i -(C)f(compilers,)g(pro)m(vided)f(that)i(y)m(ou)f Fr(#define)f(const)f -Fv(to)1110 2564 y(empt)m(y)k(for)f(compilers)h(whic)m(h)f(don't)g(kno)m -(w)h(ab)s(out)f(this)g(k)m(eyw)m(ord.)630 2710 y(`)p -Fr(ANSI-C)p Fv(')142 b(ANSI)32 b(C.)g(This)f(language)j(is)e(understo)s -(o)s(d)e(b)m(y)i(ANSI)g(C)f(\(C89,)j(ISO)d(C90\))1110 -2819 y(compilers,)g(ISO)e(C99)i(compilers,)g(and)f(C)p -Fr(++)f Fv(compilers.)630 2966 y(`)p Fr(C++)p Fv(')286 -b(C)p Fr(++)p Fv(.)40 b(This)29 b(language)j(is)f(understo)s(o)s(d)d(b) -m(y)i(C)p Fr(++)g Fv(compilers.)630 3112 y(The)g(default)g(is)h -(ANSI-C.)150 3258 y(`)p Fr(\045define)e(slot-name)e Fi(name)11 -b Fv(')630 3367 y(This)65 b(declaration)j(is)e(only)g(useful)f(when)g -(option)h(`)p Fr(-t)p Fv(')g(\(or,)76 b(equiv)-5 b(alen)m(tly)d(,)77 -b(the)630 3477 y(`)p Fr(\045struct-type)p Fv(')27 b(declaration\))32 -b(has)e(b)s(een)g(giv)m(en.)41 b(By)31 b(default,)f(the)g(program)g -(assumes)630 3587 y(the)48 b(structure)g(comp)s(onen)m(t)h(iden)m -(ti\014er)f(for)g(the)g(k)m(eyw)m(ord)h(is)f(`)p Fr(name)p -Fv('.)94 b(This)47 b(option)630 3696 y(allo)m(ws)f(an)e(arbitrary)g(c)m -(hoice)i(of)f(iden)m(ti\014er)f(for)h(this)f(comp)s(onen)m(t,)k -(although)d(it)g(still)630 3806 y(m)m(ust)30 b(o)s(ccur)g(as)h(the)g -(\014rst)e(\014eld)h(in)g(y)m(our)h(supplied)e Fr(struct)p -Fv(.)150 3952 y(`)p Fr(\045define)g(initializer-suffix)c -Fi(initializers)11 b Fv(')630 4061 y(This)65 b(declaration)j(is)e(only) -g(useful)f(when)g(option)h(`)p Fr(-t)p Fv(')g(\(or,)76 -b(equiv)-5 b(alen)m(tly)d(,)77 b(the)630 4171 y(`)p Fr(\045struct-type) -p Fv(')33 b(declaration\))38 b(has)d(b)s(een)g(giv)m(en.)58 -b(It)36 b(p)s(ermits)f(to)i(sp)s(ecify)e(initializers)630 -4281 y(for)44 b(the)g(structure)g(mem)m(b)s(ers)f(follo)m(wing)i -Fn(slot-name)51 b Fv(in)43 b(empt)m(y)i(hash)e(table)i(en)m(tries.)630 -4390 y(The)d(list)g(of)h(initializers)g(should)e(start)i(with)f(a)g -(comma.)77 b(By)42 b(default,)k(the)c(emitted)630 4500 -y(co)s(de)31 b(will)f(zero-initialize)k(structure)c(mem)m(b)s(ers)g -(follo)m(wing)i Fn(slot-name)p Fv(.)150 4646 y(`)p Fr(\045define)d -(hash-function-name)c Fi(name)11 b Fv(')630 4756 y(Allo)m(ws)31 -b(y)m(ou)f(to)g(sp)s(ecify)g(the)g(name)g(for)f(the)h(generated)h(hash) -e(function.)40 b(Default)31 b(name)630 4865 y(is)f(`)p -Fr(hash)p Fv('.)40 b(This)30 b(option)h(p)s(ermits)e(the)i(use)f(of)h -(t)m(w)m(o)g(hash)f(tables)h(in)f(the)h(same)g(\014le.)150 -5011 y(`)p Fr(\045define)e(lookup-function-name)24 b -Fi(name)11 b Fv(')630 5121 y(Allo)m(ws)43 b(y)m(ou)f(to)h(sp)s(ecify)e -(the)i(name)f(for)f(the)h(generated)h(lo)s(okup)f(function.)75 -b(Default)630 5230 y(name)28 b(is)g(`)p Fr(in_word_set)p -Fv('.)37 b(This)27 b(option)h(p)s(ermits)f(m)m(ultiple)i(generated)f -(hash)f(functions)630 5340 y(to)k(b)s(e)f(used)f(in)h(the)h(same)g -(application.)p eop end -%%Page: 18 20 -TeXDict begin 18 19 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(18)150 299 y(`)p Fr(\045define)29 b(class-name)e -Fi(name)11 b Fv(')630 408 y(This)66 b(option)i(is)f(only)h(useful)e -(when)h(option)g(`)p Fr(-L)30 b(C++)p Fv(')67 b(\(or,)77 -b(equiv)-5 b(alen)m(tly)d(,)79 b(the)630 518 y(`)p Fr(\045language=C++) -p Fv(')43 b(declaration\))k(has)f(b)s(een)f(giv)m(en.)88 -b(It)46 b(allo)m(ws)h(y)m(ou)f(to)g(sp)s(ecify)g(the)630 -628 y(name)30 b(of)h(generated)g(C)p Fr(++)f Fv(class.)41 -b(Default)32 b(name)e(is)h Fr(Perfect_Hash)p Fv(.)150 -792 y(`)p Fr(\0457bit)p Fv(')190 b(This)36 b(option)i(sp)s(eci\014es)f -(that)g(all)h(strings)f(that)h(will)f(b)s(e)g(passed)f(as)i(argumen)m -(ts)f(to)h(the)630 902 y(generated)e(hash)e(function)g(and)h(the)g -(generated)g(lo)s(okup)g(function)f(will)h(solely)h(consist)630 -1011 y(of)d(7-bit)h(ASCI)s(I)e(c)m(haracters)j(\(b)m(ytes)f(in)f(the)g -(range)h(0..127\).)51 b(\(Note)35 b(that)f(the)g(ANSI)e(C)630 -1121 y(functions)f Fr(isalnum)f Fv(and)i Fr(isgraph)e -Fv(do)i Fm(not)41 b Fv(guaran)m(tee)33 b(that)g(a)f(b)m(yte)h(is)f(in)f -(this)h(range.)630 1230 y(Only)e(an)g(explicit)i(test)f(lik)m(e)h(`)p -Fr(c)e(>=)g('A')f(&&)h(c)g(<=)g('Z')p Fv(')f(guaran)m(tees)j(this.\)) -150 1395 y(`)p Fr(\045compare-lengths)p Fv(')630 1504 -y(Compare)40 b(k)m(eyw)m(ord)g(lengths)g(b)s(efore)f(trying)h(a)h -(string)e(comparison.)70 b(This)39 b(option)h(is)630 -1614 y(mandatory)32 b(for)h(binary)e(comparisons)i(\(see)g(Section)h -(3.3)f([Binary)g(Strings],)g(page)g(22\).)630 1724 y(It)g(also)h(migh)m -(t)g(cut)f(do)m(wn)f(on)h(the)g(n)m(um)m(b)s(er)f(of)h(string)g -(comparisons)g(made)g(during)f(the)630 1833 y(lo)s(okup,)i(since)g(k)m -(eyw)m(ords)f(with)g(di\013eren)m(t)h(lengths)g(are)f(nev)m(er)h -(compared)f(via)h Fr(strcmp)p Fv(.)630 1943 y(Ho)m(w)m(ev)m(er,)d -(using)d(`)p Fr(\045compare-lengths)p Fv(')c(migh)m(t)29 -b(greatly)h(increase)f(the)g(size)g(of)g(the)f(gen-)630 -2052 y(erated)j(C)f(co)s(de)h(if)f(the)h(lo)s(okup)f(table)i(range)e -(is)h(large)g(\(whic)m(h)g(implies)g(that)g(the)f(switc)m(h)630 -2162 y(option)24 b(`)p Fr(-S)p Fv(')g(or)g(`)p Fr(\045switch)p -Fv(')f(is)h(not)g(enabled\),)i(since)e(the)g(length)h(table)f(con)m -(tains)i(as)e(man)m(y)630 2271 y(elemen)m(ts)32 b(as)e(there)h(are)g -(en)m(tries)g(in)f(the)g(lo)s(okup)g(table.)150 2436 -y(`)p Fr(\045compare-strncmp)p Fv(')630 2545 y(Generates)22 -b(C)f(co)s(de)g(that)h(uses)e(the)i Fr(strncmp)d Fv(function)h(to)i(p)s -(erform)e(string)h(comparisons.)630 2655 y(The)30 b(default)g(action)i -(is)f(to)g(use)f Fr(strcmp)p Fv(.)150 2819 y(`)p Fr -(\045readonly-tables)p Fv(')630 2929 y(Mak)m(es)41 b(the)f(con)m(ten)m -(ts)h(of)f(all)h(generated)f(lo)s(okup)f(tables)i(constan)m(t,)i(i.e.,) -h(\\readonly".)630 3039 y(Man)m(y)31 b(compilers)g(can)g(generate)h -(more)e(e\016cien)m(t)i(co)s(de)f(for)f(this)h(b)m(y)f(putting)g(the)h -(tables)630 3148 y(in)f(readonly)h(memory)-8 b(.)150 -3313 y(`)p Fr(\045enum)p Fv(')190 b(De\014ne)31 b(constan)m(t)g(v)-5 -b(alues)31 b(using)f(an)g(en)m(um)g(lo)s(cal)i(to)f(the)g(lo)s(okup)f -(function)g(rather)g(than)630 3422 y(with)37 b(#de\014nes.)60 -b(This)36 b(also)i(means)g(that)f(di\013eren)m(t)h(lo)s(okup)f -(functions)g(can)g(reside)g(in)630 3532 y(the)31 b(same)f(\014le.)41 -b(Thanks)29 b(to)j(James)e(Clark)g Fr()p -Fv(.)150 3696 y(`)p Fr(\045includes)p Fv(')630 3806 y(Include)g(the)h -(necessary)h(system)f(include)g(\014le,)g Fr()p -Fv(,)e(at)i(the)g(b)s(eginning)g(of)g(the)630 3915 y(co)s(de.)39 -b(By)27 b(default,)g(this)f(is)g(not)g(done;)i(the)e(user)f(m)m(ust)h -(include)g(this)f(header)h(\014le)g(himself)630 4025 -y(to)31 b(allo)m(w)h(compilation)g(of)e(the)h(co)s(de.)150 -4189 y(`)p Fr(\045global-table)p Fv(')630 4299 y(Generate)38 -b(the)f(static)h(table)f(of)g(k)m(eyw)m(ords)g(as)g(a)g(static)h -(global)g(v)-5 b(ariable,)39 b(rather)d(than)630 4408 -y(hiding)30 b(it)h(inside)f(of)g(the)h(lo)s(okup)f(function)g(\(whic)m -(h)g(is)h(the)f(default)h(b)s(eha)m(vior\).)150 4573 -y(`)p Fr(\045pic)p Fv(')238 b(Optimize)42 b(the)f(generated)h(table)g -(for)f(inclusion)g(in)g(shared)f(libraries.)73 b(This)40 -b(reduces)630 4682 y(the)35 b(startup)g(time)h(of)f(programs)g(using)g -(a)h(shared)e(library)h(con)m(taining)i(the)e(generated)630 -4792 y(co)s(de.)j(If)21 b(the)h(`)p Fr(\045struct-type)p -Fv(')d(declaration)24 b(\(or,)g(equiv)-5 b(alen)m(tly)d(,)26 -b(the)c(option)g(`)p Fr(-t)p Fv('\))g(is)g(also)630 4902 -y(giv)m(en,)32 b(the)f(\014rst)e(\014eld)i(of)f(the)h(user-de\014ned)e -(struct)i(m)m(ust)f(b)s(e)g(of)h(t)m(yp)s(e)g(`)p Fr(int)p -Fv(',)f(not)h(`)p Fr(char)630 5011 y(*)p Fv(',)h(b)s(ecause)f(it)i -(will)e(con)m(tain)i(o\013sets)g(in)m(to)f(the)g(string)f(p)s(o)s(ol)h -(instead)f(of)h(actual)h(strings.)630 5121 y(T)-8 b(o)33 -b(con)m(v)m(ert)h(suc)m(h)f(an)f(o\013set)i(to)f(a)g(string,)h(y)m(ou)f -(can)g(use)f(the)h(expression)f(`)p Fr(stringpool)630 -5230 y(+)e Fi(o)11 b Fv(',)33 b(where)f Fn(o)37 b Fv(is)c(the)g -(o\013set.)48 b(The)32 b(string)g(p)s(o)s(ol)g(name)h(can)g(b)s(e)f(c)m -(hanged)h(through)f(the)630 5340 y(`)p Fr(\045define)d -(string-pool-name)p Fv(')d(declaration.)p eop end -%%Page: 19 21 -TeXDict begin 19 20 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(19)150 299 y(`)p Fr(\045define)29 b(string-pool-name)d -Fi(name)11 b Fv(')630 408 y(Allo)m(ws)42 b(y)m(ou)f(to)h(sp)s(ecify)f -(the)g(name)g(of)g(the)g(generated)h(string)f(p)s(o)s(ol)g(created)h(b) -m(y)f(the)630 518 y(declaration)48 b(`)p Fr(\045pic)p -Fv(')e(\(or,)51 b(equiv)-5 b(alen)m(tly)d(,)53 b(the)47 -b(option)f(`)p Fr(-P)p Fv('\).)90 b(The)46 b(default)g(name)h(is)630 -628 y(`)p Fr(stringpool)p Fv('.)38 b(This)29 b(declaration)i(p)s -(ermits)e(the)h(use)g(of)g(t)m(w)m(o)h(hash)e(tables)h(in)g(the)g(same) -630 737 y(\014le,)39 b(with)d(`)p Fr(\045pic)p Fv(')g(and)g(ev)m(en)h -(when)f(the)h(`)p Fr(\045global-table)p Fv(')c(declaration)38 -b(\(or,)h(equiv)-5 b(a-)630 847 y(len)m(tly)d(,)32 b(the)f(option)g(`)p -Fr(-G)p Fv('\))f(is)h(giv)m(en.)150 1108 y(`)p Fr(\045null-strings)p -Fv(')630 1218 y(Use)39 b(NULL)g(strings)f(instead)i(of)e(empt)m(y)i -(strings)e(for)h(empt)m(y)g(k)m(eyw)m(ord)g(table)h(en)m(tries.)630 -1327 y(This)e(reduces)g(the)h(startup)g(time)g(of)g(programs)g(using)f -(a)h(shared)f(library)g(con)m(taining)630 1437 y(the)29 -b(generated)g(co)s(de)g(\(but)f(not)g(as)h(m)m(uc)m(h)g(as)f(the)h -(declaration)h(`)p Fr(\045pic)p Fv('\),)f(at)g(the)f(exp)s(ense)630 -1546 y(of)j(one)f(more)h(test-and-branc)m(h)g(instruction)f(at)h(run)e -(time.)150 1807 y(`)p Fr(\045define)g(word-array-name)d -Fi(name)11 b Fv(')630 1917 y(Allo)m(ws)41 b(y)m(ou)f(to)h(sp)s(ecify)f -(the)g(name)g(for)f(the)i(generated)g(arra)m(y)f(con)m(taining)i(the)e -(hash)630 2027 y(table.)106 b(Default)53 b(name)e(is)h(`)p -Fr(wordlist)p Fv('.)103 b(This)51 b(option)h(p)s(ermits)f(the)h(use)g -(of)g(t)m(w)m(o)630 2136 y(hash)37 b(tables)h(in)g(the)g(same)g -(\014le,)i(ev)m(en)e(when)f(the)h(option)g(`)p Fr(-G)p -Fv(')g(\(or,)i(equiv)-5 b(alen)m(tly)d(,)42 b(the)630 -2246 y(`)p Fr(\045global-table)p Fv(')27 b(declaration\))33 -b(is)d(giv)m(en.)150 2507 y(`)p Fr(\045define)f(length-table-name)c -Fi(name)11 b Fv(')630 2616 y(Allo)m(ws)36 b(y)m(ou)e(to)i(sp)s(ecify)e -(the)h(name)f(for)g(the)h(generated)h(arra)m(y)f(con)m(taining)h(the)f -(length)630 2726 y(table.)77 b(Default)43 b(name)g(is)f(`)p -Fr(lengthtable)p Fv('.)74 b(This)41 b(option)i(p)s(ermits)e(the)h(use)g -(of)h(t)m(w)m(o)630 2836 y(length)33 b(tables)h(in)f(the)g(same)g -(\014le,)h(ev)m(en)g(when)e(the)h(option)h(`)p Fr(-G)p -Fv(')f(\(or,)h(equiv)-5 b(alen)m(tly)d(,)36 b(the)630 -2945 y(`)p Fr(\045global-table)p Fv(')27 b(declaration\))33 -b(is)d(giv)m(en.)150 3206 y(`)p Fr(\045switch=)p Fi(count)11 -b Fv(')630 3316 y(Causes)35 b(the)h(generated)h(C)e(co)s(de)h(to)h(use) -e(a)h Fr(switch)e Fv(statemen)m(t)k(sc)m(heme,)g(rather)d(than)630 -3425 y(an)j(arra)m(y)g(lo)s(okup)g(table.)64 b(This)37 -b(can)h(lead)h(to)f(a)h(reduction)f(in)f(b)s(oth)g(time)i(and)e(space) -630 3535 y(requiremen)m(ts)43 b(for)h(some)f(input)g(\014les.)80 -b(The)43 b(argumen)m(t)h(to)g(this)f(option)h(determines)630 -3645 y(ho)m(w)33 b(man)m(y)f Fr(switch)f Fv(statemen)m(ts)k(are)e -(generated.)49 b(A)32 b(v)-5 b(alue)34 b(of)e(1)i(generates)g(1)f -Fr(switch)630 3754 y Fv(con)m(taining)25 b(all)e(the)h(elemen)m(ts,)i -(a)d(v)-5 b(alue)23 b(of)h(2)f(generates)h(2)g(tables)f(with)g(1/2)h -(the)g(elemen)m(ts)630 3864 y(in)38 b(eac)m(h)h Fr(switch)p -Fv(,)g(etc.)65 b(This)37 b(is)h(useful)g(since)g(man)m(y)h(C)e -(compilers)i(cannot)g(correctly)630 3973 y(generate)29 -b(co)s(de)f(for)f(large)h Fr(switch)e Fv(statemen)m(ts.)41 -b(This)27 b(option)h(w)m(as)g(inspired)e(in)h(part)g(b)m(y)630 -4083 y(Keith)k(Bostic's)h(original)f(C)f(program.)150 -4344 y(`)p Fr(\045omit-struct-type)p Fv(')630 4454 y(Prev)m(en)m(ts)f -(the)e(transfer)h(of)f(the)h(t)m(yp)s(e)g(declaration)h(to)g(the)f -(output)f(\014le.)40 b(Use)28 b(this)f(option)630 4563 -y(if)j(the)h(t)m(yp)s(e)f(is)h(already)g(de\014ned)e(elsewhere.)150 -4864 y Fk(3.1.1.3)63 b(C)41 b(Co)s(de)g(Inclusion)275 -5011 y Fv(Using)26 b(a)g(syn)m(tax)h(similar)f(to)h(GNU)f(utilities)i -Fr(flex)d Fv(and)g Fr(bison)p Fv(,)h(it)g(is)g(p)s(ossible)g(to)g -(directly)h(include)150 5121 y(C)i(source)h(text)g(and)f(commen)m(ts)h -(v)m(erbatim)g(in)m(to)h(the)e(generated)i(output)e(\014le.)40 -b(This)29 b(is)g(accomplished)150 5230 y(b)m(y)37 b(enclosing)h(the)g -(region)g(inside)e(left-justi\014ed)i(surrounding)d(`)p -Fr(\045{)p Fv(',)k(`)p Fr(\045})p Fv(')e(pairs.)61 b(Here)38 -b(is)f(an)g(input)150 5340 y(fragmen)m(t)31 b(based)f(on)g(the)h -(previous)f(example)h(that)g(illustrates)g(this)g(feature:)p -eop end -%%Page: 20 22 -TeXDict begin 20 21 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(20)390 299 y Fr(\045{)390 408 y(#include)46 b()390 -518 y(/*)h(This)g(section)f(of)h(code)f(is)i(inserted)d(directly)h -(into)g(the)h(output.)f(*/)390 628 y(int)h(return_month_days)c -(\(struct)j(month)g(*months,)g(int)h(is_leap_year\);)390 -737 y(\045})390 847 y(struct)f(month)g({)i(char)f(*name;)f(int)h -(number;)e(int)i(days;)g(int)g(leap_days;)e(};)390 956 -y(\045\045)390 1066 y(january,)141 b(1,)47 b(31,)g(31)390 -1176 y(february,)93 b(2,)47 b(28,)g(29)390 1285 y(march,)237 -b(3,)47 b(31,)g(31)390 1395 y(...)150 1636 y Fk(3.1.2)63 -b(F)-10 b(ormat)41 b(for)h(Keyw)m(ord)e(En)m(tries)275 -1783 y Fv(The)33 b(second)i(input)e(\014le)i(format)g(section)g(con)m -(tains)h(lines)e(of)h(k)m(eyw)m(ords)g(and)e(an)m(y)i(asso)s(ciated)h -(at-)150 1893 y(tributes)i(y)m(ou)h(migh)m(t)g(supply)-8 -b(.)64 b(A)39 b(line)f(b)s(eginning)g(with)g(`)p Fr(#)p -Fv(')h(in)f(the)h(\014rst)f(column)g(is)g(considered)h(a)150 -2002 y(commen)m(t.)53 b(Ev)m(erything)34 b(follo)m(wing)h(the)g(`)p -Fr(#)p Fv(')f(is)g(ignored,)h(up)e(to)i(and)e(including)h(the)g(follo)m -(wing)h(new-)150 2112 y(line.)57 b(A)36 b(line)h(b)s(eginning)e(with)g -(`)p Fr(\045)p Fv(')h(in)g(the)g(\014rst)f(column)g(is)h(an)g(option)g -(declaration)i(and)d(m)m(ust)h(not)150 2222 y(o)s(ccur)30 -b(within)g(the)h(k)m(eyw)m(ords)f(section.)275 2399 y(The)36 -b(\014rst)g(\014eld)g(of)h(eac)m(h)g(non-commen)m(t)h(line)f(is)g(alw)m -(a)m(ys)h(the)f(k)m(eyw)m(ord)g(itself.)60 b(It)37 b(can)g(b)s(e)f(giv) -m(en)150 2508 y(in)f(t)m(w)m(o)h(w)m(a)m(ys:)51 b(as)35 -b(a)g(simple)g(name,)i(i.e.,)g(without)e(surrounding)e(string)i -(quotation)h(marks,)g(or)f(as)h(a)150 2618 y(string)i(enclosed)g(in)f -(double-quotes,)j(in)d(C)h(syn)m(tax,)i(p)s(ossibly)d(with)g(bac)m -(kslash)h(escap)s(es)g(lik)m(e)h Fr(\\")e Fv(or)150 2727 -y Fr(\\234)23 b Fv(or)i Fr(\\xa8)p Fv(.)37 b(In)24 b(either)h(case,)i -(it)e(m)m(ust)f(start)h(righ)m(t)g(at)g(the)g(b)s(eginning)e(of)i(the)g -(line,)h(without)e(leading)150 2837 y(whitespace.)58 -b(In)35 b(this)h(con)m(text,)j(a)e(\\\014eld")f(is)g(considered)g(to)g -(extend)g(up)f(to,)j(but)d(not)h(include,)i(the)150 2946 -y(\014rst)g(blank,)i(comma,)i(or)c(newline.)65 b(Here)39 -b(is)f(a)h(simple)g(example)g(tak)m(en)g(from)f(a)h(partial)h(list)f -(of)f(C)150 3056 y(reserv)m(ed)31 b(w)m(ords:)390 3233 -y Fr(#)47 b(These)g(are)g(a)g(few)g(C)h(reserved)d(words,)h(see)h(the)g -(c.gperf)f(file)390 3342 y(#)h(for)g(a)h(complete)d(list)i(of)g(ANSI)g -(C)g(reserved)f(words.)390 3452 y(unsigned)390 3562 y(sizeof)390 -3671 y(switch)390 3781 y(signed)390 3890 y(if)390 4000 -y(default)390 4110 y(for)390 4219 y(while)390 4329 y(return)275 -4506 y Fv(Note)38 b(that)f(unlik)m(e)g Fr(flex)f Fv(or)h -Fr(bison)e Fv(the)j(\014rst)e(`)p Fr(\045\045)p Fv(')g(mark)m(er)i(ma)m -(y)f(b)s(e)f(elided)h(if)g(the)g(declaration)150 4615 -y(section)32 b(is)e(empt)m(y)-8 b(.)275 4792 y(Additional)29 -b(\014elds)f(ma)m(y)h(optionally)h(follo)m(w)g(the)f(leading)g(k)m(eyw) -m(ord.)41 b(Fields)29 b(should)e(b)s(e)h(separated)150 -4902 y(b)m(y)g(commas,)i(and)d(terminate)j(at)f(the)f(end)g(of)g(line.) -41 b(What)29 b(these)f(\014elds)g(mean)g(is)h(en)m(tirely)g(up)e(to)i -(y)m(ou;)150 5011 y(they)k(are)h(used)e(to)i(initialize)h(the)f(elemen) -m(ts)g(of)f(the)h(user-de\014ned)d Fr(struct)h Fv(pro)m(vided)g(b)m(y)h -(y)m(ou)h(in)f(the)150 5121 y(declaration)40 b(section.)67 -b(If)39 b(the)g(`)p Fr(-t)p Fv(')f(option)h(\(or,)j(equiv)-5 -b(alen)m(tly)d(,)43 b(the)c(`)p Fr(\045struct-type)p -Fv(')d(declaration\))150 5230 y(is)g Fm(not)45 b Fv(enabled)36 -b(these)g(\014elds)g(are)g(simply)f(ignored.)58 b(All)36 -b(previous)g(examples)g(except)h(the)f(last)h(one)150 -5340 y(con)m(tain)32 b(k)m(eyw)m(ord)f(attributes.)p -eop end -%%Page: 21 23 -TeXDict begin 21 22 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(21)150 299 y Fk(3.1.3)63 b(Including)41 b(Additional)g(C)g(F)-10 -b(unctions)275 446 y Fv(The)30 b(optional)i(third)e(section)i(also)g -(corresp)s(onds)d(closely)j(with)f(con)m(v)m(en)m(tions)i(found)c(in)i -Fr(flex)f Fv(and)150 555 y Fr(bison)p Fv(.)36 b(All)23 -b(text)g(in)f(this)f(section,)k(starting)e(at)g(the)f(\014nal)f(`)p -Fr(\045\045)p Fv(')h(and)f(extending)i(to)f(the)g(end)g(of)g(the)g -(input)150 665 y(\014le,)31 b(is)g(included)g(v)m(erbatim)g(in)m(to)h -(the)f(generated)h(output)f(\014le.)42 b(Naturally)-8 -b(,)33 b(it)e(is)g(y)m(our)g(resp)s(onsibilit)m(y)150 -775 y(to)g(ensure)f(that)h(the)f(co)s(de)h(con)m(tained)g(in)g(this)f -(section)h(is)g(v)-5 b(alid)30 b(C.)150 982 y Fk(3.1.4)63 -b(Where)41 b(to)g(place)f(directiv)m(es)g(for)i(GNU)g -Fj(indent)p Fk(.)275 1129 y Fv(If)26 b(y)m(ou)i(w)m(an)m(t)g(to)g(in)m -(v)m(ok)m(e)h(GNU)f Fr(indent)e Fv(on)h(a)g Fr(gperf)f -Fv(input)h(\014le,)h(y)m(ou)f(will)h(see)g(that)g(GNU)g -Fr(indent)150 1239 y Fv(do)s(esn't)33 b(understand)e(the)i(`)p -Fr(\045\045)p Fv(',)h(`)p Fr(\045{)p Fv(')e(and)h(`)p -Fr(\045})p Fv(')g(directiv)m(es)h(that)f(con)m(trol)i -Fr(gperf)p Fv('s)c(in)m(terpretation)k(of)150 1348 y(the)23 -b(input)f(\014le.)38 b(Therefore)23 b(y)m(ou)g(ha)m(v)m(e)h(to)g -(insert)f(some)g(directiv)m(es)h(for)f(GNU)h Fr(indent)p -Fv(.)36 b(More)24 b(precisely)-8 b(,)150 1458 y(assuming)30 -b(the)h(most)f(general)i(input)d(\014le)i(structure)390 -1600 y Fr(declarations)44 b(part)j(1)390 1710 y(\045{)390 -1820 y(verbatim)f(code)390 1929 y(\045})390 2039 y(declarations)e(part) -j(2)390 2148 y(\045\045)390 2258 y(keywords)390 2368 -y(\045\045)390 2477 y(functions)150 2620 y Fv(y)m(ou)31 -b(w)m(ould)f(insert)g(`)p Fr(*INDENT-OFF*)p Fv(')e(and)h(`)p -Fr(*INDENT-ON*)p Fv(')f(commen)m(ts)k(as)e(follo)m(ws:)390 -2763 y Fr(/*)47 b(*INDENT-OFF*)e(*/)390 2872 y(declarations)f(part)j(1) -390 2982 y(\045{)390 3091 y(/*)g(*INDENT-ON*)e(*/)390 -3201 y(verbatim)h(code)390 3310 y(/*)h(*INDENT-OFF*)e(*/)390 -3420 y(\045})390 3530 y(declarations)f(part)j(2)390 3639 -y(\045\045)390 3749 y(keywords)390 3858 y(\045\045)390 -3968 y(/*)g(*INDENT-ON*)e(*/)390 4078 y(functions)150 -4322 y Fu(3.2)68 b(Output)45 b(F)-11 b(ormat)45 b(for)g(Generated)h(C)f -(Co)t(de)g(with)g Fl(gperf)275 4482 y Fv(Sev)m(eral)28 -b(options)g(con)m(trol)h(ho)m(w)e(the)h(generated)h(C)e(co)s(de)h(app)s -(ears)e(on)i(the)g(standard)e(output.)40 b(Tw)m(o)150 -4591 y(C)i(functions)g(are)h(generated.)77 b(They)42 -b(are)h(called)g Fr(hash)f Fv(and)f Fr(in_word_set)p -Fv(,)i(although)g(y)m(ou)f(ma)m(y)150 4701 y(mo)s(dify)30 -b(their)g(names)h(with)f(a)h(command-line)g(option.)42 -b(Both)31 b(functions)f(require)g(t)m(w)m(o)i(argumen)m(ts,)g(a)150 -4811 y(string,)h Fr(char)c(*)i Fn(str)p Fv(,)i(and)e(a)i(length)f -(parameter,)h Fr(int)e Fn(len)p Fv(.)46 b(Their)31 b(default)h -(function)g(protot)m(yp)s(es)h(are)150 4920 y(as)e(follo)m(ws:)3350 -5121 y([F)-8 b(unction])-3599 b Fh(unsigned)55 b(int)e(hash)47 -b Fg(\()p Fn(const)31 b(c)m(har)g(*)f Ff(str)p Fn(,)i(unsigned)d(in)m -(t)i Ff(len)12 b Fg(\))390 5230 y Fv(By)35 b(default,)h(the)e -(generated)i Fr(hash)d Fv(function)h(returns)f(an)i(in)m(teger)h(v)-5 -b(alue)34 b(created)i(b)m(y)e(adding)390 5340 y Fn(len)28 -b Fv(to)g(sev)m(eral)h(user-sp)s(eci\014ed)d Fn(str)34 -b Fv(b)m(yte)28 b(p)s(ositions)g(indexed)f(in)m(to)h(an)f -Fn(asso)s(ciated)i(v)-5 b(alues)32 b Fv(table)p eop end -%%Page: 22 24 -TeXDict begin 22 23 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(22)390 299 y(stored)28 b(in)g(a)g(lo)s(cal)i(static)f(arra)m(y)-8 -b(.)41 b(The)28 b(asso)s(ciated)h(v)-5 b(alues)29 b(table)g(is)f -(constructed)g(in)m(ternally)h(b)m(y)390 408 y Fr(gperf)34 -b Fv(and)g(later)i(output)e(as)i(a)f(static)i(lo)s(cal)f(C)e(arra)m(y)i -(called)g(`)p Fr(hash_table)p Fv('.)52 b(The)35 b(relev)-5 -b(an)m(t)390 518 y(selected)28 b(p)s(ositions)f(\(i.e.)41 -b(indices)27 b(in)m(to)h Fn(str)7 b Fv(\))26 b(are)h(sp)s(eci\014ed)f -(via)i(the)f(`)p Fr(-k)p Fv(')g(option)g(when)f(running)390 -628 y Fr(gperf)p Fv(,)j(as)i(detailed)g(in)f(the)h Fm(Options)39 -b Fv(section)31 b(b)s(elo)m(w)g(\(see)g(Chapter)f(4)h([Options],)f -(page)h(24\).)3350 830 y([F)-8 b(unction])-3599 b Fh(in_word_set)49 -b Fg(\()p Fn(const)31 b(c)m(har)g(*)g Ff(str)p Fn(,)g(unsigned)e(in)m -(t)i Ff(len)12 b Fg(\))390 939 y Fv(If)33 b Fn(str)41 -b Fv(is)33 b(in)h(the)g(k)m(eyw)m(ord)g(set,)i(returns)c(a)j(p)s(oin)m -(ter)f(to)g(that)h(k)m(eyw)m(ord.)51 b(More)35 b(exactly)-8 -b(,)37 b(if)d(the)390 1049 y(option)d(`)p Fr(-t)p Fv(')g(\(or,)g(equiv) --5 b(alen)m(tly)d(,)33 b(the)e(`)p Fr(\045struct-type)p -Fv(')d(declaration\))k(w)m(as)f(giv)m(en,)h(it)f(returns)f(a)390 -1159 y(p)s(oin)m(ter)g(to)h(the)g(matc)m(hing)h(k)m(eyw)m(ord's)e -(structure.)41 b(Otherwise)30 b(it)h(returns)e Fr(NULL)p -Fv(.)275 1361 y(If)39 b(the)i(option)f(`)p Fr(-c)p Fv(')g(\(or,)j -(equiv)-5 b(alen)m(tly)d(,)45 b(the)c(`)p Fr(\045compare-strncmp)p -Fv(')36 b(declaration\))42 b(is)e(not)g(used,)150 1470 -y Fn(str)k Fv(m)m(ust)37 b(b)s(e)f(a)i(NUL)f(terminated)h(string)f(of)h -(exactly)h(length)e Fn(len)p Fv(.)62 b(If)37 b(`)p Fr(-c)p -Fv(')g(\(or,)i(equiv)-5 b(alen)m(tly)d(,)42 b(the)150 -1580 y(`)p Fr(\045compare-strncmp)p Fv(')22 b(declaration\))28 -b(is)e(used,)g Fn(str)32 b Fv(m)m(ust)26 b(simply)g(b)s(e)f(an)h(arra)m -(y)g(of)g Fn(len)g Fv(b)m(ytes)h(and)e(do)s(es)150 1689 -y(not)31 b(need)f(to)h(b)s(e)f(NUL)g(terminated.)275 -1833 y(The)f(co)s(de)i(generated)g(for)g(these)f(t)m(w)m(o)i(functions) -e(is)g(a\013ected)i(b)m(y)f(the)f(follo)m(wing)i(options:)150 -2006 y(`)p Fr(-t)p Fv(')150 2115 y(`)p Fr(--struct-type)p -Fv(')630 2225 y(Mak)m(e)g(use)e(of)h(the)f(user-de\014ned)f -Fr(struct)p Fv(.)150 2393 y(`)p Fr(-S)h Fi(total-switch-statements)10 -b Fv(')150 2503 y(`)p Fr(--switch=)p Fi(total-switch-sta)o(teme)o(nts)g -Fv(')630 2612 y(Generate)22 b(1)f(or)g(more)g(C)f Fr(switch)f -Fv(statemen)m(t)j(rather)f(than)f(use)h(a)g(large,)j(\(and)c(p)s(oten)m -(tially)630 2722 y(sparse\))j(static)h(arra)m(y)-8 b(.)40 -b(Although)23 b(the)g(exact)h(time)g(and)e(space)i(sa)m(vings)g(of)f -(this)g(approac)m(h)630 2831 y(v)-5 b(ary)32 b(according)g(to)h(y)m -(our)e(C)g(compiler's)i(degree)f(of)g(optimization,)i(this)d(metho)s(d) -h(often)630 2941 y(results)e(in)g(smaller)h(and)f(faster)h(co)s(de.)275 -3114 y(If)c(the)h(`)p Fr(-t)p Fv(')g(and)f(`)p Fr(-S)p -Fv(')g(options)i(\(or,)f(equiv)-5 b(alen)m(tly)d(,)31 -b(the)d(`)p Fr(\045struct-type)p Fv(')d(and)i(`)p Fr(\045switch)p -Fv(')g(declara-)150 3223 y(tions\))f(are)f(omitted,)i(the)e(default)g -(action)h(is)f(to)h(generate)g(a)g Fr(char)j(*)24 b Fv(arra)m(y)i(con)m -(taining)g(the)f(k)m(eyw)m(ords,)150 3333 y(together)32 -b(with)e(additional)i(empt)m(y)f(strings)f(used)g(for)g(padding)g(the)g -(arra)m(y)-8 b(.)43 b(By)30 b(exp)s(erimen)m(ting)h(with)150 -3442 y(the)g(v)-5 b(arious)32 b(input)e(and)g(output)h(options,)h(and)f -(timing)g(the)h(resulting)f(C)g(co)s(de,)h(y)m(ou)f(can)h(determine)150 -3552 y(the)f(b)s(est)f(option)g(c)m(hoices)i(for)f(di\013eren)m(t)f(k)m -(eyw)m(ord)h(set)g(c)m(haracteristics.)150 3798 y Fu(3.3)68 -b(Use)46 b(of)f(NUL)g(b)l(ytes)275 3957 y Fv(By)30 b(default,)h(the)f -(co)s(de)g(generated)i(b)m(y)e Fr(gperf)e Fv(op)s(erates)j(on)f(zero)h -(terminated)g(strings,)f(the)g(usual)150 4067 y(represen)m(tation)41 -b(of)e(strings)h(in)f(C.)h(This)e(means)i(that)g(the)g(k)m(eyw)m(ords)g -(in)f(the)h(input)f(\014le)g(m)m(ust)h(not)150 4176 y(con)m(tain)d(NUL) -f(b)m(ytes,)i(and)e(the)g Fn(str)42 b Fv(argumen)m(t)36 -b(passed)g(to)g Fr(hash)f Fv(or)h Fr(in_word_set)d Fv(m)m(ust)j(b)s(e)f -(NUL)150 4286 y(terminated)c(and)f(ha)m(v)m(e)h(exactly)h(length)f -Fn(len)p Fv(.)275 4429 y(If)k(option)i(`)p Fr(-c)p Fv(')f(\(or,)i -(equiv)-5 b(alen)m(tly)d(,)40 b(the)c(`)p Fr(\045compare-strncmp)p -Fv(')c(declaration\))38 b(is)e(used,)h(then)f(the)150 -4539 y Fn(str)e Fv(argumen)m(t)29 b(do)s(es)e(not)h(need)g(to)h(b)s(e)e -(NUL)h(terminated.)41 b(The)27 b(co)s(de)h(generated)h(b)m(y)f -Fr(gperf)f Fv(will)h(only)150 4649 y(access)h(the)f(\014rst)g -Fn(len)p Fv(,)g(not)h Fn(len)p Fr(+)p Fn(1)p Fv(,)f(b)m(ytes)h -(starting)g(at)f Fn(str)p Fv(.)40 b(Ho)m(w)m(ev)m(er,)31 -b(the)d(k)m(eyw)m(ords)g(in)g(the)g(input)f(\014le)150 -4758 y(still)k(m)m(ust)g(not)f(con)m(tain)i(NUL)e(b)m(ytes.)275 -4902 y(If)35 b(option)i(`)p Fr(-l)p Fv(')f(\(or,)i(equiv)-5 -b(alen)m(tly)d(,)40 b(the)c(`)p Fr(\045compare-lengths)p -Fv(')c(declaration\))38 b(is)e(used,)h(then)f(the)150 -5011 y(hash)c(table)i(p)s(erforms)d(binary)h(comparison.)47 -b(The)33 b(k)m(eyw)m(ords)g(in)f(the)h(input)f(\014le)g(ma)m(y)i(con)m -(tain)g(NUL)150 5121 y(b)m(ytes,)46 b(written)41 b(in)h(string)g(syn)m -(tax)g(as)g Fr(\\000)f Fv(or)h Fr(\\x00)p Fv(,)i(and)d(the)h(co)s(de)g -(generated)h(b)m(y)f Fr(gperf)f Fv(will)150 5230 y(treat)i(NUL)e(lik)m -(e)i(an)m(y)f(other)g(b)m(yte.)75 b(Also,)45 b(in)c(this)g(case)i(the)f -(`)p Fr(-c)p Fv(')f(option)h(\(or,)j(equiv)-5 b(alen)m(tly)d(,)47 -b(the)150 5340 y(`)p Fr(\045compare-strncmp)p Fv(')26 -b(declaration\))33 b(is)d(ignored.)p eop end -%%Page: 23 25 -TeXDict begin 23 24 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(23)150 299 y Fu(3.4)68 b(The)45 b(Cop)l(yrigh)l(t)h(of)f(the)g -(Output)275 458 y Fr(gperf)24 b Fv(is)i(under)f(GPL,)h(but)f(that)i(do) -s(es)e(not)h(cause)h(the)f(output)g(pro)s(duced)e(b)m(y)i -Fr(gperf)e Fv(to)j(b)s(e)e(under)150 568 y(GPL.)35 b(The)f(reason)g(is) -h(that)g(the)f(output)g(con)m(tains)i(only)f(small)g(pieces)g(of)f -(text)i(that)f(come)g(directly)150 677 y(from)f Fr(gperf)p -Fv('s)f(source)h(co)s(de)h({)g(only)f(ab)s(out)g(7)h(lines)f(long,)i -(to)s(o)g(small)e(for)g(b)s(eing)g(signi\014can)m(t)i({,)g(and)150 -787 y(therefore)31 b(the)f(output)g(is)h(not)f(a)h(\\w)m(ork)g(based)f -(on)g Fr(gperf)p Fv(")g(\(in)g(the)h(sense)f(of)h(the)f(GPL)h(v)m -(ersion)f(3\).)275 922 y(On)i(the)h(other)h(hand,)f(the)g(output)g(pro) -s(duced)f(b)m(y)h Fr(gperf)e Fv(con)m(tains)k(essen)m(tially)g(all)f -(of)f(the)h(input)150 1031 y(\014le.)40 b(Therefore)26 -b(the)h(output)g(is)g(a)g(\\deriv)-5 b(ativ)m(e)29 b(w)m(ork")e(of)g -(the)g(input)f(\(in)h(the)g(sense)g(of)g(U.S.)g(cop)m(yrigh)m(t)150 -1141 y(la)m(w\);)42 b(and)37 b(its)h(cop)m(yrigh)m(t)g(status)g(dep)s -(ends)e(on)h(the)g(cop)m(yrigh)m(t)i(of)f(the)f(input.)61 -b(F)-8 b(or)38 b(most)f(soft)m(w)m(are)150 1250 y(licenses,)28 -b(the)e(result)g(is)g(that)h(the)f(the)g(output)f(is)h(under)f(the)h -(same)g(license,)i(with)e(the)g(same)h(cop)m(yrigh)m(t)150 -1360 y(holder,)j(as)h(the)f(input)g(that)h(w)m(as)g(passed)e(to)j -Fr(gperf)p Fv(.)p eop end -%%Page: 24 26 -TeXDict begin 24 25 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(24)150 299 y -Fs(4)80 b(In)l(v)l(oking)52 b Fo(gperf)275 586 y Fv(There)35 -b(are)i Fm(many)46 b Fv(options)36 b(to)i Fr(gperf)p -Fv(.)57 b(They)36 b(w)m(ere)h(added)e(to)j(mak)m(e)f(the)g(program)f -(more)g(con-)150 695 y(v)m(enien)m(t)f(for)e(use)g(with)g(real)h -(applications.)50 b(\\On-line")34 b(help)f(is)g(readily)h(a)m(v)-5 -b(ailable)36 b(via)e(the)f(`)p Fr(--help)p Fv(')150 805 -y(option.)41 b(Here)31 b(is)f(the)h(complete)h(list)f(of)f(options.)150 -1064 y Fu(4.1)68 b(Sp)t(ecifying)45 b(the)g(Lo)t(cation)h(of)f(the)g -(Output)g(File)150 1257 y Fv(`)p Fr(--output-file=)p -Fi(file)11 b Fv(')630 1367 y(Allo)m(ws)31 b(y)m(ou)g(to)g(sp)s(ecify)f -(the)h(name)f(of)h(the)f(\014le)h(to)g(whic)m(h)f(the)h(output)f(is)g -(written)g(to.)275 1553 y(The)f(results)i(are)f(written)h(to)g -(standard)e(output)h(if)h(no)f(output)g(\014le)g(is)h(sp)s(eci\014ed)f -(or)g(if)g(it)h(is)g(`)p Fr(-)p Fv('.)150 1811 y Fu(4.2)68 -b(Options)45 b(that)h(a\013ect)g(In)l(terpretation)h(of)e(the)g(Input)g -(File)275 1971 y Fv(These)d(options)h(are)g(also)g(a)m(v)-5 -b(ailable)45 b(as)e(declarations)h(in)e(the)h(input)f(\014le)g(\(see)i -(Section)f(3.1.1.2)150 2080 y([Gp)s(erf)30 b(Declarations],)j(page)e -(16\).)150 2266 y(`)p Fr(-e)f Fi(keyword-delimiter-list)11 -b Fv(')150 2376 y(`)p Fr(--delimiters=)p Fi(keyword-deli)o(mite)o(r-li) -o(st)f Fv(')630 2485 y(Allo)m(ws)30 b(y)m(ou)f(to)g(pro)m(vide)g(a)g -(string)g(con)m(taining)h(delimiters)g(used)d(to)j(separate)g(k)m(eyw)m -(ords)630 2595 y(from)k(their)h(attributes.)54 b(The)34 -b(default)g(is)h Fr(")p Fv(,)p Fr(")p Fv(.)53 b(This)34 -b(option)h(is)f(essen)m(tial)j(if)d(y)m(ou)h(w)m(an)m(t)630 -2705 y(to)f(use)e(k)m(eyw)m(ords)h(that)h(ha)m(v)m(e)g(em)m(b)s(edded)e -(commas)h(or)g(newlines.)48 b(One)33 b(useful)f(tric)m(k)i(is)630 -2814 y(to)d(use)f(-e'T)-8 b(AB',)33 b(where)c(T)-8 b(AB)31 -b(is)g(the)f(literal)i(tab)f(c)m(haracter.)150 2991 y(`)p -Fr(-t)p Fv(')150 3101 y(`)p Fr(--struct-type)p Fv(')630 -3210 y(Allo)m(ws)h(y)m(ou)g(to)g(include)f(a)g Fr(struct)f -Fv(t)m(yp)s(e)h(declaration)i(for)e(generated)h(co)s(de.)44 -b(An)m(y)31 b(text)630 3320 y(b)s(efore)43 b(a)i(pair)e(of)h -(consecutiv)m(e)i(`)p Fr(\045\045)p Fv(')d(is)h(considered)g(part)f(of) -h(the)g(t)m(yp)s(e)g(declaration.)630 3430 y(Keyw)m(ords)39 -b(and)g(additional)h(\014elds)f(ma)m(y)i(follo)m(w)f(this,)i(one)e -(group)f(of)h(\014elds)f(p)s(er)f(line.)630 3539 y(A)31 -b(set)g(of)g(examples)g(for)f(generating)i(p)s(erfect)e(hash)g(tables)i -(and)e(functions)g(for)g(Ada,)h(C,)630 3649 y(C)p Fr(++)p -Fv(,)24 b(P)m(ascal,)j(Mo)s(dula)c(2,)j(Mo)s(dula)d(3)h(and)f(Ja)m(v)-5 -b(aScript)24 b(reserv)m(ed)f(w)m(ords)g(are)h(distributed)630 -3758 y(with)30 b(this)g(release.)150 3935 y(`)p Fr(--ignore-case)p -Fv(')630 4045 y(Consider)43 b(upp)s(er)f(and)i(lo)m(w)m(er)h(case)g -(ASCI)s(I)e(c)m(haracters)i(as)f(equiv)-5 b(alen)m(t.)83 -b(The)44 b(string)630 4155 y(comparison)28 b(will)h(use)f(a)h(case)g -(insigni\014can)m(t)g(c)m(haracter)h(comparison.)40 b(Note)29 -b(that)g(lo)s(cale)630 4264 y(dep)s(enden)m(t)e(case)i(mappings)f(are)g -(ignored.)40 b(This)28 b(option)g(is)h(therefore)f(not)h(suitable)f(if) -h(a)630 4374 y(prop)s(erly)k(in)m(ternationalized)k(or)d(lo)s(cale)i(a) -m(w)m(are)g(case)f(mapping)f(should)f(b)s(e)h(used.)52 -b(\(F)-8 b(or)630 4483 y(example,)31 b(in)e(a)g(T)-8 -b(urkish)29 b(lo)s(cale,)i(the)f(upp)s(er)d(case)k(equiv)-5 -b(alen)m(t)30 b(of)g(the)g(lo)m(w)m(ercase)h(ASCI)s(I)630 -4593 y(letter)42 b(`)p Fr(i)p Fv(')g(is)f(the)g(non-ASCI)s(I)e(c)m -(haracter)k(`)p Fr(capital)29 b(i)h(with)f(dot)g(above)p -Fv('.\))72 b(F)-8 b(or)42 b(this)630 4702 y(case,)d(it)d(is)g(b)s -(etter)h(to)f(apply)g(an)g(upp)s(ercase)f(or)h(lo)m(w)m(ercase)i(con)m -(v)m(ersion)g(on)e(the)g(string)630 4812 y(b)s(efore)30 -b(passing)g(it)h(to)g(the)g Fr(gperf)e Fv(generated)i(function.)150 -5071 y Fu(4.3)68 b(Options)45 b(to)h(sp)t(ecify)f(the)g(Language)h(for) -f(the)g(Output)f(Co)t(de)275 5230 y Fv(These)e(options)h(are)g(also)g -(a)m(v)-5 b(ailable)45 b(as)e(declarations)h(in)e(the)h(input)f(\014le) -g(\(see)i(Section)f(3.1.1.2)150 5340 y([Gp)s(erf)30 b(Declarations],)j -(page)e(16\).)p eop end -%%Page: 25 27 -TeXDict begin 25 26 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(25)150 299 y(`)p -Fr(-L)30 b Fi(generated-language-name)10 b Fv(')150 408 -y(`)p Fr(--language=)p Fi(generated-lang)o(uage)o(-nam)o(e)g -Fv(')630 518 y(Instructs)33 b Fr(gperf)f Fv(to)i(generate)h(co)s(de)f -(in)f(the)h(language)h(sp)s(eci\014ed)d(b)m(y)i(the)g(option's)g(ar-) -630 628 y(gumen)m(t.)41 b(Languages)31 b(handled)f(are)h(curren)m(tly:) -630 804 y(`)p Fr(KR-C)p Fv(')238 b(Old-st)m(yle)27 b(K&R)f(C.)g(This)f -(language)j(is)f(understo)s(o)s(d)d(b)m(y)i(old-st)m(yle)i(C)e(com-) -1110 914 y(pilers)e(and)g(ANSI)f(C)h(compilers,)i(but)e(ANSI)f(C)h -(compilers)h(ma)m(y)f(\015ag)h(w)m(arn-)1110 1023 y(ings)30 -b(\(or)h(ev)m(en)g(errors\))f(b)s(ecause)h(of)f(lac)m(king)i(`)p -Fr(const)p Fv('.)630 1200 y(`)p Fr(C)p Fv(')382 b(Common)23 -b(C.)f(This)h(language)h(is)f(understo)s(o)s(d)e(b)m(y)i(ANSI)g(C)f -(compilers,)k(and)1110 1310 y(also)k(b)m(y)e(old-st)m(yle)i(C)f -(compilers,)g(pro)m(vided)f(that)i(y)m(ou)f Fr(#define)f(const)f -Fv(to)1110 1419 y(empt)m(y)k(for)f(compilers)h(whic)m(h)f(don't)g(kno)m -(w)h(ab)s(out)f(this)g(k)m(eyw)m(ord.)630 1596 y(`)p -Fr(ANSI-C)p Fv(')142 b(ANSI)39 b(C.)h(This)e(language)j(is)f(understo)s -(o)s(d)e(b)m(y)h(ANSI)g(C)h(compilers)g(and)1110 1705 -y(C)p Fr(++)29 b Fv(compilers.)630 1882 y(`)p Fr(C++)p -Fv(')286 b(C)p Fr(++)p Fv(.)40 b(This)29 b(language)j(is)f(understo)s -(o)s(d)d(b)m(y)i(C)p Fr(++)g Fv(compilers.)630 2058 y(The)g(default)g -(is)h(ANSI-C.)150 2235 y(`)p Fr(-a)p Fv(')334 b(This)33 -b(option)h(is)f(supp)s(orted)f(for)h(compatibilit)m(y)j(with)d -(previous)g(releases)i(of)f Fr(gperf)p Fv(.)49 b(It)630 -2345 y(do)s(es)30 b(not)h(do)f(an)m(ything.)150 2521 -y(`)p Fr(-g)p Fv(')334 b(This)33 b(option)h(is)f(supp)s(orted)f(for)h -(compatibilit)m(y)j(with)d(previous)g(releases)i(of)f -Fr(gperf)p Fv(.)49 b(It)630 2631 y(do)s(es)30 b(not)h(do)f(an)m -(ything.)150 2889 y Fu(4.4)68 b(Options)45 b(for)g(\014ne)g(tuning)g -(Details)i(in)e(the)g(Output)f(Co)t(de)275 3048 y Fv(Most)21 -b(of)g(these)g(options)g(are)g(also)h(a)m(v)-5 b(ailable)23 -b(as)e(declarations)h(in)f(the)g(input)e(\014le)i(\(see)h(Section)f -(3.1.1.2)150 3158 y([Gp)s(erf)30 b(Declarations],)j(page)e(16\).)150 -3343 y(`)p Fr(-K)f Fi(slot-name)11 b Fv(')150 3453 y(`)p -Fr(--slot-name=)p Fi(slot-name)g Fv(')630 3562 y(This)21 -b(option)h(is)g(only)f(useful)g(when)g(option)h(`)p Fr(-t)p -Fv(')f(\(or,)j(equiv)-5 b(alen)m(tly)d(,)26 b(the)c(`)p -Fr(\045struct-type)p Fv(')630 3672 y(declaration\))41 -b(has)e(b)s(een)f(giv)m(en.)67 b(By)39 b(default,)j(the)d(program)g -(assumes)f(the)h(structure)630 3781 y(comp)s(onen)m(t)28 -b(iden)m(ti\014er)h(for)f(the)g(k)m(eyw)m(ord)g(is)h(`)p -Fr(name)p Fv('.)39 b(This)27 b(option)i(allo)m(ws)g(an)f(arbitrary)630 -3891 y(c)m(hoice)33 b(of)f(iden)m(ti\014er)g(for)f(this)h(comp)s(onen)m -(t,)g(although)g(it)g(still)g(m)m(ust)g(o)s(ccur)f(as)h(the)g(\014rst) -630 4001 y(\014eld)e(in)g(y)m(our)g(supplied)f Fr(struct)p -Fv(.)150 4177 y(`)p Fr(-F)h Fi(initializers)11 b Fv(')150 -4287 y(`)p Fr(--initializer-suffix=)p Fi(init)o(iali)o(zers)f -Fv(')630 4396 y(This)21 b(option)h(is)g(only)f(useful)g(when)g(option)h -(`)p Fr(-t)p Fv(')f(\(or,)j(equiv)-5 b(alen)m(tly)d(,)26 -b(the)c(`)p Fr(\045struct-type)p Fv(')630 4506 y(declaration\))34 -b(has)f(b)s(een)e(giv)m(en.)49 b(It)32 b(p)s(ermits)g(to)h(sp)s(ecify)f -(initializers)i(for)f(the)f(structure)630 4615 y(mem)m(b)s(ers)23 -b(follo)m(wing)i Fn(slot-name)30 b Fv(in)23 b(empt)m(y)h(hash)f(table)h -(en)m(tries.)39 b(The)23 b(list)h(of)g(initializers)630 -4725 y(should)37 b(start)i(with)g(a)f(comma.)66 b(By)39 -b(default,)i(the)e(emitted)g(co)s(de)g(will)f(zero-initialize)630 -4835 y(structure)30 b(mem)m(b)s(ers)f(follo)m(wing)j -Fn(slot-name)p Fv(.)150 5011 y(`)p Fr(-H)e Fi(hash-function-name)11 -b Fv(')150 5121 y(`)p Fr(--hash-function-name=)p Fi(hash)o(-fun)o(ctio) -o(n-n)o(ame)f Fv(')630 5230 y(Allo)m(ws)31 b(y)m(ou)f(to)g(sp)s(ecify)g -(the)g(name)g(for)f(the)h(generated)h(hash)e(function.)40 -b(Default)31 b(name)630 5340 y(is)f(`)p Fr(hash)p Fv('.)40 -b(This)30 b(option)h(p)s(ermits)e(the)i(use)f(of)h(t)m(w)m(o)g(hash)f -(tables)h(in)f(the)h(same)g(\014le.)p eop end -%%Page: 26 28 -TeXDict begin 26 27 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(26)150 299 y(`)p -Fr(-N)30 b Fi(lookup-function-name)11 b Fv(')150 408 -y(`)p Fr(--lookup-function-name=)p Fi(lo)o(okup)o(-fun)o(cti)o(on-n)o -(ame)f Fv(')630 518 y(Allo)m(ws)43 b(y)m(ou)f(to)h(sp)s(ecify)e(the)i -(name)f(for)f(the)h(generated)h(lo)s(okup)f(function.)75 -b(Default)630 628 y(name)28 b(is)g(`)p Fr(in_word_set)p -Fv('.)37 b(This)27 b(option)h(p)s(ermits)f(m)m(ultiple)i(generated)f -(hash)f(functions)630 737 y(to)k(b)s(e)f(used)f(in)h(the)h(same)g -(application.)150 938 y(`)p Fr(-Z)f Fi(class-name)11 -b Fv(')150 1048 y(`)p Fr(--class-name=)p Fi(class-name)f -Fv(')630 1157 y(This)66 b(option)i(is)f(only)h(useful)e(when)h(option)g -(`)p Fr(-L)30 b(C++)p Fv(')67 b(\(or,)77 b(equiv)-5 b(alen)m(tly)d(,)79 -b(the)630 1267 y(`)p Fr(\045language=C++)p Fv(')43 b(declaration\))k -(has)f(b)s(een)f(giv)m(en.)88 b(It)46 b(allo)m(ws)h(y)m(ou)f(to)g(sp)s -(ecify)g(the)630 1377 y(name)30 b(of)h(generated)g(C)p -Fr(++)f Fv(class.)41 b(Default)32 b(name)e(is)h Fr(Perfect_Hash)p -Fv(.)150 1577 y(`)p Fr(-7)p Fv(')150 1687 y(`)p Fr(--seven-bit)p -Fv(')630 1797 y(This)36 b(option)i(sp)s(eci\014es)f(that)g(all)h -(strings)f(that)h(will)f(b)s(e)g(passed)f(as)i(argumen)m(ts)f(to)h(the) -630 1906 y(generated)e(hash)e(function)g(and)h(the)g(generated)g(lo)s -(okup)g(function)f(will)h(solely)h(consist)630 2016 y(of)d(7-bit)h -(ASCI)s(I)e(c)m(haracters)j(\(b)m(ytes)f(in)f(the)g(range)h(0..127\).) -51 b(\(Note)35 b(that)f(the)g(ANSI)e(C)630 2125 y(functions)f -Fr(isalnum)f Fv(and)i Fr(isgraph)e Fv(do)i Fm(not)41 -b Fv(guaran)m(tee)33 b(that)g(a)f(b)m(yte)h(is)f(in)f(this)h(range.)630 -2235 y(Only)26 b(an)g(explicit)i(test)g(lik)m(e)f(`)p -Fr(c)k(>=)f('A')f(&&)h(c)g(<=)g('Z')p Fv(')25 b(guaran)m(tees)j -(this.\))40 b(This)26 b(w)m(as)h(the)630 2345 y(default)g(in)g(v)m -(ersions)g(of)g Fr(gperf)e Fv(earlier)j(than)e(2.7;)k(no)m(w)d(the)g -(default)g(is)f(to)i(supp)s(ort)d(8-bit)630 2454 y(and)30 -b(m)m(ultib)m(yte)h(c)m(haracters.)150 2655 y(`)p Fr(-l)p -Fv(')150 2765 y(`)p Fr(--compare-lengths)p Fv(')630 2874 -y(Compare)40 b(k)m(eyw)m(ord)g(lengths)g(b)s(efore)f(trying)h(a)h -(string)e(comparison.)70 b(This)39 b(option)h(is)630 -2984 y(mandatory)32 b(for)h(binary)e(comparisons)i(\(see)g(Section)h -(3.3)f([Binary)g(Strings],)g(page)g(22\).)630 3093 y(It)g(also)h(migh)m -(t)g(cut)f(do)m(wn)f(on)h(the)g(n)m(um)m(b)s(er)f(of)h(string)g -(comparisons)g(made)g(during)f(the)630 3203 y(lo)s(okup,)i(since)g(k)m -(eyw)m(ords)f(with)g(di\013eren)m(t)h(lengths)g(are)f(nev)m(er)h -(compared)f(via)h Fr(strcmp)p Fv(.)630 3313 y(Ho)m(w)m(ev)m(er,)j -(using)c(`)p Fr(-l)p Fv(')g(migh)m(t)h(greatly)h(increase)g(the)f(size) -g(of)g(the)f(generated)i(C)e(co)s(de)h(if)630 3422 y(the)k(lo)s(okup)g -(table)g(range)h(is)f(large)h(\(whic)m(h)f(implies)g(that)g(the)g -(switc)m(h)h(option)f(`)p Fr(-S)p Fv(')g(or)630 3532 -y(`)p Fr(\045switch)p Fv(')29 b(is)i(not)g(enabled\),)h(since)f(the)g -(length)g(table)h(con)m(tains)g(as)f(man)m(y)g(elemen)m(ts)h(as)630 -3641 y(there)f(are)f(en)m(tries)i(in)e(the)g(lo)s(okup)g(table.)150 -3842 y(`)p Fr(-c)p Fv(')150 3952 y(`)p Fr(--compare-strncmp)p -Fv(')630 4061 y(Generates)22 b(C)f(co)s(de)g(that)h(uses)e(the)i -Fr(strncmp)d Fv(function)h(to)i(p)s(erform)e(string)h(comparisons.)630 -4171 y(The)30 b(default)g(action)i(is)f(to)g(use)f Fr(strcmp)p -Fv(.)150 4372 y(`)p Fr(-C)p Fv(')150 4482 y(`)p Fr(--readonly-tables)p -Fv(')630 4591 y(Mak)m(es)41 b(the)f(con)m(ten)m(ts)h(of)f(all)h -(generated)f(lo)s(okup)f(tables)i(constan)m(t,)i(i.e.,)h(\\readonly".) -630 4701 y(Man)m(y)31 b(compilers)g(can)g(generate)h(more)e(e\016cien)m -(t)i(co)s(de)f(for)f(this)h(b)m(y)f(putting)g(the)h(tables)630 -4810 y(in)f(readonly)h(memory)-8 b(.)150 5011 y(`)p Fr(-E)p -Fv(')150 5121 y(`)p Fr(--enum)p Fv(')142 b(De\014ne)31 -b(constan)m(t)g(v)-5 b(alues)31 b(using)f(an)g(en)m(um)g(lo)s(cal)i(to) -f(the)g(lo)s(okup)f(function)g(rather)g(than)630 5230 -y(with)37 b(#de\014nes.)60 b(This)36 b(also)i(means)g(that)f -(di\013eren)m(t)h(lo)s(okup)f(functions)g(can)g(reside)g(in)630 -5340 y(the)31 b(same)f(\014le.)41 b(Thanks)29 b(to)j(James)e(Clark)g -Fr()p Fv(.)p eop end -%%Page: 27 29 -TeXDict begin 27 28 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(27)150 299 y(`)p -Fr(-I)p Fv(')150 408 y(`)p Fr(--includes)p Fv(')630 518 -y(Include)30 b(the)h(necessary)h(system)f(include)g(\014le,)g -Fr()p Fv(,)e(at)i(the)g(b)s(eginning)g(of)g(the)630 -628 y(co)s(de.)39 b(By)27 b(default,)g(this)f(is)g(not)g(done;)i(the)e -(user)f(m)m(ust)h(include)g(this)f(header)h(\014le)g(himself)630 -737 y(to)31 b(allo)m(w)h(compilation)g(of)e(the)h(co)s(de.)150 -897 y(`)p Fr(-G)p Fv(')150 1007 y(`)p Fr(--global-table)p -Fv(')630 1117 y(Generate)38 b(the)f(static)h(table)f(of)g(k)m(eyw)m -(ords)g(as)g(a)g(static)h(global)g(v)-5 b(ariable,)39 -b(rather)d(than)630 1226 y(hiding)30 b(it)h(inside)f(of)g(the)h(lo)s -(okup)f(function)g(\(whic)m(h)g(is)h(the)f(default)h(b)s(eha)m(vior\).) -150 1386 y(`)p Fr(-P)p Fv(')150 1496 y(`)p Fr(--pic)p -Fv(')190 b(Optimize)42 b(the)f(generated)h(table)g(for)f(inclusion)g -(in)g(shared)f(libraries.)73 b(This)40 b(reduces)630 -1606 y(the)35 b(startup)g(time)h(of)f(programs)g(using)g(a)h(shared)e -(library)h(con)m(taining)i(the)e(generated)630 1715 y(co)s(de.)j(If)21 -b(the)h(option)h(`)p Fr(-t)p Fv(')e(\(or,)k(equiv)-5 -b(alen)m(tly)d(,)25 b(the)d(`)p Fr(\045struct-type)p -Fv(')d(declaration\))24 b(is)e(also)630 1825 y(giv)m(en,)32 -b(the)f(\014rst)e(\014eld)i(of)f(the)h(user-de\014ned)e(struct)i(m)m -(ust)f(b)s(e)g(of)h(t)m(yp)s(e)g(`)p Fr(int)p Fv(',)f(not)h(`)p -Fr(char)630 1934 y(*)p Fv(',)h(b)s(ecause)f(it)i(will)e(con)m(tain)i -(o\013sets)g(in)m(to)f(the)g(string)f(p)s(o)s(ol)h(instead)f(of)h -(actual)h(strings.)630 2044 y(T)-8 b(o)33 b(con)m(v)m(ert)h(suc)m(h)f -(an)f(o\013set)i(to)f(a)g(string,)h(y)m(ou)f(can)g(use)f(the)h -(expression)f(`)p Fr(stringpool)630 2153 y(+)e Fi(o)11 -b Fv(',)33 b(where)f Fn(o)37 b Fv(is)c(the)g(o\013set.)48 -b(The)32 b(string)g(p)s(o)s(ol)g(name)h(can)g(b)s(e)f(c)m(hanged)h -(through)f(the)630 2263 y(option)f(`)p Fr(--string-pool-name)p -Fv('.)150 2423 y(`)p Fr(-Q)f Fi(string-pool-name)11 b -Fv(')150 2533 y(`)p Fr(--string-pool-name=)p Fi(string)o(-poo)o(l-na)o -(me)f Fv(')630 2642 y(Allo)m(ws)32 b(y)m(ou)g(to)g(sp)s(ecify)f(the)g -(name)h(of)f(the)h(generated)g(string)f(p)s(o)s(ol)g(created)h(b)m(y)f -(option)630 2752 y(`)p Fr(-P)p Fv('.)38 b(The)21 b(default)g(name)h(is) -f(`)p Fr(stringpool)p Fv('.)36 b(This)20 b(option)i(p)s(ermits)f(the)g -(use)g(of)h(t)m(w)m(o)h(hash)630 2862 y(tables)i(in)e(the)h(same)g -(\014le,)i(with)d(`)p Fr(-P)p Fv(')h(and)f(ev)m(en)h(when)f(the)h -(option)g(`)p Fr(-G)p Fv(')g(\(or,)i(equiv)-5 b(alen)m(tly)d(,)630 -2971 y(the)31 b(`)p Fr(\045global-table)p Fv(')c(declaration\))32 -b(is)f(giv)m(en.)150 3131 y(`)p Fr(--null-strings)p Fv(')630 -3241 y(Use)39 b(NULL)g(strings)f(instead)i(of)e(empt)m(y)i(strings)e -(for)h(empt)m(y)g(k)m(eyw)m(ord)g(table)h(en)m(tries.)630 -3351 y(This)e(reduces)g(the)h(startup)g(time)g(of)g(programs)g(using)f -(a)h(shared)f(library)g(con)m(taining)630 3460 y(the)j(generated)g(co)s -(de)g(\(but)f(not)h(as)f(m)m(uc)m(h)h(as)g(option)g(`)p -Fr(-P)p Fv('\),)i(at)e(the)g(exp)s(ense)f(of)h(one)630 -3570 y(more)31 b(test-and-branc)m(h)f(instruction)h(at)g(run)e(time.) -150 3730 y(`)p Fr(-W)h Fi(hash-table-array-name)11 b -Fv(')150 3839 y(`)p Fr(--word-array-name=)p Fi(hash-ta)o(ble-)o(arra)o -(y-n)o(ame)f Fv(')630 3949 y(Allo)m(ws)41 b(y)m(ou)f(to)h(sp)s(ecify)f -(the)g(name)g(for)f(the)i(generated)g(arra)m(y)f(con)m(taining)i(the)e -(hash)630 4059 y(table.)106 b(Default)53 b(name)e(is)h(`)p -Fr(wordlist)p Fv('.)103 b(This)51 b(option)h(p)s(ermits)f(the)h(use)g -(of)g(t)m(w)m(o)630 4168 y(hash)37 b(tables)h(in)g(the)g(same)g -(\014le,)i(ev)m(en)e(when)f(the)h(option)g(`)p Fr(-G)p -Fv(')g(\(or,)i(equiv)-5 b(alen)m(tly)d(,)42 b(the)630 -4278 y(`)p Fr(\045global-table)p Fv(')27 b(declaration\))33 -b(is)d(giv)m(en.)150 4413 y(`)p Fr(--length-table-name=)p -Fi(lengt)o(h-ta)o(ble-)o(arr)o(ay-n)o(ame)10 b Fv(')630 -4522 y(Allo)m(ws)36 b(y)m(ou)e(to)i(sp)s(ecify)e(the)h(name)f(for)g -(the)h(generated)h(arra)m(y)f(con)m(taining)h(the)f(length)630 -4632 y(table.)77 b(Default)43 b(name)g(is)f(`)p Fr(lengthtable)p -Fv('.)74 b(This)41 b(option)i(p)s(ermits)e(the)h(use)g(of)h(t)m(w)m(o) -630 4741 y(length)33 b(tables)h(in)f(the)g(same)g(\014le,)h(ev)m(en)g -(when)e(the)h(option)h(`)p Fr(-G)p Fv(')f(\(or,)h(equiv)-5 -b(alen)m(tly)d(,)36 b(the)630 4851 y(`)p Fr(\045global-table)p -Fv(')27 b(declaration\))33 b(is)d(giv)m(en.)150 5011 -y(`)p Fr(-S)g Fi(total-switch-statements)10 b Fv(')150 -5121 y(`)p Fr(--switch=)p Fi(total-switch-sta)o(teme)o(nts)g -Fv(')630 5230 y(Causes)35 b(the)h(generated)h(C)e(co)s(de)h(to)h(use)e -(a)h Fr(switch)e Fv(statemen)m(t)k(sc)m(heme,)g(rather)d(than)630 -5340 y(an)j(arra)m(y)g(lo)s(okup)g(table.)64 b(This)37 -b(can)h(lead)h(to)f(a)h(reduction)f(in)f(b)s(oth)g(time)i(and)e(space)p -eop end -%%Page: 28 30 -TeXDict begin 28 29 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(28)630 299 y(requiremen)m(ts) -43 b(for)h(some)f(input)g(\014les.)80 b(The)43 b(argumen)m(t)h(to)g -(this)f(option)h(determines)630 408 y(ho)m(w)33 b(man)m(y)f -Fr(switch)f Fv(statemen)m(ts)k(are)e(generated.)49 b(A)32 -b(v)-5 b(alue)34 b(of)e(1)i(generates)g(1)f Fr(switch)630 -518 y Fv(con)m(taining)25 b(all)e(the)h(elemen)m(ts,)i(a)d(v)-5 -b(alue)23 b(of)h(2)f(generates)h(2)g(tables)f(with)g(1/2)h(the)g -(elemen)m(ts)630 628 y(in)38 b(eac)m(h)h Fr(switch)p -Fv(,)g(etc.)65 b(This)37 b(is)h(useful)g(since)g(man)m(y)h(C)e -(compilers)i(cannot)g(correctly)630 737 y(generate)29 -b(co)s(de)f(for)f(large)h Fr(switch)e Fv(statemen)m(ts.)41 -b(This)27 b(option)h(w)m(as)g(inspired)e(in)h(part)g(b)m(y)630 -847 y(Keith)k(Bostic's)h(original)f(C)f(program.)150 -1009 y(`)p Fr(-T)p Fv(')150 1118 y(`)p Fr(--omit-struct-type)p -Fv(')630 1228 y(Prev)m(en)m(ts)f(the)e(transfer)h(of)f(the)h(t)m(yp)s -(e)g(declaration)h(to)g(the)f(output)f(\014le.)40 b(Use)28 -b(this)f(option)630 1338 y(if)j(the)h(t)m(yp)s(e)f(is)h(already)g -(de\014ned)e(elsewhere.)150 1500 y(`)p Fr(-p)p Fv(')334 -b(This)33 b(option)h(is)f(supp)s(orted)f(for)h(compatibilit)m(y)j(with) -d(previous)g(releases)i(of)f Fr(gperf)p Fv(.)49 b(It)630 -1609 y(do)s(es)30 b(not)h(do)f(an)m(ything.)150 1845 -y Fu(4.5)68 b(Options)45 b(for)g(c)l(hanging)h(the)f(Algorithms)h -(emplo)l(y)l(ed)g(b)l(y)f Fl(gperf)150 2031 y Fv(`)p -Fr(-k)30 b Fi(selected-byte-positions)10 b Fv(')150 2141 -y(`)p Fr(--key-positions=)p Fi(selected-)o(byte)o(-pos)o(iti)o(ons)g -Fv(')630 2250 y(Allo)m(ws)28 b(selection)h(of)e(the)g(b)m(yte)h(p)s -(ositions)f(used)f(in)h(the)g(k)m(eyw)m(ords')h(hash)e(function.)39 -b(The)630 2360 y(allo)m(w)m(able)24 b(c)m(hoices)g(range)e(b)s(et)m(w)m -(een)h(1-255,)j(inclusiv)m(e.)38 b(The)22 b(p)s(ositions)f(are)i -(separated)f(b)m(y)630 2469 y(commas,)27 b(e.g.,)i(`)p -Fr(-k)h(9,4,13,14)p Fv(';)25 b(ranges)h(ma)m(y)g(b)s(e)f(used,)h(e.g.,) -i(`)p Fr(-k)i(2-7)p Fv(';)d(and)e(p)s(ositions)630 2579 -y(ma)m(y)c(o)s(ccur)f(in)h(an)m(y)g(order.)37 b(F)-8 -b(urthermore,)22 b(the)f(wildcard)f('*')h(causes)g(the)g(generated)h -(hash)630 2689 y(function)37 b(to)h(consider)g Fe(all)g -Fv(b)m(yte)g(p)s(ositions)f(in)g(eac)m(h)i(k)m(eyw)m(ord,)h(whereas)d -('$')h(instructs)630 2798 y(the)31 b(hash)g(function)f(to)i(use)f(the)g -(\\\014nal)h(b)m(yte")g(of)f(a)h(k)m(eyw)m(ord)f(\(this)g(is)h(the)f -(only)g(w)m(a)m(y)h(to)630 2908 y(use)e(a)h(b)m(yte)g(p)s(osition)f -(greater)i(than)e(255,)i(inciden)m(tally\).)630 3043 -y(F)-8 b(or)37 b(instance,)h(the)e(option)h(`)p Fr(-k)30 -b(1,2,4,6-10,'$')p Fv(')i(generates)38 b(a)e(hash)g(function)f(that)630 -3153 y(considers)g(p)s(ositions)g(1,2,4,6,7,8,9,10,)42 -b(plus)34 b(the)i(last)g(b)m(yte)f(in)g(eac)m(h)h(k)m(eyw)m(ord)g -(\(whic)m(h)630 3263 y(ma)m(y)j(b)s(e)f(at)i(a)f(di\013eren)m(t)g(p)s -(osition)g(for)f(eac)m(h)i(k)m(eyw)m(ord,)h(ob)m(viously\).)67 -b(Keyw)m(ords)38 b(with)630 3372 y(length)30 b(less)g(than)f(the)g -(indicated)h(b)m(yte)h(p)s(ositions)e(w)m(ork)g(prop)s(erly)-8 -b(,)30 b(since)f(selected)i(b)m(yte)630 3482 y(p)s(ositions)k -(exceeding)h(the)g(k)m(eyw)m(ord)f(length)g(are)h(simply)e(not)i -(referenced)f(in)f(the)i(hash)630 3591 y(function.)630 -3727 y(This)28 b(option)i(is)f(not)g(normally)g(needed)g(since)g(v)m -(ersion)g(2.8)i(of)e Fr(gperf)p Fv(;)f(the)h(default)g(b)m(yte)630 -3837 y(p)s(ositions)36 b(are)g(computed)f(dep)s(ending)f(on)i(the)f(k)m -(eyw)m(ord)h(set,)i(through)d(a)h(searc)m(h)g(that)630 -3946 y(minimizes)31 b(the)f(n)m(um)m(b)s(er)f(of)i(b)m(yte)g(p)s -(ositions.)150 4108 y(`)p Fr(-D)p Fv(')150 4218 y(`)p -Fr(--duplicates)p Fv(')630 4327 y(Handle)h(k)m(eyw)m(ords)h(whose)f -(selected)i(b)m(yte)e(sets)h(hash)e(to)i(duplicate)g(v)-5 -b(alues.)46 b(Duplicate)630 4437 y(hash)33 b(v)-5 b(alues)34 -b(can)h(o)s(ccur)e(if)h(a)g(set)h(of)f(k)m(eyw)m(ords)g(has)g(the)g -(same)g(names,)h(but)e(p)s(ossesses)630 4547 y(di\013eren)m(t)f -(attributes,)g(or)f(if)h(the)f(selected)i(b)m(yte)f(p)s(ositions)f(are) -h(not)f(w)m(ell)h(c)m(hosen.)44 b(With)630 4656 y(the)36 -b(-D)g(option)g Fr(gperf)e Fv(treats)j(all)f(these)h(k)m(eyw)m(ords)e -(as)h(part)g(of)g(an)f(equiv)-5 b(alence)37 b(class)630 -4766 y(and)31 b(generates)i(a)f(p)s(erfect)g(hash)f(function)g(with)h -(m)m(ultiple)g(comparisons)g(for)f(duplicate)630 4875 -y(k)m(eyw)m(ords.)38 b(It)21 b(is)f(up)g(to)h(y)m(ou)g(to)h(completely) -g(disam)m(biguate)g(the)f(k)m(eyw)m(ords)g(b)m(y)g(mo)s(difying)630 -4985 y(the)28 b(generated)g(C)f(co)s(de.)40 b(Ho)m(w)m(ev)m(er,)30 -b Fr(gperf)c Fv(helps)h(y)m(ou)g(out)h(b)m(y)f(organizing)i(the)e -(output.)630 5121 y(Using)32 b(this)g(option)g(usually)g(means)g(that)g -(the)g(generated)h(hash)e(function)h(is)g(no)f(longer)630 -5230 y(p)s(erfect.)48 b(On)31 b(the)i(other)g(hand,)g(it)g(p)s(ermits)f -Fr(gperf)f Fv(to)i(w)m(ork)g(on)g(k)m(eyw)m(ord)g(sets)g(that)g(it)630 -5340 y(otherwise)e(could)f(not)h(handle.)p eop end -%%Page: 29 31 -TeXDict begin 29 30 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(29)150 299 y(`)p -Fr(-m)30 b Fi(iterations)11 b Fv(')150 408 y(`)p Fr -(--multiple-iterations=)p Fi(ite)o(rati)o(ons)f Fv(')630 -518 y(P)m(erform)24 b(m)m(ultiple)h(c)m(hoices)h(of)e(the)h(`)p -Fr(-i)p Fv(')f(and)g(`)p Fr(-j)p Fv(')g(v)-5 b(alues,)26 -b(and)d(c)m(ho)s(ose)j(the)e(b)s(est)g(results.)630 628 -y(This)34 b(increases)i(the)f(running)e(time)i(b)m(y)g(a)g(factor)h(of) -f Fn(iterations)40 b Fv(but)34 b(do)s(es)g(a)i(go)s(o)s(d)e(job)630 -737 y(minimizing)d(the)f(generated)i(table)f(size.)150 -907 y(`)p Fr(-i)f Fi(initial-value)11 b Fv(')150 1016 -y(`)p Fr(--initial-asso=)p Fi(initial-va)o(lue)f Fv(')630 -1126 y(Pro)m(vides)29 b(an)f(initial)h Fn(v)-5 b(alue)34 -b Fv(for)28 b(the)g(asso)s(ciate)i(v)-5 b(alues)29 b(arra)m(y)-8 -b(.)41 b(Default)29 b(is)f(0.)41 b(Increasing)630 1235 -y(the)30 b(initial)h(v)-5 b(alue)31 b(helps)e(in\015ate)h(the)g -(\014nal)g(table)h(size,)g(p)s(ossibly)e(leading)i(to)f(more)g(time)630 -1345 y(e\016cien)m(t)f(k)m(eyw)m(ord)e(lo)s(okups.)39 -b(Note)29 b(that)e(this)g(option)h(is)f(not)g(particularly)h(useful)e -(when)630 1455 y(`)p Fr(-S)p Fv(')i(\(or,)i(equiv)-5 -b(alen)m(tly)d(,)31 b(`)p Fr(\045switch)p Fv('\))c(is)i(used.)39 -b(Also,)30 b(`)p Fr(-i)p Fv(')e(is)g(o)m(v)m(erridden)h(when)e(the)i(`) -p Fr(-r)p Fv(')630 1564 y(option)i(is)f(used.)150 1733 -y(`)p Fr(-j)g Fi(jump-value)11 b Fv(')150 1843 y(`)p -Fr(--jump=)p Fi(jump-value)g Fv(')630 1953 y(A\013ects)41 -b(the)f(\\jump)f(v)-5 b(alue",)44 b(i.e.,)g(ho)m(w)c(far)g(to)g(adv)-5 -b(ance)41 b(the)f(asso)s(ciated)i(b)m(yte)e(v)-5 b(alue)630 -2062 y(up)s(on)29 b(collisions.)43 b Fn(Jump-v)-5 b(alue)35 -b Fv(is)30 b(rounded)f(up)h(to)h(an)f(o)s(dd)g(n)m(um)m(b)s(er,)f(the)i -(default)g(is)f(5.)630 2172 y(If)g(the)g Fn(jump-v)-5 -b(alue)35 b Fv(is)c(0)f Fr(gperf)f Fv(jumps)g(b)m(y)h(random)g(amoun)m -(ts.)150 2341 y(`)p Fr(-n)p Fv(')150 2451 y(`)p Fr(--no-strlen)p -Fv(')630 2560 y(Instructs)c(the)i(generator)g(not)f(to)h(include)f(the) -h(length)f(of)g(a)h(k)m(eyw)m(ord)g(when)e(computing)630 -2670 y(its)41 b(hash)f(v)-5 b(alue.)72 b(This)40 b(ma)m(y)h(sa)m(v)m(e) -h(a)f(few)f(assem)m(bly)h(instructions)g(in)f(the)h(generated)630 -2780 y(lo)s(okup)30 b(table.)150 2949 y(`)p Fr(-r)p Fv(')150 -3059 y(`)p Fr(--random)p Fv(')630 3168 y(Utilizes)40 -b(randomness)e(to)h(initialize)h(the)f(asso)s(ciated)h(v)-5 -b(alues)38 b(table.)66 b(This)38 b(frequen)m(tly)630 -3278 y(generates)23 b(solutions)e(faster)h(than)f(using)g -(deterministic)h(initialization)i(\(whic)m(h)d(starts)h(all)630 -3387 y(asso)s(ciated)28 b(v)-5 b(alues)28 b(at)f(0\).)40 -b(F)-8 b(urthermore,)28 b(using)f(the)g(randomization)g(option)h -(generally)630 3497 y(increases)j(the)g(size)g(of)f(the)h(table.)150 -3666 y(`)p Fr(-s)f Fi(size-multiple)11 b Fv(')150 3776 -y(`)p Fr(--size-multiple=)p Fi(size-mult)o(iple)f Fv(')630 -3885 y(A\013ects)40 b(the)e(size)h(of)g(the)f(generated)i(hash)d -(table.)66 b(The)38 b(n)m(umeric)g(argumen)m(t)h(for)f(this)630 -3995 y(option)33 b(indicates)g(\\ho)m(w)g(man)m(y)g(times)g(larger)g -(or)f(smaller")i(the)e(maxim)m(um)g(asso)s(ciated)630 -4105 y(v)-5 b(alue)38 b(range)g(should)e(b)s(e,)j(in)e(relationship)h -(to)g(the)f(n)m(um)m(b)s(er)g(of)g(k)m(eyw)m(ords.)62 -b(It)38 b(can)g(b)s(e)630 4214 y(written)g(as)h(an)f(in)m(teger,)43 -b(a)38 b(\015oating-p)s(oin)m(t)i(n)m(um)m(b)s(er)d(or)i(a)f(fraction.) -66 b(F)-8 b(or)39 b(example,)j(a)630 4324 y(v)-5 b(alue)40 -b(of)f(3)h(means)f(\\allo)m(w)i(the)f(maxim)m(um)f(asso)s(ciated)h(v)-5 -b(alue)40 b(to)g(b)s(e)f(ab)s(out)g(3)g(times)630 4433 -y(larger)33 b(than)g(the)g(n)m(um)m(b)s(er)e(of)i(input)f(k)m(eyw)m -(ords".)49 b(Con)m(v)m(ersely)-8 b(,)35 b(a)e(v)-5 b(alue)33 -b(of)g(1/3)h(means)630 4543 y(\\allo)m(w)43 b(the)e(maxim)m(um)f(asso)s -(ciated)j(v)-5 b(alue)41 b(to)h(b)s(e)e(ab)s(out)g(3)h(times)h(smaller) -f(than)g(the)630 4653 y(n)m(um)m(b)s(er)33 b(of)i(input)f(k)m(eyw)m -(ords".)55 b(V)-8 b(alues)35 b(smaller)h(than)e(1)h(are)g(useful)f(for) -h(limiting)h(the)630 4762 y(o)m(v)m(erall)31 b(size)e(of)g(the)f -(generated)i(hash)e(table,)i(though)e(the)g(option)h(`)p -Fr(-m)p Fv(')g(is)f(b)s(etter)h(at)g(this)630 4872 y(purp)s(ose.)630 -5011 y(If)44 b(`generate)h(switc)m(h')g(option)g(`)p -Fr(-S)p Fv(')f(\(or,)k(equiv)-5 b(alen)m(tly)d(,)49 b(`)p -Fr(\045switch)p Fv('\))43 b(is)h Fm(not)54 b Fv(enabled,)630 -5121 y(the)45 b(maxim)m(um)h(asso)s(ciated)g(v)-5 b(alue)46 -b(in\015uences)f(the)g(static)i(arra)m(y)f(table)g(size,)k(and)45 -b(a)630 5230 y(larger)27 b(table)g(should)e(decrease)i(the)f(time)h -(required)e(for)h(an)f(unsuccessful)g(searc)m(h,)j(at)f(the)630 -5340 y(exp)s(ense)j(of)g(extra)i(table)f(space.)p eop -end -%%Page: 30 32 -TeXDict begin 30 31 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(30)630 299 y(The)35 -b(default)g(v)-5 b(alue)36 b(is)f(1,)i(th)m(us)e(the)h(default)f(maxim) -m(um)g(asso)s(ciated)i(v)-5 b(alue)36 b(ab)s(out)f(the)630 -408 y(same)h(size)g(as)f(the)h(n)m(um)m(b)s(er)e(of)h(k)m(eyw)m(ords)h -(\(for)g(e\016ciency)-8 b(,)38 b(the)d(maxim)m(um)g(asso)s(ciated)630 -518 y(v)-5 b(alue)36 b(is)g(alw)m(a)m(ys)h(rounded)d(up)g(to)i(a)g(p)s -(o)m(w)m(er)g(of)f(2\).)57 b(The)35 b(actual)i(table)g(size)f(ma)m(y)g -(v)-5 b(ary)630 628 y(somewhat,)31 b(since)g(this)f(tec)m(hnique)h(is)g -(essen)m(tially)h(a)f(heuristic.)150 860 y Fu(4.6)68 -b(Informativ)l(e)47 b(Output)150 1044 y Fv(`)p Fr(-h)p -Fv(')150 1154 y(`)p Fr(--help)p Fv(')142 b(Prin)m(ts)24 -b(a)g(short)f(summary)g(on)h(the)g(meaning)g(of)g(eac)m(h)h(program)e -(option.)39 b(Ab)s(orts)23 b(further)630 1264 y(program)30 -b(execution.)150 1423 y(`)p Fr(-v)p Fv(')150 1533 y(`)p -Fr(--version)p Fv(')630 1642 y(Prin)m(ts)g(out)h(the)f(curren)m(t)h(v)m -(ersion)f(n)m(um)m(b)s(er.)150 1802 y(`)p Fr(-d)p Fv(')150 -1911 y(`)p Fr(--debug)p Fv(')94 b(Enables)28 b(the)h(debugging)f -(option.)40 b(This)28 b(pro)s(duces)f(v)m(erb)s(ose)i(diagnostics)g(to) -g(\\standard)630 2021 y(error")i(when)g Fr(gperf)f Fv(is)h(executing.) -45 b(It)32 b(is)f(useful)g(b)s(oth)g(for)g(main)m(taining)i(the)e -(program)630 2130 y(and)f(for)h(determining)g(whether)f(a)h(giv)m(en)h -(set)f(of)g(options)g(is)g(actually)i(sp)s(eeding)d(up)g(the)630 -2240 y(searc)m(h)41 b(for)e(a)h(solution.)70 b(Some)40 -b(useful)f(information)h(is)g(dump)s(ed)e(at)i(the)g(end)g(of)g(the)630 -2350 y(program)30 b(when)g(the)g(`)p Fr(-d)p Fv(')g(option)h(is)g -(enabled.)p eop end -%%Page: 31 33 -TeXDict begin 31 32 bop 150 -116 a Fv(Chapter)30 b(5:)41 -b(Kno)m(wn)30 b(Bugs)g(and)g(Limitations)h(with)f Fr(gperf)1397 -b Fv(31)150 299 y Fs(5)80 b(Kno)l(wn)53 b(Bugs)f(and)i(Limitations)f -(with)f Fo(gperf)275 533 y Fv(The)29 b(follo)m(wing)j(are)f(some)g -(limitations)h(with)e(the)g(curren)m(t)h(release)g(of)g -Fr(gperf)p Fv(:)225 667 y Ft(\017)60 b Fv(The)31 b Fr(gperf)g -Fv(utilit)m(y)i(is)f(tuned)f(to)h(execute)h(quic)m(kly)-8 -b(,)34 b(and)d(w)m(orks)h(quic)m(kly)g(for)g(small)g(to)h(medium)330 -777 y(size)i(data)g(sets)g(\(around)f(1000)i(k)m(eyw)m(ords\).)54 -b(It)34 b(is)h(extremely)h(useful)d(for)h(main)m(taining)i(p)s(erfect) -330 887 y(hash)k(functions)h(for)f(compiler)i(k)m(eyw)m(ord)f(sets.)72 -b(Sev)m(eral)42 b(recen)m(t)g(enhancemen)m(ts)g(no)m(w)e(enable)330 -996 y Fr(gperf)31 b Fv(to)j(w)m(ork)e(e\016cien)m(tly)j(on)d(m)m(uc)m -(h)h(larger)g(k)m(eyw)m(ord)g(sets)g(\(o)m(v)m(er)i(15,000)g(k)m(eyw)m -(ords\).)48 b(When)330 1106 y(pro)s(cessing)30 b(large)i(k)m(eyw)m(ord) -e(sets)h(it)g(helps)f(greatly)i(to)f(ha)m(v)m(e)g(o)m(v)m(er)h(8)f -(megs)g(of)f(RAM.)225 1240 y Ft(\017)60 b Fv(The)43 b(size)i(of)f(the)g -(generate)h(static)h(k)m(eyw)m(ord)e(arra)m(y)g(can)g(get)h -Fm(extr)-5 b(emely)53 b Fv(large)45 b(if)f(the)g(input)330 -1350 y(k)m(eyw)m(ord)d(\014le)f(is)g(large)i(or)e(if)g(the)h(k)m(eyw)m -(ords)f(are)h(quite)g(similar.)70 b(This)40 b(tends)g(to)h(slo)m(w)f -(do)m(wn)330 1460 y(the)35 b(compilation)h(of)f(the)f(generated)i(C)e -(co)s(de,)i(and)e Fm(gr)-5 b(e)g(atly)44 b Fv(in\015ates)35 -b(the)g(ob)5 b(ject)35 b(co)s(de)g(size.)54 b(If)330 -1569 y(this)40 b(situation)h(o)s(ccurs,)h(consider)e(using)f(the)h(`)p -Fr(-S)p Fv(')g(option)g(to)h(reduce)e(data)i(size,)i(p)s(oten)m(tially) -330 1679 y(increasing)h(k)m(eyw)m(ord)g(recognition)h(time)f(a)g -(negligible)i(amoun)m(t.)80 b(Since)44 b(man)m(y)f(C)h(compilers)330 -1788 y(cannot)37 b(correctly)i(generate)f(co)s(de)f(for)g(large)h -(switc)m(h)f(statemen)m(ts)i(it)e(is)g(imp)s(ortan)m(t)g(to)h(qualify) -330 1898 y(the)i Fn(-S)46 b Fv(option)40 b(with)g(an)g(appropriate)g(n) -m(umerical)h(argumen)m(t)f(that)h(con)m(trols)h(the)e(n)m(um)m(b)s(er)f -(of)330 2007 y(switc)m(h)31 b(statemen)m(ts)h(generated.)225 -2142 y Ft(\017)60 b Fv(The)35 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i -(selected)h(b)m(yte)f(p)s(ositions)f(has)g(an)h(arbitrary)f(limit)h(of) -g(255.)57 b(This)330 2252 y(restriction)29 b(should)e(b)s(e)g(remo)m(v) -m(ed,)j(and)d(if)h(an)m(y)m(one)h(considers)f(this)g(a)g(problem)f -(write)i(me)f(and)f(let)330 2361 y(me)j(kno)m(w)h(so)f(I)h(can)f(remo)m -(v)m(e)i(the)f(constrain)m(t.)p eop end -%%Page: 32 34 -TeXDict begin 32 33 bop 150 -116 a Fv(Chapter)30 b(6:)41 -b(Things)29 b(Still)i(Left)g(to)g(Do)2133 b(32)150 299 -y Fs(6)80 b(Things)53 b(Still)g(Left)g(to)g(Do)275 533 -y Fv(It)24 b(should)f(b)s(e)h(\\relativ)m(ely")k(easy)d(to)g(replace)g -(the)g(curren)m(t)f(p)s(erfect)g(hash)g(function)g(algorithm)h(with)150 -643 y(a)35 b(more)f(exhaustiv)m(e)h(approac)m(h;)i(the)d(p)s(erfect)h -(hash)e(mo)s(dule)h(is)g(essen)m(tial)i(indep)s(enden)m(t)d(from)h -(other)150 752 y(program)c(mo)s(dules.)40 b(Additional)31 -b(w)m(orth)m(while)g(impro)m(v)m(emen)m(ts)h(include:)225 -887 y Ft(\017)60 b Fv(Another)34 b(useful)f(extension)h(in)m(v)m(olv)m -(es)i(mo)s(difying)d(the)h(program)f(to)i(generate)g(\\minimal")g(p)s -(er-)330 996 y(fect)42 b(hash)f(functions)f(\(under)h(certain)h -(circumstances,)j(the)c(curren)m(t)g(v)m(ersion)h(can)f(b)s(e)g(rather) -330 1106 y(extra)m(v)-5 b(agan)m(t)39 b(in)d(the)h(generated)g(table)g -(size\).)60 b(This)36 b(is)g(mostly)h(of)g(theoretical)h(in)m(terest,)i -(since)330 1215 y(a)f(sparse)f(table)h(often)g(pro)s(duces)e(faster)i -(lo)s(okups,)h(and)e(use)g(of)h(the)g(`)p Fr(-S)p Fv(')f -Fr(switch)f Fv(option)i(can)330 1325 y(minimize)g(the)g(data)g(size,)j -(at)d(the)g(exp)s(ense)f(of)h(sligh)m(tly)h(longer)f(lo)s(okups)f -(\(note)i(that)f(the)g(gcc)330 1435 y(compiler)e(generally)g(pro)s -(duces)e(go)s(o)s(d)h(co)s(de)g(for)g Fr(switch)f Fv(statemen)m(ts,)k -(reducing)d(the)g(need)g(for)330 1544 y(more)31 b(complex)g(sc)m -(hemes\).)225 1679 y Ft(\017)60 b Fv(In)38 b(addition)h(to)h(impro)m -(ving)f(the)h(algorithm,)i(it)d(w)m(ould)g(also)h(b)s(e)f(useful)f(to)h -(generate)i(an)e(Ada)330 1788 y(pac)m(k)-5 b(age)32 b(as)f(the)g(co)s -(de)f(output,)g(in)g(addition)h(to)g(the)g(curren)m(t)f(C)g(and)g(C)p -Fr(++)f Fv(routines.)p eop end -%%Page: 33 35 -TeXDict begin 33 34 bop 150 -116 a Fv(Chapter)30 b(7:)41 -b(Bibliograph)m(y)2536 b(33)150 299 y Fs(7)80 b(Bibliograph)l(y)150 -533 y Fv([1])35 b(Chang,)f(C.C.:)47 b Fm(A)36 b(Scheme)g(for)g -(Constructing)h(Or)-5 b(der)g(e)g(d)37 b(Minimal)f(Perfe)-5 -b(ct)36 b(Hashing)g(F)-7 b(unctions)150 643 y Fv(Information)30 -b(Sciences)h(39\(1986\),)j(187-195.)150 777 y([2])23 -b(Cic)m(helli,)j(Ric)m(hard)c(J.)h Fm(A)n(uthor's)i(R)-5 -b(esp)g(onse)28 b(to)e(\\On)e(Cichel)5 b(li's)26 b(Minimal)f(Perfe)-5 -b(ct)25 b(Hash)h(F)-7 b(unctions)150 887 y(Metho)i(d")38 -b Fv(Comm)m(unications)31 b(of)f(the)h(A)m(CM,)g(23,)g(12\(Decem)m(b)s -(er)i(1980\),)g(729.)150 1021 y([3])h(Cic)m(helli,)i(Ric)m(hard)e(J.)f -Fm(Minimal)j(Perfe)-5 b(ct)35 b(Hash)h(F)-7 b(unctions)36 -b(Made)g(Simple)41 b Fv(Comm)m(unications)34 b(of)150 -1131 y(the)d(A)m(CM,)g(23,)g(1\(Jan)m(uary)g(1980\),)i(17-19.)150 -1265 y([4])f(Co)s(ok,)g(C.)f(R.)g(and)g(Oldeho)s(eft,)h(R.R.)f -Fm(A)i(L)-5 b(etter)34 b(Oriente)-5 b(d)34 b(Minimal)g(Perfe)-5 -b(ct)33 b(Hashing)h(F)-7 b(unction)150 1375 y Fv(SIGPLAN)30 -b(Notices,)i(17,)g(9\(Septem)m(b)s(er)f(1982\),)h(18-27.)150 -1509 y([5])g(Cormac)m(k,)g(G.)g(V.)g(and)e(Horsp)s(o)s(ol,)i(R.)f(N.)g -(S.)g(and)g(Kaiserw)m(erth,)h(M.)g Fm(Pr)-5 b(actic)g(al)34 -b(Perfe)-5 b(ct)34 b(Hashing)150 1619 y Fv(Computer)c(Journal,)g(28,)h -(1\(Jan)m(uary)g(1985\),)i(54-58.)150 1753 y([6])40 b(Jaesc)m(hk)m(e,)j -(G.)d Fm(R)-5 b(e)g(cipr)g(o)g(c)g(al)44 b(Hashing:)58 -b(A)40 b(Metho)-5 b(d)42 b(for)f(Gener)-5 b(ating)42 -b(Minimal)f(Perfe)-5 b(ct)41 b(Hashing)150 1863 y(F)-7 -b(unctions)39 b Fv(Comm)m(unications)31 b(of)f(the)h(A)m(CM,)g(24,)g -(12\(Decem)m(b)s(er)i(1981\),)g(829-833.)150 1998 y([7])g(Jaesc)m(hk)m -(e,)i(G.)d(and)g(Osterburg,)g(G.)h Fm(On)h(Cichel)5 b(li's)34 -b(Minimal)h(Perfe)-5 b(ct)34 b(Hash)h(F)-7 b(unctions)35 -b(Metho)-5 b(d)150 2107 y Fv(Comm)m(unications)31 b(of)f(the)h(A)m(CM,) -g(23,)h(12\(Decem)m(b)s(er)g(1980\),)h(728-729.)150 2242 -y([8])j(Sager,)i(Thomas)d(J.)g Fm(A)i(Polynomial)i(Time)e(Gener)-5 -b(ator)40 b(for)e(Minimal)f(Perfe)-5 b(ct)37 b(Hash)h(F)-7 -b(unctions)150 2351 y Fv(Comm)m(unications)31 b(of)f(the)h(A)m(CM,)g -(28,)h(5\(Decem)m(b)s(er)g(1985\),)g(523-532)150 2486 -y([9])25 b(Sc)m(hmidt,)h(Douglas)f(C.)f Fm(GPERF:)j(A)g(Perfe)-5 -b(ct)27 b(Hash)g(F)-7 b(unction)28 b(Gener)-5 b(ator)36 -b Fv(Second)24 b(USENIX)g(C)p Fr(++)150 2595 y Fv(Conference)30 -b(Pro)s(ceedings,)h(April)f(1990.)150 2730 y([10])i(Sc)m(hmidt,)f -(Douglas)h(C.)f Fm(GPERF:)i(A)f(Perfe)-5 b(ct)33 b(Hash)h(F)-7 -b(unction)33 b(Gener)-5 b(ator)43 b Fv(C)p Fr(++)30 b -Fv(Rep)s(ort,)h(SIGS)150 2839 y(10)g(10)g(\(No)m(v)m(em)m(b)s(er/Decem) -m(b)s(er)j(1998\).)150 2974 y([11])h(Seb)s(esta,)g(R.W.)g(and)e(T)-8 -b(a)m(ylor,)37 b(M.A.)e Fm(Minimal)h(Perfe)-5 b(ct)36 -b(Hash)g(F)-7 b(unctions)37 b(for)f(R)-5 b(eserve)g(d)38 -b(Wor)-5 b(d)150 3083 y(Lists)38 b Fv(SIGPLAN)30 b(Notices,)j(20,)e -(12\(Septem)m(b)s(er)g(1985\),)i(47-53.)150 3218 y([12])f(Sprugnoli,)d -(R.)h Fm(Perfe)-5 b(ct)33 b(Hashing)g(F)-7 b(unctions:)42 -b(A)32 b(Single)h(Pr)-5 b(ob)g(e)33 b(R)-5 b(etrieving)33 -b(Metho)-5 b(d)33 b(for)g(Static)150 3328 y(Sets)38 b -Fv(Comm)m(unications)31 b(of)g(the)f(A)m(CM,)h(20)h(11\(No)m(v)m(em)m -(b)s(er)g(1977\),)h(841-850.)150 3462 y([13])f(Stallman,)f(Ric)m(hard)f -(M.)h Fm(Using)h(and)i(Porting)f(GNU)f(CC)43 b Fv(F)-8 -b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(1988.)150 -3597 y([14])g(Stroustrup,)d(Bjarne)h Fm(The)j(C)p Fr(++)f -Fm(Pr)-5 b(o)g(gr)g(amming)35 b(L)-5 b(anguage.)41 b -Fv(Addison-W)-8 b(esley)g(,)32 b(1986.)150 3731 y([15])g(Tiemann,)e -(Mic)m(hael)i(D.)f Fm(User's)i(Guide)f(to)i(GNU)e(C)p -Fr(++)d Fv(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 -b(1989.)p eop end -%%Page: 34 36 -TeXDict begin 34 35 bop 150 -116 a Fv(Concept)31 b(Index)2927 -b(34)150 299 y Fs(Concept)52 b(Index)150 638 y Fu(\045)150 -757 y Fd(`)p Fp(\045\045)p Fd(')24 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)49 b Fd(16)150 846 y(`)p Fp(\045{)p Fd(')24 b Fc(:)13 -b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)49 b Fd(19)150 934 y(`)p -Fp(\045})p Fd(')24 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)49 -b Fd(19)150 1023 y(`)p Fp(\0457bit)p Fd(')15 b Fc(:)g(:)e(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)42 -b Fd(18)150 1112 y(`)p Fp(\045compare-lengths)p Fd(')26 -b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fd(18)150 -1201 y(`)p Fp(\045compare-strncmp)p Fd(')26 b Fc(:)13 -b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fd(18)150 1289 -y(`)p Fp(\045define)28 b(class-name)p Fd(')6 b Fc(:)15 -b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fd(18)150 1378 y(`)p -Fp(\045define)c(hash-function-name)p Fd(')c Fc(:)13 b(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fd(17)150 -1467 y(`)p Fp(\045define)28 b(initializer-suffix)p Fd(')c -Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 -b Fd(17)150 1555 y(`)p Fp(\045define)28 b(length-table-name)p -Fd(')e Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)49 b Fd(19)150 1644 y(`)p Fp(\045define)28 b -(lookup-function-name)p Fd(')15 b Fc(:)i(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)41 b Fd(17)150 1733 y(`)p Fp(\045define)28 -b(slot-name)p Fd(')9 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 -b Fd(17)150 1821 y(`)p Fp(\045define)28 b(string-pool-name)p -Fd(')8 b Fc(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)34 b Fd(19)150 1910 y(`)p Fp(\045define)28 -b(word-array-name)p Fd(')10 b Fc(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fd(19)150 -1999 y(`)p Fp(\045delimiters)p Fd(')17 b Fc(:)f(:)e(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fd(17)150 2087 y(`)p -Fp(\045enum)p Fd(')15 b Fc(:)g(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)42 b Fd(18)150 -2176 y(`)p Fp(\045global-table)p Fd(')12 b Fc(:)17 b(:)c(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 b Fd(18)150 2265 y(`)p -Fp(\045ignore-case)p Fd(')15 b Fc(:)h(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)41 b Fd(17)150 2353 y(`)p Fp(\045includes)p -Fd(')25 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)49 b Fd(18)150 2442 y(`)p Fp(\045language)p -Fd(')25 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)49 b Fd(17)150 2531 y(`)p Fp(\045null-strings)p -Fd(')12 b Fc(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 -b Fd(19)150 2619 y(`)p Fp(\045omit-struct-type)p Fd(')23 -b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)45 b Fd(19)150 -2708 y(`)p Fp(\045pic)p Fd(')18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)44 -b Fd(18)150 2797 y(`)p Fp(\045readonly-tables)p Fd(')26 -b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fd(18)150 -2885 y(`)p Fp(\045struct-type)p Fd(')15 b Fc(:)h(:)d(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 b Fd(17)150 2974 y(`)p -Fp(\045switch)p Fd(')10 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fd(19)150 -3223 y Fu(A)150 3342 y Fd(Arra)n(y)25 b(name)c Fc(:)13 -b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)47 -b Fd(27)150 3599 y Fu(B)150 3718 y Fd(Bugs)18 b Fc(:)c(:)f(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)44 b Fd(12)150 3976 y Fu(C)150 4095 y Fd(Class)27 -b(name)13 b Fc(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)39 b Fd(26)150 4183 y(Cop)n(yrigh)n(t)19 -b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)45 b Fd(23)2025 638 y Fu(D)2025 755 y Fd(Declaration)27 -b(section)18 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)44 -b Fd(15)2025 842 y(Delimiters)13 b Fc(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)40 b Fd(24)2025 -930 y(Duplicates)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fd(28)2025 1181 -y Fu(F)2025 1298 y Fd(F)-6 b(ormat)13 b Fc(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)39 -b Fd(15)2025 1385 y(F)-6 b(unctions)25 b(section)14 b -Fc(:)g(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 -b Fd(15)2025 1620 y Fu(H)2025 1737 y Fp(hash)23 b Fc(:)13 -b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)49 b Fd(21)2025 1824 y(hash)25 -b(table)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)40 b Fd(21)2025 2059 y Fu(I)2025 -2176 y Fp(in_word_set)24 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)48 b Fd(22)2025 2263 y(Initializers)10 -b Fc(:)k(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)36 b Fd(25)2025 2498 y Fu(J)2025 2615 y Fd(Jump)25 -b(v)l(alue)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)36 b Fd(29)2025 2866 y Fu(K)2025 -2983 y Fd(Keyw)n(ords)25 b(section)13 b Fc(:)h(:)f(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)39 b Fd(15)2025 3234 y Fu(M)2025 -3351 y Fd(Minimal)27 b(p)r(erfect)f(hash)g(functions)21 -b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -48 b Fd(14)2025 3602 y Fu(N)2025 3719 y Fd(NUL)18 b Fc(:)13 -b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)46 b Fd(22)2025 3954 y Fu(S)2025 -4070 y Fd(Slot)26 b(name)17 b Fc(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)44 b Fd(25)2025 -4158 y(Static)26 b(searc)n(h)g(structure)11 b Fc(:)i(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)38 b Fd(14)2025 4245 y Fp(switch)6 b Fc(:)15 b(:)e(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 -b Fd(22,)27 b(27)p eop end -%%Page: -1 37 -TeXDict begin -1 36 bop 3725 -116 a Fv(i)150 299 y Fs(T)-13 -b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fu(GNU)45 b(GENERAL)g(PUBLIC) -g(LICENSE)28 b Fb(:)20 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)73 -b Fu(1)150 911 y(Con)l(tributors)46 b(to)f(GNU)g Fl(gperf)e -Fu(Utilit)l(y)21 b Fb(:)g(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f -(:)g(:)66 b Fu(12)150 1181 y(1)135 b(In)l(tro)t(duction)32 -b Fb(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) -h(:)76 b Fu(13)150 1450 y(2)135 b(Static)45 b(searc)l(h)h(structures)f -(and)f(GNU)h Fl(gperf)33 b Fb(:)19 b(:)h(:)f(:)80 b Fu(14)150 -1720 y(3)135 b(High-Lev)l(el)46 b(Description)g(of)f(GNU)g -Fl(gperf)24 b Fb(:)18 b(:)h(:)g(:)h(:)f(:)h(:)69 b Fu(15)275 -1857 y Fv(3.1)92 b(Input)29 b(F)-8 b(ormat)31 b(to)g -Fr(gperf)14 b Fa(:)g(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)43 b Fv(15)399 1967 -y(3.1.1)93 b(Declarations)30 b Fa(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) -h(:)57 b Fv(15)524 2076 y(3.1.1.1)93 b(User-supplied)30 -b Fr(struct)12 b Fa(:)h(:)j(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -g(:)42 b Fv(16)524 2186 y(3.1.1.2)93 b(Gp)s(erf)30 b(Declarations)23 -b Fa(:)17 b(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -53 b Fv(16)524 2296 y(3.1.1.3)93 b(C)30 b(Co)s(de)g(Inclusion)15 -b Fa(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)45 b Fv(19)399 2405 y(3.1.2)93 b(F)-8 b(ormat)32 -b(for)e(Keyw)m(ord)g(En)m(tries)15 b Fa(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)45 b Fv(20)399 2515 y(3.1.3)93 b(Including)29 -b(Additional)i(C)f(F)-8 b(unctions)11 b Fa(:)17 b(:)e(:)h(:)f(:)g(:)h -(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)41 b Fv(21)399 2624 y(3.1.4)93 b(Where)31 b(to)g(place)g(directiv)m -(es)h(for)e(GNU)h Fr(indent)p Fv(.)17 b Fa(:)d(:)h(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)47 b Fv(21)275 2734 y(3.2)92 -b(Output)29 b(F)-8 b(ormat)32 b(for)e(Generated)h(C)f(Co)s(de)g(with)g -Fr(gperf)20 b Fa(:)13 b(:)j(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) -49 b Fv(21)275 2844 y(3.3)92 b(Use)30 b(of)h(NUL)f(b)m(ytes)18 -b Fa(:)e(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)47 b Fv(22)275 -2953 y(3.4)92 b(The)29 b(Cop)m(yrigh)m(t)i(of)g(the)g(Output)11 -b Fa(:)j(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)41 -b Fv(23)150 3196 y Fu(4)135 b(In)l(v)l(oking)45 b Fl(gperf)25 -b Fb(:)18 b(:)h(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)70 -b Fu(24)275 3333 y Fv(4.1)92 b(Sp)s(ecifying)29 b(the)i(Lo)s(cation)h -(of)e(the)h(Output)e(File)d Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f -(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)55 b Fv(24)275 -3442 y(4.2)92 b(Options)30 b(that)h(a\013ect)g(In)m(terpretation)h(of)e -(the)h(Input)e(File)23 b Fa(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f -(:)h(:)52 b Fv(24)275 3552 y(4.3)92 b(Options)30 b(to)h(sp)s(ecify)f -(the)g(Language)i(for)e(the)g(Output)g(Co)s(de)c Fa(:)15 -b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)56 b Fv(24)275 3661 y(4.4)92 -b(Options)30 b(for)g(\014ne)f(tuning)h(Details)j(in)d(the)g(Output)f -(Co)s(de)19 b Fa(:)c(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)49 -b Fv(25)275 3771 y(4.5)92 b(Options)30 b(for)g(c)m(hanging)h(the)g -(Algorithms)g(emplo)m(y)m(ed)g(b)m(y)f Fr(gperf)10 b -Fa(:)k(:)i(:)f(:)h(:)f(:)g(:)40 b Fv(28)275 3880 y(4.6)92 -b(Informativ)m(e)31 b(Output)21 b Fa(:)14 b(:)i(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)51 -b Fv(30)150 4123 y Fu(5)135 b(Kno)l(wn)45 b(Bugs)f(and)h(Limitations)i -(with)e Fl(gperf)23 b Fb(:)17 b(:)i(:)h(:)67 b Fu(31)150 -4393 y(6)135 b(Things)44 b(Still)i(Left)g(to)f(Do)18 -b Fb(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -h(:)f(:)h(:)f(:)g(:)h(:)f(:)63 b Fu(32)150 4663 y(7)135 -b(Bibliograph)l(y)25 b Fb(:)20 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) -f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)h(:)f(:)h(:)f(:)g(:)70 b Fu(33)150 4932 y(Concept)45 -b(Index)18 b Fb(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) -f(:)h(:)f(:)h(:)f(:)63 b Fu(34)p eop end -%%Trailer - -userdict /end-hook known{end-hook}if -%%EOF diff --git a/doc/gperf_1.html b/doc/gperf_1.html deleted file mode 100644 index 3b663ca..0000000 --- a/doc/gperf_1.html +++ /dev/null @@ -1,825 +0,0 @@ - - - - - -Perfect Hash Function Generator - GNU GENERAL PUBLIC LICENSE - - -Go to the first, previous, next, last section, table of contents. -


    - -

    -Copyright (C) 1989-2009 Free Software Foundation, Inc. - -

    - -

    -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -

    -

    -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -section entitled “GNU General Public License” is included -exactly as in the original, and provided that the entire resulting -derived work is distributed under the terms of a permission notice -identical to this one. - -

    -

    -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that the section entitled “GNU General Public License” may be -included in a translation approved by the author instead of in the -original English. - -

    - - - -

    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.
    -
    - - -

    1.0 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. - -

    - -

    1.1 TERMS AND CONDITIONS

    - - -
      -
    1. 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. - -
    2. 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. - -
    3. 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. - -
    4. 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. - -
    5. 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. - -
    6. 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: - - -
        -
      1. - -The work must carry prominent notices stating that you modified it, -and giving a relevant date. - -
      2. - -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”. - -
      3. - -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. - -
      4. - -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. - -
    7. 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: - - -
        -
      1. - -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. - -
      2. - -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. - -
      3. - -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. - -
      4. - -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. - -
      5. - -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. - -
    8. 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: - - -
        -
      1. - -Disclaiming warranty or limiting liability differently from the terms -of sections 15 and 16 of this License; or - -
      2. - -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 - -
      3. - -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 - -
      4. - -Limiting the use for publicity purposes of names of licensors or -authors of the material; or - -
      5. - -Declining to grant rights under trademark law for use of some trade -names, trademarks, or service marks; or - -
      6. - -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. - -
    9. 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. - -
    10. 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. - -
    11. 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. - -
    12. 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. - -
    13. 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. - -
    14. 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. - -
    15. 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. - -
    16. 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. - -
    17. 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. - -
    18. 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. - -
    - - -

    1.2 END OF TERMS AND CONDITIONS

    - - -

    1.3 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. - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_10.html b/doc/gperf_10.html deleted file mode 100644 index a3d3e17..0000000 --- a/doc/gperf_10.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - -Perfect Hash Function Generator - Concept Index - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    Concept Index

    - -

    -Jump to: -& -- -a -- -b -- -c -- -d -- -f -- -h -- -i -- -j -- -k -- -m -- -n -- -s -

    -

    &

    - -
  • ‘%%’ -
  • ‘%7bit’ -
  • ‘%compare-lengths’ -
  • ‘%compare-strncmp’ -
  • ‘%define class-name’ -
  • ‘%define hash-function-name’ -
  • ‘%define initializer-suffix’ -
  • ‘%define length-table-name’ -
  • ‘%define lookup-function-name’ -
  • ‘%define slot-name’ -
  • ‘%define string-pool-name’ -
  • ‘%define word-array-name’ -
  • ‘%delimiters’ -
  • ‘%enum’ -
  • ‘%global-table’ -
  • ‘%ignore-case’ -
  • ‘%includes’ -
  • ‘%language’ -
  • ‘%null-strings’ -
  • ‘%omit-struct-type’ -
  • ‘%pic’ -
  • ‘%readonly-tables’ -
  • ‘%struct-type’ -
  • ‘%switch’ -
  • ‘%{’ -
  • ‘%}’ -
  • -

    a

    - -
  • Array name, Array name -
  • -

    b

    - -
  • Bugs -
  • -

    c

    - -
  • Class name -
  • Copyright -
  • -

    d

    - -
  • Declaration section -
  • Delimiters -
  • Duplicates -
  • -

    f

    - -
  • Format -
  • Functions section -
  • -

    h

    - -
  • hash -
  • hash table -
  • -

    i

    - -
  • in_word_set -
  • Initializers -
  • -

    j

    - -
  • Jump value -
  • -

    k

    - -
  • Keywords section -
  • -

    m

    - -
  • Minimal perfect hash functions -
  • -

    n

    - -
  • NUL -
  • -

    s

    - -
  • Slot name -
  • Static search structure -
  • switch, switch -
  • - -

    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_2.html b/doc/gperf_2.html deleted file mode 100644 index 1a57404..0000000 --- a/doc/gperf_2.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - -Perfect Hash Function Generator - Contributors to GNU gperf Utility - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    Contributors to GNU gperf Utility

    - - -
      -
    • - - -The GNU gperf perfect hash function generator utility was -written in GNU C++ by Douglas C. Schmidt. The general -idea for the perfect hash function generator was inspired by Keith -Bostic's algorithm written in C, and distributed to net.sources around -1984. The current program is a heavily modified, enhanced, and extended -implementation of Keith's basic idea, created at the University of -California, Irvine. Bugs, patches, and suggestions should be reported -to <bug-gnu-gperf@gnu.org>. - -
    • - -Special thanks is extended to Michael Tiemann and Doug Lea, for -providing a useful compiler, and for giving me a forum to exhibit my -creation. - -In addition, Adam de Boor and Nels Olson provided many tips and insights -that greatly helped improve the quality and functionality of gperf. - -
    • - -Bruno Haible enhanced and optimized the search algorithm. He also rewrote -the input routines and the output routines for better reliability, and -added a testsuite. -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_3.html b/doc/gperf_3.html deleted file mode 100644 index c587a69..0000000 --- a/doc/gperf_3.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - -Perfect Hash Function Generator - 2 Introduction - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    2 Introduction

    - -

    -gperf is a perfect hash function generator written in C++. It -transforms an n element user-specified keyword set W into a -perfect hash function F. F uniquely maps keywords in -W onto the range 0..k, where k >= n-1. If k -= n-1 then F is a minimal perfect hash function. -gperf generates a 0..k element static lookup table and a -pair of C functions. These functions determine whether a given -character string s occurs in W, using at most one probe into -the lookup table. - -

    -

    -gperf currently generates the reserved keyword recognizer for -lexical analyzers in several production and research compilers and -language processing tools, including GNU C, GNU C++, GNU Java, GNU Pascal, -GNU Modula 3, and GNU indent. Complete C++ source code for gperf is -available from http://ftp.gnu.org/pub/gnu/gperf/. -A paper describing gperf's design and implementation in greater -detail is available in the Second USENIX C++ Conference proceedings -or from http://www.cs.wustl.edu/~schmidt/resume.html. - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_4.html b/doc/gperf_4.html deleted file mode 100644 index 8aab740..0000000 --- a/doc/gperf_4.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - -Perfect Hash Function Generator - 3 Static search structures and GNU gperf - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    3 Static search structures and GNU gperf

    -

    - - -

    -

    -A static search structure is an Abstract Data Type with certain -fundamental operations, e.g., initialize, insert, -and retrieve. Conceptually, all insertions occur before any -retrievals. In practice, gperf generates a static array -containing search set keywords and any associated attributes specified -by the user. Thus, there is essentially no execution-time cost for the -insertions. It is a useful data structure for representing static -search sets. Static search sets occur frequently in software system -applications. Typical static search sets include compiler reserved -words, assembler instruction opcodes, and built-in shell interpreter -commands. Search set members, called keywords, are inserted into -the structure only once, usually during program initialization, and are -not generally modified at run-time. - -

    -

    -Numerous static search structure implementations exist, e.g., -arrays, linked lists, binary search trees, digital search tries, and -hash tables. Different approaches offer trade-offs between space -utilization and search time efficiency. For example, an n element -sorted array is space efficient, though the average-case time -complexity for retrieval operations using binary search is -proportional to log n. Conversely, hash table implementations -often locate a table entry in constant time, but typically impose -additional memory overhead and exhibit poor worst case performance. - -

    -

    - -Minimal perfect hash functions provide an optimal solution for a -particular class of static search sets. A minimal perfect hash -function is defined by two properties: - -

    - -
      -
    • - -It allows keyword recognition in a static search set using at most -one probe into the hash table. This represents the “perfect” -property. -
    • - -The actual memory allocated to store the keywords is precisely large -enough for the keyword set, and no larger. This is the -“minimal” property. -
    - -

    -For most applications it is far easier to generate perfect hash -functions than minimal perfect hash functions. Moreover, -non-minimal perfect hash functions frequently execute faster than -minimal ones in practice. This phenomena occurs since searching a -sparse keyword table increases the probability of locating a “null” -entry, thereby reducing string comparisons. gperf's default -behavior generates near-minimal perfect hash functions for -keyword sets. However, gperf provides many options that permit -user control over the degree of minimality and perfection. - -

    -

    -Static search sets often exhibit relative stability over time. For -example, Ada's 63 reserved words have remained constant for nearly a -decade. It is therefore frequently worthwhile to expend concerted -effort building an optimal search structure once, if it -subsequently receives heavy use multiple times. gperf removes -the drudgery associated with constructing time- and space-efficient -search structures by hand. It has proven a useful and practical tool -for serious programming projects. Output from gperf is currently -used in several production and research compilers, including GNU C, GNU -C++, GNU Java, GNU Pascal, and GNU Modula 3. The latter two compilers are -not yet part of the official GNU distribution. Each compiler utilizes -gperf to automatically generate static search structures that -efficiently identify their respective reserved keywords. - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_5.html b/doc/gperf_5.html deleted file mode 100644 index 3f97b93..0000000 --- a/doc/gperf_5.html +++ /dev/null @@ -1,720 +0,0 @@ - - - - - -Perfect Hash Function Generator - 4 High-Level Description of GNU gperf - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    4 High-Level Description of GNU gperf

    - -

    -The perfect hash function generator gperf reads a set of -“keywords” from an input file (or from the standard input by -default). It attempts to derive a perfect hashing function that -recognizes a member of the static keyword set with at most a -single probe into the lookup table. If gperf succeeds in -generating such a function it produces a pair of C source code routines -that perform hashing and table lookup recognition. All generated C code -is directed to the standard output. Command-line options described -below allow you to modify the input and output format to gperf. - -

    -

    -By default, gperf attempts to produce time-efficient code, with -less emphasis on efficient space utilization. However, several options -exist that permit trading-off execution time for storage space and vice -versa. In particular, expanding the generated table size produces a -sparse search structure, generally yielding faster searches. -Conversely, you can direct gperf to utilize a C switch -statement scheme that minimizes data space storage size. Furthermore, -using a C switch may actually speed up the keyword retrieval time -somewhat. Actual results depend on your C compiler, of course. - -

    -

    -In general, gperf assigns values to the bytes it is using -for hashing until some set of values gives each keyword a unique value. -A helpful heuristic is that the larger the hash value range, the easier -it is for gperf to find and generate a perfect hash function. -Experimentation is the key to getting the most from gperf. - -

    - - -

    4.1 Input Format to gperf

    -

    - - - - -You can control the input file format by varying certain command-line -arguments, in particular the ‘-t’ option. The input's appearance -is similar to GNU utilities flex and bison (or UNIX -utilities lex and yacc). Here's an outline of the general -format: - -

    - -
    -declarations
    -%%
    -keywords
    -%%
    -functions
    -
    - -

    -Unlike flex or bison, the declarations section and -the functions section are optional. The following sections describe the -input format for each section. - -

    - -

    -It is possible to omit the declaration section entirely, if the ‘-t’ -option is not given. In this case the input file begins directly with the -first keyword line, e.g.: - -

    - -
    -january
    -february
    -march
    -april
    -...
    -
    - - - -

    4.1.1 Declarations

    - -

    -The keyword input file optionally contains a section for including -arbitrary C declarations and definitions, gperf declarations that -act like command-line options, as well as for providing a user-supplied -struct. - -

    - - - -

    4.1.1.1 User-supplied struct

    - -

    -If the ‘-t’ option (or, equivalently, the ‘%struct-type’ declaration) -is enabled, you must provide a C struct as the last -component in the declaration section from the input file. The first -field in this struct must be of type char * or const char * -if the ‘-P’ option is not given, or of type int if the option -‘-P’ (or, equivalently, the ‘%pic’ declaration) is enabled. -This first field must be called ‘name’, although it is possible to modify -its name with the ‘-K’ option (or, equivalently, the -‘%define slot-name’ declaration) described below. - -

    -

    -Here is a simple example, using months of the year and their attributes as -input: - -

    - -
    -struct month { char *name; int number; int days; int leap_days; };
    -%%
    -january,   1, 31, 31
    -february,  2, 28, 29
    -march,     3, 31, 31
    -april,     4, 30, 30
    -may,       5, 31, 31
    -june,      6, 30, 30
    -july,      7, 31, 31
    -august,    8, 31, 31
    -september, 9, 30, 30
    -october,  10, 31, 31
    -november, 11, 30, 30
    -december, 12, 31, 31
    -
    - -

    - -Separating the struct declaration from the list of keywords and -other fields are a pair of consecutive percent signs, ‘%%’, -appearing left justified in the first column, as in the UNIX utility -lex. - -

    -

    -If the struct has already been declared in an include file, it can -be mentioned in an abbreviated form, like this: - -

    - -
    -struct month;
    -%%
    -january,   1, 31, 31
    -...
    -
    - - - -

    4.1.1.2 Gperf Declarations

    - -

    -The declaration section can contain gperf declarations. They -influence the way gperf works, like command line options do. -In fact, every such declaration is equivalent to a command line option. -There are three forms of declarations: - -

    - -
      -
    1. - -Declarations without argument, like ‘%compare-lengths’. - -
    2. - -Declarations with an argument, like ‘%switch=count. - -
    3. - -Declarations of names of entities in the output file, like -‘%define lookup-function-name name. -
    - -

    -When a declaration is given both in the input file and as a command line -option, the command-line option's value prevails. - -

    -

    -The following gperf declarations are available. - -

    -
    - -
    ‘%delimiters=delimiter-list -
    - -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. - -
    ‘%struct-type’ -
    - -Allows you to include a struct type declaration for generated -code; see above for an example. - -
    ‘%ignore-case’ -
    - -Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. - -
    ‘%language=language-name -
    - -Instructs gperf to generate code in the language specified by the -option's argument. Languages handled are currently: - -
    - -
    ‘KR-C’ -
    -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking ‘const’. - -
    ‘C’ -
    -Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you #define const to empty -for compilers which don't know about this keyword. - -
    ‘ANSI-C’ -
    -ANSI C. This language is understood by ANSI C (C89, ISO C90) compilers, -ISO C99 compilers, and C++ compilers. - -
    ‘C++’ -
    -C++. This language is understood by C++ compilers. -
    - -The default is ANSI-C. - -
    ‘%define slot-name name -
    - -This declaration is only useful when option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is ‘name’. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied struct. - -
    ‘%define initializer-suffix initializers -
    - -This declaration is only useful when option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) has been given. -It permits to specify initializers for the structure members following -slot-name in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following slot-name. - -
    ‘%define hash-function-name name -
    - -Allows you to specify the name for the generated hash function. Default -name is ‘hash’. This option permits the use of two hash tables in -the same file. - -
    ‘%define lookup-function-name name -
    - -Allows you to specify the name for the generated lookup function. -Default name is ‘in_word_set’. This option permits multiple -generated hash functions to be used in the same application. - -
    ‘%define class-name name -
    - -This option is only useful when option ‘-L C++’ (or, equivalently, -the ‘%language=C++’ declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -Perfect_Hash. - -
    ‘%7bit’ -
    - -This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions isalnum and isgraph do -not guarantee that a byte is in this range. Only an explicit -test like ‘c >= 'A' && c <= 'Z'’ guarantees this.) - -
    ‘%compare-lengths’ -
    - -Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (see section 4.3 Use of NUL bytes). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via strcmp. -However, using ‘%compare-lengths’ might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option ‘-S’ or ‘%switch’ is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -
    ‘%compare-strncmp’ -
    - -Generates C code that uses the strncmp function to perform -string comparisons. The default action is to use strcmp. - -
    ‘%readonly-tables’ -
    - -Makes the contents of all generated lookup tables constant, i.e., -“readonly”. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -
    ‘%enum’ -
    - -Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark <jjc@ai.mit.edu>. - -
    ‘%includes’ -
    - -Include the necessary system include file, <string.h>, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -
    ‘%global-table’ -
    - -Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -
    ‘%pic’ -
    - -Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the ‘%struct-type’ declaration (or, -equivalently, the option ‘-t’) is also given, the first field of the -user-defined struct must be of type ‘int’, not ‘char *’, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -‘stringpool + o, where o is the offset. The string pool -name can be changed through the ‘%define string-pool-name’ declaration. - -
    ‘%define string-pool-name name -
    - -Allows you to specify the name of the generated string pool created by -the declaration ‘%pic’ (or, equivalently, the option ‘-P’). -The default name is ‘stringpool’. This declaration permits the use of -two hash tables in the same file, with ‘%pic’ and even when the -‘%global-table’ declaration (or, equivalently, the option ‘-G’) -is given. - -
    ‘%null-strings’ -
    - -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as the declaration ‘%pic’), at the -expense of one more test-and-branch instruction at run time. - -
    ‘%define word-array-name name -
    - -Allows you to specify the name for the generated array containing the -hash table. Default name is ‘wordlist’. This option permits the -use of two hash tables in the same file, even when the option ‘-G’ -(or, equivalently, the ‘%global-table’ declaration) is given. - -
    ‘%define length-table-name name -
    - -Allows you to specify the name for the generated array containing the -length table. Default name is ‘lengthtable’. This option permits the -use of two length tables in the same file, even when the option ‘-G’ -(or, equivalently, the ‘%global-table’ declaration) is given. - -
    ‘%switch=count -
    - -Causes the generated C code to use a switch statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many switch statements are generated. A -value of 1 generates 1 switch containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -switch, etc. This is useful since many C compilers cannot -correctly generate code for large switch statements. This option -was inspired in part by Keith Bostic's original C program. - -
    ‘%omit-struct-type’ -
    - -Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. -
    - - - -

    4.1.1.3 C Code Inclusion

    - -

    - - -Using a syntax similar to GNU utilities flex and bison, it -is possible to directly include C source text and comments verbatim into -the generated output file. This is accomplished by enclosing the region -inside left-justified surrounding ‘%{’, ‘%}’ pairs. Here is -an input fragment based on the previous example that illustrates this -feature: - -

    - -
    -%{
    -#include <assert.h>
    -/* This section of code is inserted directly into the output. */
    -int return_month_days (struct month *months, int is_leap_year);
    -%}
    -struct month { char *name; int number; int days; int leap_days; };
    -%%
    -january,   1, 31, 31
    -february,  2, 28, 29
    -march,     3, 31, 31
    -...
    -
    - - - -

    4.1.2 Format for Keyword Entries

    - -

    -The second input file format section contains lines of keywords and any -associated attributes you might supply. A line beginning with ‘#’ -in the first column is considered a comment. Everything following the -‘#’ is ignored, up to and including the following newline. A line -beginning with ‘%’ in the first column is an option declaration and -must not occur within the keywords section. - -

    -

    -The first field of each non-comment line is always the keyword itself. It -can be given in two ways: as a simple name, i.e., without surrounding -string quotation marks, or as a string enclosed in double-quotes, in -C syntax, possibly with backslash escapes like \" or \234 -or \xa8. In either case, it must start right at the beginning -of the line, without leading whitespace. -In this context, a “field” is considered to extend up to, but -not include, the first blank, comma, or newline. Here is a simple -example taken from a partial list of C reserved words: - -

    - -
    -# These are a few C reserved words, see the c.gperf file 
    -# for a complete list of ANSI C reserved words.
    -unsigned
    -sizeof
    -switch
    -signed
    -if
    -default
    -for
    -while
    -return
    -
    - -

    -Note that unlike flex or bison the first ‘%%’ marker -may be elided if the declaration section is empty. - -

    -

    -Additional fields may optionally follow the leading keyword. Fields -should be separated by commas, and terminate at the end of line. What -these fields mean is entirely up to you; they are used to initialize the -elements of the user-defined struct provided by you in the -declaration section. If the ‘-t’ option (or, equivalently, the -‘%struct-type’ declaration) is not enabled -these fields are simply ignored. All previous examples except the last -one contain keyword attributes. - -

    - - -

    4.1.3 Including Additional C Functions

    - -

    -The optional third section also corresponds closely with conventions -found in flex and bison. All text in this section, -starting at the final ‘%%’ and extending to the end of the input -file, is included verbatim into the generated output file. Naturally, -it is your responsibility to ensure that the code contained in this -section is valid C. - -

    - - -

    4.1.4 Where to place directives for GNU indent.

    - -

    -If you want to invoke GNU indent on a gperf input file, -you will see that GNU indent doesn't understand the ‘%%’, -‘%{’ and ‘%}’ directives that control gperf's -interpretation of the input file. Therefore you have to insert some -directives for GNU indent. More precisely, assuming the most -general input file structure - -

    - -
    -declarations part 1
    -%{
    -verbatim code
    -%}
    -declarations part 2
    -%%
    -keywords
    -%%
    -functions
    -
    - -

    -you would insert ‘*INDENT-OFF*’ and ‘*INDENT-ON*’ comments -as follows: - -

    - -
    -/* *INDENT-OFF* */
    -declarations part 1
    -%{
    -/* *INDENT-ON* */
    -verbatim code
    -/* *INDENT-OFF* */
    -%}
    -declarations part 2
    -%%
    -keywords
    -%%
    -/* *INDENT-ON* */
    -functions
    -
    - - - -

    4.2 Output Format for Generated C Code with gperf

    -

    - - -

    -

    -Several options control how the generated C code appears on the standard -output. Two C functions are generated. They are called hash and -in_word_set, although you may modify their names with a command-line -option. Both functions require two arguments, a string, char * -str, and a length parameter, int len. Their default -function prototypes are as follows: - -

    -

    -

    -
    Function: unsigned int hash (const char * str, unsigned int len) -
    -By default, the generated hash function returns an integer value -created by adding len to several user-specified str byte -positions indexed into an associated values table stored in a -local static array. The associated values table is constructed -internally by gperf and later output as a static local C array -called ‘hash_table’. The relevant selected positions (i.e. indices -into str) are specified via the ‘-k’ option when running -gperf, as detailed in the Options section below (see section 5 Invoking gperf). -
    - -

    -

    -

    -
    Function: in_word_set (const char * str, unsigned int len) -
    -If str is in the keyword set, returns a pointer to that -keyword. More exactly, if the option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) was given, it returns -a pointer to the matching keyword's structure. Otherwise it returns -NULL. -
    - -

    -

    -If the option ‘-c’ (or, equivalently, the ‘%compare-strncmp’ -declaration) is not used, str must be a NUL terminated -string of exactly length len. If ‘-c’ (or, equivalently, the -‘%compare-strncmp’ declaration) is used, str must -simply be an array of len bytes and does not need to be NUL -terminated. - -

    -

    -The code generated for these two functions is affected by the following -options: - -

    -
    - -
    ‘-t’ -
    -
    ‘--struct-type’ -
    -Make use of the user-defined struct. - -
    ‘-S total-switch-statements -
    -
    ‘--switch=total-switch-statements -
    - -Generate 1 or more C switch statement rather than use a large, -(and potentially sparse) static array. Although the exact time and -space savings of this approach vary according to your C compiler's -degree of optimization, this method often results in smaller and faster -code. -
    - -

    -If the ‘-t’ and ‘-S’ options (or, equivalently, the -‘%struct-type’ and ‘%switch’ declarations) are omitted, the default -action -is to generate a char * array containing the keywords, together with -additional empty strings used for padding the array. By experimenting -with the various input and output options, and timing the resulting C -code, you can determine the best option choices for different keyword -set characteristics. - -

    - - -

    4.3 Use of NUL bytes

    -

    - - -

    -

    -By default, the code generated by gperf operates on zero -terminated strings, the usual representation of strings in C. This means -that the keywords in the input file must not contain NUL bytes, -and the str argument passed to hash or in_word_set -must be NUL terminated and have exactly length len. - -

    -

    -If option ‘-c’ (or, equivalently, the ‘%compare-strncmp’ -declaration) is used, then the str argument does not need -to be NUL terminated. The code generated by gperf will only -access the first len, not len+1, bytes starting at str. -However, the keywords in the input file still must not contain NUL -bytes. - -

    -

    -If option ‘-l’ (or, equivalently, the ‘%compare-lengths’ -declaration) is used, then the hash table performs binary -comparison. The keywords in the input file may contain NUL bytes, -written in string syntax as \000 or \x00, and the code -generated by gperf will treat NUL like any other byte. -Also, in this case the ‘-c’ option (or, equivalently, the -‘%compare-strncmp’ declaration) is ignored. - -

    - - -

    4.4 The Copyright of the Output

    -

    - - -

    -

    -gperf is under GPL, but that does not cause the output produced -by gperf to be under GPL. The reason is that the output contains -only small pieces of text that come directly from gperf's source -code -- only about 7 lines long, too small for being significant --, and -therefore the output is not a “work based on gperf” (in the -sense of the GPL version 3). - -

    -

    -On the other hand, the output produced by gperf contains -essentially all of the input file. Therefore the output is a -“derivative work” of the input (in the sense of U.S. copyright law); -and its copyright status depends on the copyright of the input. For most -software licenses, the result is that the the output is under the same -license, with the same copyright holder, as the input that was passed to -gperf. - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_6.html b/doc/gperf_6.html deleted file mode 100644 index 92743c6..0000000 --- a/doc/gperf_6.html +++ /dev/null @@ -1,502 +0,0 @@ - - - - - -Perfect Hash Function Generator - 5 Invoking gperf - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    5 Invoking gperf

    - -

    -There are many options to gperf. They were added to make -the program more convenient for use with real applications. “On-line” -help is readily available via the ‘--help’ option. Here is the -complete list of options. - -

    - - - -

    5.1 Specifying the Location of the Output File

    - -
    - -
    ‘--output-file=file -
    -Allows you to specify the name of the file to which the output is written to. -
    - -

    -The results are written to standard output if no output file is specified -or if it is ‘-’. - -

    - - -

    5.2 Options that affect Interpretation of the Input File

    - -

    -These options are also available as declarations in the input file -(see section 4.1.1.2 Gperf Declarations). - -

    -
    - -
    ‘-e keyword-delimiter-list -
    -
    ‘--delimiters=keyword-delimiter-list -
    - -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. One useful trick is to use -e'TAB', where TAB is -the literal tab character. - -
    ‘-t’ -
    -
    ‘--struct-type’ -
    -Allows you to include a struct type declaration for generated -code. Any text before a pair of consecutive ‘%%’ is considered -part of the type declaration. Keywords and additional fields may follow -this, one group of fields per line. A set of examples for generating -perfect hash tables and functions for Ada, C, C++, Pascal, Modula 2, -Modula 3 and JavaScript reserved words are distributed with this release. - -
    ‘--ignore-case’ -
    -Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. This option is therefore not -suitable if a properly internationalized or locale aware case mapping -should be used. (For example, in a Turkish locale, the upper case equivalent -of the lowercase ASCII letter ‘i’ is the non-ASCII character -‘capital i with dot above’.) For this case, it is better to apply -an uppercase or lowercase conversion on the string before passing it to -the gperf generated function. -
    - - - -

    5.3 Options to specify the Language for the Output Code

    - -

    -These options are also available as declarations in the input file -(see section 4.1.1.2 Gperf Declarations). - -

    -
    - -
    ‘-L generated-language-name -
    -
    ‘--language=generated-language-name -
    -Instructs gperf to generate code in the language specified by the -option's argument. Languages handled are currently: - -
    - -
    ‘KR-C’ -
    -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking ‘const’. - -
    ‘C’ -
    -Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you #define const to empty -for compilers which don't know about this keyword. - -
    ‘ANSI-C’ -
    -ANSI C. This language is understood by ANSI C compilers and C++ compilers. - -
    ‘C++’ -
    -C++. This language is understood by C++ compilers. -
    - -The default is ANSI-C. - -
    ‘-a’ -
    -This option is supported for compatibility with previous releases of -gperf. It does not do anything. - -
    ‘-g’ -
    -This option is supported for compatibility with previous releases of -gperf. It does not do anything. -
    - - - -

    5.4 Options for fine tuning Details in the Output Code

    - -

    -Most of these options are also available as declarations in the input file -(see section 4.1.1.2 Gperf Declarations). - -

    -
    - -
    ‘-K slot-name -
    -
    ‘--slot-name=slot-name -
    - -This option is only useful when option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is ‘name’. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied struct. - -
    ‘-F initializers -
    -
    ‘--initializer-suffix=initializers -
    - -This option is only useful when option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) has been given. -It permits to specify initializers for the structure members following -slot-name in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following slot-name. - -
    ‘-H hash-function-name -
    -
    ‘--hash-function-name=hash-function-name -
    -Allows you to specify the name for the generated hash function. Default -name is ‘hash’. This option permits the use of two hash tables in -the same file. - -
    ‘-N lookup-function-name -
    -
    ‘--lookup-function-name=lookup-function-name -
    -Allows you to specify the name for the generated lookup function. -Default name is ‘in_word_set’. This option permits multiple -generated hash functions to be used in the same application. - -
    ‘-Z class-name -
    -
    ‘--class-name=class-name -
    - -This option is only useful when option ‘-L C++’ (or, equivalently, -the ‘%language=C++’ declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -Perfect_Hash. - -
    ‘-7’ -
    -
    ‘--seven-bit’ -
    -This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions isalnum and isgraph do -not guarantee that a byte is in this range. Only an explicit -test like ‘c >= 'A' && c <= 'Z'’ guarantees this.) This was the -default in versions of gperf earlier than 2.7; now the default is -to support 8-bit and multibyte characters. - -
    ‘-l’ -
    -
    ‘--compare-lengths’ -
    -Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (see section 4.3 Use of NUL bytes). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via strcmp. -However, using ‘-l’ might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option ‘-S’ or ‘%switch’ is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -
    ‘-c’ -
    -
    ‘--compare-strncmp’ -
    -Generates C code that uses the strncmp function to perform -string comparisons. The default action is to use strcmp. - -
    ‘-C’ -
    -
    ‘--readonly-tables’ -
    -Makes the contents of all generated lookup tables constant, i.e., -“readonly”. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -
    ‘-E’ -
    -
    ‘--enum’ -
    -Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark <jjc@ai.mit.edu>. - -
    ‘-I’ -
    -
    ‘--includes’ -
    -Include the necessary system include file, <string.h>, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -
    ‘-G’ -
    -
    ‘--global-table’ -
    -Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -
    ‘-P’ -
    -
    ‘--pic’ -
    -Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the option ‘-t’ (or, equivalently, the -‘%struct-type’ declaration) is also given, the first field of the -user-defined struct must be of type ‘int’, not ‘char *’, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -‘stringpool + o, where o is the offset. The string pool -name can be changed through the option ‘--string-pool-name’. - -
    ‘-Q string-pool-name -
    -
    ‘--string-pool-name=string-pool-name -
    -Allows you to specify the name of the generated string pool created by -option ‘-P’. The default name is ‘stringpool’. This option -permits the use of two hash tables in the same file, with ‘-P’ and -even when the option ‘-G’ (or, equivalently, the ‘%global-table’ -declaration) is given. - -
    ‘--null-strings’ -
    -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as option ‘-P’), at the expense -of one more test-and-branch instruction at run time. - -
    ‘-W hash-table-array-name -
    -
    ‘--word-array-name=hash-table-array-name -
    - -Allows you to specify the name for the generated array containing the -hash table. Default name is ‘wordlist’. This option permits the -use of two hash tables in the same file, even when the option ‘-G’ -(or, equivalently, the ‘%global-table’ declaration) is given. - -
    ‘--length-table-name=length-table-array-name -
    - -Allows you to specify the name for the generated array containing the -length table. Default name is ‘lengthtable’. This option permits the -use of two length tables in the same file, even when the option ‘-G’ -(or, equivalently, the ‘%global-table’ declaration) is given. - -
    ‘-S total-switch-statements -
    -
    ‘--switch=total-switch-statements -
    - -Causes the generated C code to use a switch statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many switch statements are generated. A -value of 1 generates 1 switch containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -switch, etc. This is useful since many C compilers cannot -correctly generate code for large switch statements. This option -was inspired in part by Keith Bostic's original C program. - -
    ‘-T’ -
    -
    ‘--omit-struct-type’ -
    -Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. - -
    ‘-p’ -
    -This option is supported for compatibility with previous releases of -gperf. It does not do anything. -
    - - - -

    5.5 Options for changing the Algorithms employed by gperf

    - -
    - -
    ‘-k selected-byte-positions -
    -
    ‘--key-positions=selected-byte-positions -
    -Allows selection of the byte positions used in the keywords' -hash function. The allowable choices range between 1-255, inclusive. -The positions are separated by commas, e.g., ‘-k 9,4,13,14’; -ranges may be used, e.g., ‘-k 2-7’; and positions may occur -in any order. Furthermore, the wildcard '*' causes the generated -hash function to consider all byte positions in each keyword, -whereas '$' instructs the hash function to use the “final byte” -of a keyword (this is the only way to use a byte position greater than -255, incidentally). - -For instance, the option ‘-k 1,2,4,6-10,'$'’ generates a hash -function that considers positions 1,2,4,6,7,8,9,10, plus the last -byte in each keyword (which may be at a different position for each -keyword, obviously). Keywords -with length less than the indicated byte positions work properly, since -selected byte positions exceeding the keyword length are simply not -referenced in the hash function. - -This option is not normally needed since version 2.8 of gperf; -the default byte positions are computed depending on the keyword set, -through a search that minimizes the number of byte positions. - -
    ‘-D’ -
    -
    ‘--duplicates’ -
    - -Handle keywords whose selected byte sets hash to duplicate values. -Duplicate hash values can occur if a set of keywords has the same names, but -possesses different attributes, or if the selected byte positions are not well -chosen. With the -D option gperf treats all these keywords as -part of an equivalence class and generates a perfect hash function with -multiple comparisons for duplicate keywords. It is up to you to completely -disambiguate the keywords by modifying the generated C code. However, -gperf helps you out by organizing the output. - -Using this option usually means that the generated hash function is no -longer perfect. On the other hand, it permits gperf to work on -keyword sets that it otherwise could not handle. - -
    ‘-m iterations -
    -
    ‘--multiple-iterations=iterations -
    -Perform multiple choices of the ‘-i’ and ‘-j’ values, and -choose the best results. This increases the running time by a factor of -iterations but does a good job minimizing the generated table size. - -
    ‘-i initial-value -
    -
    ‘--initial-asso=initial-value -
    -Provides an initial value for the associate values array. Default -is 0. Increasing the initial value helps inflate the final table size, -possibly leading to more time efficient keyword lookups. Note that this -option is not particularly useful when ‘-S’ (or, equivalently, -‘%switch’) is used. Also, -‘-i’ is overridden when the ‘-r’ option is used. - -
    ‘-j jump-value -
    -
    ‘--jump=jump-value -
    - -Affects the “jump value”, i.e., how far to advance the associated -byte value upon collisions. Jump-value is rounded up to an -odd number, the default is 5. If the jump-value is 0 gperf -jumps by random amounts. - -
    ‘-n’ -
    -
    ‘--no-strlen’ -
    -Instructs the generator not to include the length of a keyword when -computing its hash value. This may save a few assembly instructions in -the generated lookup table. - -
    ‘-r’ -
    -
    ‘--random’ -
    -Utilizes randomness to initialize the associated values table. This -frequently generates solutions faster than using deterministic -initialization (which starts all associated values at 0). Furthermore, -using the randomization option generally increases the size of the -table. - -
    ‘-s size-multiple -
    -
    ‘--size-multiple=size-multiple -
    -Affects the size of the generated hash table. The numeric argument for -this option indicates “how many times larger or smaller” the maximum -associated value range should be, in relationship to the number of keywords. -It can be written as an integer, a floating-point number or a fraction. -For example, a value of 3 means “allow the maximum associated value to be -about 3 times larger than the number of input keywords”. -Conversely, a value of 1/3 means “allow the maximum associated value to -be about 3 times smaller than the number of input keywords”. Values -smaller than 1 are useful for limiting the overall size of the generated hash -table, though the option ‘-m’ is better at this purpose. - -If `generate switch' option ‘-S’ (or, equivalently, ‘%switch’) is -not enabled, the maximum -associated value influences the static array table size, and a larger -table should decrease the time required for an unsuccessful search, at -the expense of extra table space. - -The default value is 1, thus the default maximum associated value about -the same size as the number of keywords (for efficiency, the maximum -associated value is always rounded up to a power of 2). The actual -table size may vary somewhat, since this technique is essentially a -heuristic. -
    - - - -

    5.6 Informative Output

    - -
    - -
    ‘-h’ -
    -
    ‘--help’ -
    -Prints a short summary on the meaning of each program option. Aborts -further program execution. - -
    ‘-v’ -
    -
    ‘--version’ -
    -Prints out the current version number. - -
    ‘-d’ -
    -
    ‘--debug’ -
    -Enables the debugging option. This produces verbose diagnostics to -“standard error” when gperf is executing. It is useful both for -maintaining the program and for determining whether a given set of -options is actually speeding up the search for a solution. Some useful -information is dumped at the end of the program when the ‘-d’ -option is enabled. -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_7.html b/doc/gperf_7.html deleted file mode 100644 index af5edf8..0000000 --- a/doc/gperf_7.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - -Perfect Hash Function Generator - 6 Known Bugs and Limitations with gperf - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    6 Known Bugs and Limitations with gperf

    - -

    -The following are some limitations with the current release of -gperf: - -

    - -
      -
    • - -The gperf utility is tuned to execute quickly, and works quickly -for small to medium size data sets (around 1000 keywords). It is -extremely useful for maintaining perfect hash functions for compiler -keyword sets. Several recent enhancements now enable gperf to -work efficiently on much larger keyword sets (over 15,000 keywords). -When processing large keyword sets it helps greatly to have over 8 megs -of RAM. - -
    • - -The size of the generate static keyword array can get extremely -large if the input keyword file is large or if the keywords are quite -similar. This tends to slow down the compilation of the generated C -code, and greatly inflates the object code size. If this -situation occurs, consider using the ‘-S’ option to reduce data -size, potentially increasing keyword recognition time a negligible -amount. Since many C compilers cannot correctly generate code for -large switch statements it is important to qualify the -S option -with an appropriate numerical argument that controls the number of -switch statements generated. - -
    • - -The maximum number of selected byte positions has an -arbitrary limit of 255. This restriction should be removed, and if -anyone considers this a problem write me and let me know so I can remove -the constraint. -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_8.html b/doc/gperf_8.html deleted file mode 100644 index fecdb26..0000000 --- a/doc/gperf_8.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - -Perfect Hash Function Generator - 7 Things Still Left to Do - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    7 Things Still Left to Do

    - -

    -It should be “relatively” easy to replace the current perfect hash -function algorithm with a more exhaustive approach; the perfect hash -module is essential independent from other program modules. Additional -worthwhile improvements include: - -

    - -
      -
    • - -Another useful extension involves modifying the program to generate -“minimal” perfect hash functions (under certain circumstances, the -current version can be rather extravagant in the generated table size). -This is mostly of theoretical interest, since a sparse table -often produces faster lookups, and use of the ‘-S’ switch -option can minimize the data size, at the expense of slightly longer -lookups (note that the gcc compiler generally produces good code for -switch statements, reducing the need for more complex schemes). - -
    • - -In addition to improving the algorithm, it would also be useful to -generate an Ada package as the code output, in addition to the current -C and C++ routines. -
    - -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_9.html b/doc/gperf_9.html deleted file mode 100644 index 4664479..0000000 --- a/doc/gperf_9.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - -Perfect Hash Function Generator - 8 Bibliography - - -Go to the first, previous, next, last section, table of contents. -


    - - -

    8 Bibliography

    - -

    -[1] Chang, C.C.: A Scheme for Constructing Ordered Minimal Perfect -Hashing Functions Information Sciences 39(1986), 187-195. - -

    -

    -[2] Cichelli, Richard J. Author's Response to “On Cichelli's Minimal Perfect Hash -Functions Method” Communications of the ACM, 23, 12(December 1980), 729. - -

    -

    -[3] Cichelli, Richard J. Minimal Perfect Hash Functions Made Simple -Communications of the ACM, 23, 1(January 1980), 17-19. - -

    -

    -[4] Cook, C. R. and Oldehoeft, R.R. A Letter Oriented Minimal -Perfect Hashing Function SIGPLAN Notices, 17, 9(September 1982), 18-27. - -

    -

    -[5] Cormack, G. V. and Horspool, R. N. S. and Kaiserwerth, M. -Practical Perfect Hashing Computer Journal, 28, 1(January 1985), 54-58. - -

    -

    -[6] Jaeschke, G. Reciprocal Hashing: A Method for Generating Minimal -Perfect Hashing Functions Communications of the ACM, 24, 12(December -1981), 829-833. - -

    -

    -[7] Jaeschke, G. and Osterburg, G. On Cichelli's Minimal Perfect -Hash Functions Method Communications of the ACM, 23, 12(December 1980), -728-729. - -

    -

    -[8] Sager, Thomas J. A Polynomial Time Generator for Minimal Perfect -Hash Functions Communications of the ACM, 28, 5(December 1985), 523-532 - -

    -

    -[9] Schmidt, Douglas C. GPERF: A Perfect Hash Function Generator -Second USENIX C++ Conference Proceedings, April 1990. - -

    -

    -[10] Schmidt, Douglas C. GPERF: A Perfect Hash Function Generator -C++ Report, SIGS 10 10 (November/December 1998). - -

    -

    -[11] Sebesta, R.W. and Taylor, M.A. Minimal Perfect Hash Functions -for Reserved Word Lists SIGPLAN Notices, 20, 12(September 1985), 47-53. - -

    -

    -[12] Sprugnoli, R. Perfect Hashing Functions: A Single Probe -Retrieving Method for Static Sets Communications of the ACM, 20 -11(November 1977), 841-850. - -

    -

    -[13] Stallman, Richard M. Using and Porting GNU CC Free Software Foundation, -1988. - -

    -

    -[14] Stroustrup, Bjarne The C++ Programming Language. Addison-Wesley, 1986. - -

    -

    -[15] Tiemann, Michael D. User's Guide to GNU C++ Free Software -Foundation, 1989. - -

    -


    -Go to the first, previous, next, last section, table of contents. - - diff --git a/doc/gperf_toc.html b/doc/gperf_toc.html deleted file mode 100644 index 3f09a68..0000000 --- a/doc/gperf_toc.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - -Perfect Hash Function Generator - Table of Contents - - -

    User's Guide to gperf 3.1

    -

    The GNU Perfect Hash Function Generator

    -

    Edition 3.1, 20 December 2009

    -
    Douglas C. Schmidt
    -
    Bruno Haible
    -

    -


    -

    -


    -This document was generated on 20 December 2009 using the -texi2html -translator version 1.52b.

    - -